[create-pull-request] automated change

This commit is contained in:
jellyfin-bot 2021-08-13 23:57:00 +00:00 committed by GitHub
parent 5a96120722
commit 7532aa564c
10 changed files with 39 additions and 40 deletions

View File

@ -11,16 +11,16 @@ import Foundation
import JellyfinAPI import JellyfinAPI
struct ErrorMessage: Identifiable { struct ErrorMessage: Identifiable {
let code: Int let code: Int
let title: String let title: String
let displayMessage: String let displayMessage: String
let logConstructor: LogConstructor let logConstructor: LogConstructor
var id: String { var id: String {
return "\(code)\(title)\(logConstructor.message)" return "\(code)\(title)\(logConstructor.message)"
} }
/// If the custom displayMessage is `nil`, it will be set to the given logConstructor's 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) { init(code: Int, title: String, displayMessage: String?, logConstructor: LogConstructor) {
self.code = code self.code = code

View File

@ -10,7 +10,6 @@
import Foundation import Foundation
import JellyfinAPI import JellyfinAPI
/** /**
The implementation of the network errors here are a temporary measure. 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". It is very repetitive, messy, and doesn't fulfill the entire specification of "error reporting".
@ -18,16 +17,16 @@ import JellyfinAPI
*/ */
enum NetworkError: Error { enum NetworkError: Error {
/// For the case that the ErrorResponse object has a code of -1 /// For the case that the ErrorResponse object has a code of -1
case URLError(response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor) case URLError(response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor)
/// For the case that the ErrorRespones object has a code of -2 /// For the case that the ErrorRespones object has a code of -2
case HTTPURLError(response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor) case HTTPURLError(response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor)
/// For the case that the ErrorResponse object has a positive code /// For the case that the ErrorResponse object has a positive code
case JellyfinError(response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor) case JellyfinError(response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor)
var errorMessage: ErrorMessage { var errorMessage: ErrorMessage {
switch self { switch self {
case .URLError(let response, let displayMessage, let logConstructor): case .URLError(let response, let displayMessage, let logConstructor):
@ -38,11 +37,11 @@ enum NetworkError: Error {
return NetworkError.parseJellyfinError(from: response, displayMessage: displayMessage, logConstructor: logConstructor) return NetworkError.parseJellyfinError(from: response, displayMessage: displayMessage, logConstructor: logConstructor)
} }
} }
func logMessage() { func logMessage() {
let logConstructor = errorMessage.logConstructor let logConstructor = errorMessage.logConstructor
let logFunction: (@autoclosure () -> String, String, String, String, UInt) -> Void let logFunction: (@autoclosure () -> String, String, String, String, UInt) -> Void
switch logConstructor.level { switch logConstructor.level {
case .trace: case .trace:
logFunction = LogManager.shared.log.trace logFunction = LogManager.shared.log.trace
@ -59,19 +58,19 @@ enum NetworkError: Error {
case ._none: case ._none:
logFunction = LogManager.shared.log.debug logFunction = LogManager.shared.log.debug
} }
logFunction(logConstructor.message, logConstructor.tag, logConstructor.function, logConstructor.file, logConstructor.line) logFunction(logConstructor.message, logConstructor.tag, logConstructor.function, logConstructor.file, logConstructor.line)
} }
private static func parseURLError(from response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor) -> ErrorMessage { private static func parseURLError(from response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor) -> ErrorMessage {
let errorMessage: ErrorMessage let errorMessage: ErrorMessage
var logMessage = "An error has occurred." var logMessage = "An error has occurred."
var logConstructor = logConstructor var logConstructor = logConstructor
switch response { switch response {
case .error(_, _, _, let err): case .error(_, _, _, let err):
// These codes are currently referenced from: // These codes are currently referenced from:
// https://developer.apple.com/documentation/foundation/1508628-url_loading_system_error_codes // https://developer.apple.com/documentation/foundation/1508628-url_loading_system_error_codes
switch err._code { switch err._code {
@ -97,38 +96,38 @@ enum NetworkError: Error {
logConstructor: logConstructor) logConstructor: logConstructor)
} }
} }
return errorMessage return errorMessage
} }
private static func parseHTTPURLError(from response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor) -> ErrorMessage { private static func parseHTTPURLError(from response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor) -> ErrorMessage {
let errorMessage: ErrorMessage let errorMessage: ErrorMessage
let logMessage = "An HTTP URL error has occurred" let logMessage = "An HTTP URL error has occurred"
var logConstructor = logConstructor var logConstructor = logConstructor
// Not implemented as has not run into one of these errors as time of writing // Not implemented as has not run into one of these errors as time of writing
switch response { switch response {
case .error(_, _, _, _): case .error:
logConstructor.message = logMessage logConstructor.message = logMessage
errorMessage = ErrorMessage(code: 0, errorMessage = ErrorMessage(code: 0,
title: "Error", title: "Error",
displayMessage: displayMessage, displayMessage: displayMessage,
logConstructor: logConstructor) logConstructor: logConstructor)
} }
return errorMessage return errorMessage
} }
private static func parseJellyfinError(from response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor) -> ErrorMessage { private static func parseJellyfinError(from response: ErrorResponse, displayMessage: String?, logConstructor: LogConstructor) -> ErrorMessage {
let errorMessage: ErrorMessage let errorMessage: ErrorMessage
var logMessage = "An error has occurred." var logMessage = "An error has occurred."
var logConstructor = logConstructor var logConstructor = logConstructor
switch response { switch response {
case .error(let code, _, _, _): case .error(let code, _, _, _):
// Generic HTTP status codes // Generic HTTP status codes
switch code { switch code {
case 401: case 401:
@ -146,7 +145,7 @@ enum NetworkError: Error {
logConstructor: logConstructor) logConstructor: logConstructor)
} }
} }
return errorMessage return errorMessage
} }
} }

View File

@ -12,7 +12,7 @@ import Foundation
import JellyfinAPI import JellyfinAPI
final class ConnectToServerViewModel: ViewModel { final class ConnectToServerViewModel: ViewModel {
@Published var isConnectedServer = false @Published var isConnectedServer = false
var uriSubject = CurrentValueSubject<String, Never>("") var uriSubject = CurrentValueSubject<String, Never>("")

View File

@ -12,7 +12,7 @@ import Foundation
import JellyfinAPI import JellyfinAPI
class DetailItemViewModel: ViewModel { class DetailItemViewModel: ViewModel {
@Published var item: BaseItemDto @Published var item: BaseItemDto
@Published var similarItems: [BaseItemDto] = [] @Published var similarItems: [BaseItemDto] = []

View File

@ -12,7 +12,7 @@ import Foundation
import JellyfinAPI import JellyfinAPI
final class LatestMediaViewModel: ViewModel { final class LatestMediaViewModel: ViewModel {
@Published var items = [BaseItemDto]() @Published var items = [BaseItemDto]()
var libraryID: String var libraryID: String

View File

@ -20,7 +20,7 @@ enum FilterType {
} }
final class LibraryFilterViewModel: ViewModel { final class LibraryFilterViewModel: ViewModel {
@Published var modifiedFilters = LibraryFilters() @Published var modifiedFilters = LibraryFilters()
@Published var possibleGenres = [NameGuidPair]() @Published var possibleGenres = [NameGuidPair]()

View File

@ -11,7 +11,7 @@ import Foundation
import JellyfinAPI import JellyfinAPI
final class LibraryListViewModel: ViewModel { final class LibraryListViewModel: ViewModel {
@Published var libraries = [BaseItemDto]() @Published var libraries = [BaseItemDto]()
// temp // temp

View File

@ -12,7 +12,7 @@ import Foundation
import JellyfinAPI import JellyfinAPI
final class SeasonItemViewModel: DetailItemViewModel { final class SeasonItemViewModel: DetailItemViewModel {
@Published var episodes = [BaseItemDto]() @Published var episodes = [BaseItemDto]()
override init(item: BaseItemDto) { override init(item: BaseItemDto) {

View File

@ -12,7 +12,7 @@ import Foundation
import JellyfinAPI import JellyfinAPI
final class SeriesItemViewModel: DetailItemViewModel { final class SeriesItemViewModel: DetailItemViewModel {
@Published var seasons = [BaseItemDto]() @Published var seasons = [BaseItemDto]()
@Published var nextUpItem: BaseItemDto? @Published var nextUpItem: BaseItemDto?

View File

@ -13,27 +13,27 @@ import ActivityIndicator
import JellyfinAPI import JellyfinAPI
class ViewModel: ObservableObject { class ViewModel: ObservableObject {
@Published var isLoading = true @Published var isLoading = true
@Published var errorMessage: ErrorMessage? @Published var errorMessage: ErrorMessage?
let loading = ActivityIndicator() let loading = ActivityIndicator()
var cancellables = Set<AnyCancellable>() var cancellables = Set<AnyCancellable>()
init() { init() {
loading.loading.assign(to: \.isLoading, on: self).store(in: &cancellables) 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>) { 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 { switch completion {
case .finished: case .finished:
break break
case .failure(let error): case .failure(let error):
if let errorResponse = error as? ErrorResponse { if let errorResponse = error as? ErrorResponse {
let networkError: NetworkError let networkError: NetworkError
let logConstructor = LogConstructor(message: "__NOTHING__", tag: tag, level: logLevel, function: function, file: file, line: line) let logConstructor = LogConstructor(message: "__NOTHING__", tag: tag, level: logLevel, function: function, file: file, line: line)
switch errorResponse { switch errorResponse {
case .error(-1, _, _, _): case .error(-1, _, _, _):
networkError = .URLError(response: errorResponse, displayMessage: displayMessage, logConstructor: logConstructor) 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 // 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)") LogManager.shared.log.error("Request failed: \(networkError.errorMessage.code) - \(networkError.errorMessage.title): \(networkError.errorMessage.logConstructor.message)\n\(error.localizedDescription)")
} }
self.errorMessage = networkError.errorMessage self.errorMessage = networkError.errorMessage
networkError.logMessage() networkError.logMessage()
} }
} }