Skip to content

Commit

Permalink
[create-pull-request] automated change
Browse files Browse the repository at this point in the history
  • Loading branch information
jellyfin-bot authored Aug 13, 2021
1 parent 5a96120 commit 7532aa5
Show file tree
Hide file tree
Showing 10 changed files with 39 additions and 40 deletions.
6 changes: 3 additions & 3 deletions Shared/Errors/ErrorMessage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
45 changes: 22 additions & 23 deletions Shared/Errors/NetworkError.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,23 @@
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".
The specific kind of errors here should be created and surfaced from within JellyfinAPI on API calls.
*/

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):
Expand All @@ -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
Expand All @@ -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 {
Expand All @@ -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:
Expand All @@ -146,7 +145,7 @@ enum NetworkError: Error {
logConstructor: logConstructor)
}
}

return errorMessage
}
}
2 changes: 1 addition & 1 deletion Shared/ViewModels/ConnectToServerViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import Foundation
import JellyfinAPI

final class ConnectToServerViewModel: ViewModel {

@Published var isConnectedServer = false

var uriSubject = CurrentValueSubject<String, Never>("")
Expand Down
2 changes: 1 addition & 1 deletion Shared/ViewModels/DetailItemViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import Foundation
import JellyfinAPI

class DetailItemViewModel: ViewModel {

@Published var item: BaseItemDto
@Published var similarItems: [BaseItemDto] = []

Expand Down
2 changes: 1 addition & 1 deletion Shared/ViewModels/LatestMediaViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import Foundation
import JellyfinAPI

final class LatestMediaViewModel: ViewModel {

@Published var items = [BaseItemDto]()

var libraryID: String
Expand Down
2 changes: 1 addition & 1 deletion Shared/ViewModels/LibraryFilterViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ enum FilterType {
}

final class LibraryFilterViewModel: ViewModel {

@Published var modifiedFilters = LibraryFilters()

@Published var possibleGenres = [NameGuidPair]()
Expand Down
2 changes: 1 addition & 1 deletion Shared/ViewModels/LibraryListViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import Foundation
import JellyfinAPI

final class LibraryListViewModel: ViewModel {

@Published var libraries = [BaseItemDto]()

// temp
Expand Down
2 changes: 1 addition & 1 deletion Shared/ViewModels/SeasonItemViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import Foundation
import JellyfinAPI

final class SeasonItemViewModel: DetailItemViewModel {

@Published var episodes = [BaseItemDto]()

override init(item: BaseItemDto) {
Expand Down
2 changes: 1 addition & 1 deletion Shared/ViewModels/SeriesItemViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import Foundation
import JellyfinAPI

final class SeriesItemViewModel: DetailItemViewModel {

@Published var seasons = [BaseItemDto]()
@Published var nextUpItem: BaseItemDto?

Expand Down
14 changes: 7 additions & 7 deletions Shared/ViewModels/ViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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()
}
}
Expand Down

0 comments on commit 7532aa5

Please sign in to comment.