mirror of
https://github.com/jellyfin/Swiftfin.git
synced 2025-03-02 20:15:36 +00:00
[create-pull-request] automated change
This commit is contained in:
parent
5a96120722
commit
7532aa564c
@ -11,16 +11,16 @@ import Foundation
|
||||
import JellyfinAPI
|
||||
|
||||
struct ErrorMessage: Identifiable {
|
||||
|
||||
|
||||
let code: Int
|
||||
let title: String
|
||||
let displayMessage: String
|
||||
let logConstructor: LogConstructor
|
||||
|
||||
|
||||
var id: String {
|
||||
return "\(code)\(title)\(logConstructor.message)"
|
||||
}
|
||||
|
||||
|
||||
/// If the custom displayMessage is `nil`, it will be set to the given logConstructor's message
|
||||
init(code: Int, title: String, displayMessage: String?, logConstructor: LogConstructor) {
|
||||
self.code = code
|
||||
|
@ -10,7 +10,6 @@
|
||||
import Foundation
|
||||
import JellyfinAPI
|
||||
|
||||
|
||||
/**
|
||||
The implementation of the network errors here are a temporary measure.
|
||||
It is very repetitive, messy, and doesn't fulfill the entire specification of "error reporting".
|
||||
@ -18,16 +17,16 @@ import JellyfinAPI
|
||||
*/
|
||||
|
||||
enum NetworkError: Error {
|
||||
|
||||
|
||||
/// For the case that the ErrorResponse object has a code of -1
|
||||
case URLError(response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor)
|
||||
|
||||
|
||||
/// For the case that the ErrorRespones object has a code of -2
|
||||
case HTTPURLError(response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor)
|
||||
|
||||
|
||||
/// For the case that the ErrorResponse object has a positive code
|
||||
case JellyfinError(response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor)
|
||||
|
||||
|
||||
var errorMessage: ErrorMessage {
|
||||
switch self {
|
||||
case .URLError(let response, let displayMessage, let logConstructor):
|
||||
@ -38,11 +37,11 @@ enum NetworkError: Error {
|
||||
return NetworkError.parseJellyfinError(from: response, displayMessage: displayMessage, logConstructor: logConstructor)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func logMessage() {
|
||||
let logConstructor = errorMessage.logConstructor
|
||||
let logFunction: (@autoclosure () -> String, String, String, String, UInt) -> Void
|
||||
|
||||
|
||||
switch logConstructor.level {
|
||||
case .trace:
|
||||
logFunction = LogManager.shared.log.trace
|
||||
@ -59,19 +58,19 @@ enum NetworkError: Error {
|
||||
case ._none:
|
||||
logFunction = LogManager.shared.log.debug
|
||||
}
|
||||
|
||||
|
||||
logFunction(logConstructor.message, logConstructor.tag, logConstructor.function, logConstructor.file, logConstructor.line)
|
||||
}
|
||||
|
||||
|
||||
private static func parseURLError(from response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor) -> ErrorMessage {
|
||||
|
||||
|
||||
let errorMessage: ErrorMessage
|
||||
var logMessage = "An error has occurred."
|
||||
var logConstructor = logConstructor
|
||||
|
||||
|
||||
switch response {
|
||||
case .error(_, _, _, let err):
|
||||
|
||||
|
||||
// These codes are currently referenced from:
|
||||
// https://developer.apple.com/documentation/foundation/1508628-url_loading_system_error_codes
|
||||
switch err._code {
|
||||
@ -97,38 +96,38 @@ enum NetworkError: Error {
|
||||
logConstructor: logConstructor)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return errorMessage
|
||||
}
|
||||
|
||||
|
||||
private static func parseHTTPURLError(from response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor) -> ErrorMessage {
|
||||
|
||||
|
||||
let errorMessage: ErrorMessage
|
||||
let logMessage = "An HTTP URL error has occurred"
|
||||
var logConstructor = logConstructor
|
||||
|
||||
|
||||
// Not implemented as has not run into one of these errors as time of writing
|
||||
switch response {
|
||||
case .error(_, _, _, _):
|
||||
case .error:
|
||||
logConstructor.message = logMessage
|
||||
errorMessage = ErrorMessage(code: 0,
|
||||
title: "Error",
|
||||
displayMessage: displayMessage,
|
||||
logConstructor: logConstructor)
|
||||
}
|
||||
|
||||
|
||||
return errorMessage
|
||||
}
|
||||
|
||||
|
||||
private static func parseJellyfinError(from response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor) -> ErrorMessage {
|
||||
|
||||
|
||||
let errorMessage: ErrorMessage
|
||||
var logMessage = "An error has occurred."
|
||||
var logConstructor = logConstructor
|
||||
|
||||
|
||||
switch response {
|
||||
case .error(let code, _, _, _):
|
||||
|
||||
|
||||
// Generic HTTP status codes
|
||||
switch code {
|
||||
case 401:
|
||||
@ -146,7 +145,7 @@ enum NetworkError: Error {
|
||||
logConstructor: logConstructor)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return errorMessage
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ import Foundation
|
||||
import JellyfinAPI
|
||||
|
||||
final class ConnectToServerViewModel: ViewModel {
|
||||
|
||||
|
||||
@Published var isConnectedServer = false
|
||||
|
||||
var uriSubject = CurrentValueSubject<String, Never>("")
|
||||
|
@ -12,7 +12,7 @@ import Foundation
|
||||
import JellyfinAPI
|
||||
|
||||
class DetailItemViewModel: ViewModel {
|
||||
|
||||
|
||||
@Published var item: BaseItemDto
|
||||
@Published var similarItems: [BaseItemDto] = []
|
||||
|
||||
|
@ -12,7 +12,7 @@ import Foundation
|
||||
import JellyfinAPI
|
||||
|
||||
final class LatestMediaViewModel: ViewModel {
|
||||
|
||||
|
||||
@Published var items = [BaseItemDto]()
|
||||
|
||||
var libraryID: String
|
||||
|
@ -20,7 +20,7 @@ enum FilterType {
|
||||
}
|
||||
|
||||
final class LibraryFilterViewModel: ViewModel {
|
||||
|
||||
|
||||
@Published var modifiedFilters = LibraryFilters()
|
||||
|
||||
@Published var possibleGenres = [NameGuidPair]()
|
||||
|
@ -11,7 +11,7 @@ import Foundation
|
||||
import JellyfinAPI
|
||||
|
||||
final class LibraryListViewModel: ViewModel {
|
||||
|
||||
|
||||
@Published var libraries = [BaseItemDto]()
|
||||
|
||||
// temp
|
||||
|
@ -12,7 +12,7 @@ import Foundation
|
||||
import JellyfinAPI
|
||||
|
||||
final class SeasonItemViewModel: DetailItemViewModel {
|
||||
|
||||
|
||||
@Published var episodes = [BaseItemDto]()
|
||||
|
||||
override init(item: BaseItemDto) {
|
||||
|
@ -12,7 +12,7 @@ import Foundation
|
||||
import JellyfinAPI
|
||||
|
||||
final class SeriesItemViewModel: DetailItemViewModel {
|
||||
|
||||
|
||||
@Published var seasons = [BaseItemDto]()
|
||||
@Published var nextUpItem: BaseItemDto?
|
||||
|
||||
|
@ -13,27 +13,27 @@ import ActivityIndicator
|
||||
import JellyfinAPI
|
||||
|
||||
class ViewModel: ObservableObject {
|
||||
|
||||
|
||||
@Published var isLoading = true
|
||||
@Published var errorMessage: ErrorMessage?
|
||||
|
||||
|
||||
let loading = ActivityIndicator()
|
||||
var cancellables = Set<AnyCancellable>()
|
||||
|
||||
init() {
|
||||
loading.loading.assign(to: \.isLoading, on: self).store(in: &cancellables)
|
||||
}
|
||||
|
||||
|
||||
func handleAPIRequestError(displayMessage: String? = nil, logLevel: LogLevel = .error, tag: String = "", function: String = #function, file: String = #file, line: UInt = #line, completion: Subscribers.Completion<Error>) {
|
||||
switch completion {
|
||||
case .finished:
|
||||
break
|
||||
case .failure(let error):
|
||||
if let errorResponse = error as? ErrorResponse {
|
||||
|
||||
|
||||
let networkError: NetworkError
|
||||
let logConstructor = LogConstructor(message: "__NOTHING__", tag: tag, level: logLevel, function: function, file: file, line: line)
|
||||
|
||||
|
||||
switch errorResponse {
|
||||
case .error(-1, _, _, _):
|
||||
networkError = .URLError(response: errorResponse, displayMessage: displayMessage, logConstructor: logConstructor)
|
||||
@ -47,9 +47,9 @@ class ViewModel: ObservableObject {
|
||||
// Able to use user-facing friendly description here since just HTTP status codes
|
||||
LogManager.shared.log.error("Request failed: \(networkError.errorMessage.code) - \(networkError.errorMessage.title): \(networkError.errorMessage.logConstructor.message)\n\(error.localizedDescription)")
|
||||
}
|
||||
|
||||
|
||||
self.errorMessage = networkError.errorMessage
|
||||
|
||||
|
||||
networkError.logMessage()
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user