Less obnoxious error handling

This commit is contained in:
Arkadiusz Fal
2022-12-16 09:35:10 +01:00
parent a9c8053474
commit 4330856c5e
10 changed files with 97 additions and 25 deletions

View File

@@ -20,6 +20,8 @@ final class SubscribedChannelsModel: ObservableObject, CacheModel {
@Published var isLoading = false
@Published var channels = [Channel]()
@Published var error: RequestError?
var accounts: AccountsModel { .shared }
var resource: Resource? {
@@ -67,6 +69,7 @@ final class SubscribedChannelsModel: ObservableObject, CacheModel {
self?.isLoading = false
}
.onSuccess { resource in
self.error = nil
if let channels: [Channel] = resource.typedContent() {
self.channels = channels
channels.forEach { ChannelsCacheModel.shared.storeIfMissing($0) }
@@ -75,9 +78,7 @@ final class SubscribedChannelsModel: ObservableObject, CacheModel {
onSuccess()
}
}
.onFailure { _ in
self.channels = []
}
.onFailure { self.error = $0 }
}
}

View File

@@ -18,6 +18,8 @@ final class FeedModel: ObservableObject, CacheModel {
var storage: Storage<String, JSON>?
@Published var error: RequestError?
private var backgroundContext = PersistenceController.shared.container.newBackgroundContext()
var feed: Resource? {
@@ -79,6 +81,7 @@ final class FeedModel: ObservableObject, CacheModel {
onCompletion()
}
.onSuccess { response in
self.error = nil
if let videos: [Video] = response.typedContent() {
if paginating {
self.videos.append(contentsOf: videos)
@@ -89,9 +92,7 @@ final class FeedModel: ObservableObject, CacheModel {
}
}
}
.onFailure { error in
NavigationModel.shared.presentAlert(title: "Could not refresh Subscriptions", message: error.userMessage)
}
.onFailure { self.error = $0 }
}
}

View File

@@ -1,4 +1,5 @@
import Foundation
import Siesta
import SwiftUI
final class NavigationModel: ObservableObject {
@@ -257,6 +258,11 @@ final class NavigationModel: ObservableObject {
presentingAlert = true
}
func presentRequestErrorAlert(_ error: RequestError) {
let errorDescription = String(format: "Verify you have stable connection with the server you are using (%@)", AccountsModel.shared.current.instance.longDescription)
presentAlert(title: "Connection Error", message: "\(error.userMessage)\n\n\(errorDescription)")
}
func presentAlert(_ alert: Alert) {
self.alert = alert
presentingAlert = true

View File

@@ -9,6 +9,7 @@ final class PlaylistsModel: ObservableObject {
@Published var isLoading = false
@Published var playlists = [Playlist]()
@Published var reloadPlaylists = false
@Published var error: RequestError?
var accounts = AccountsModel.shared
@@ -60,16 +61,14 @@ final class PlaylistsModel: ObservableObject {
self?.isLoading = false
}
.onSuccess { resource in
self.error = nil
if let playlists: [Playlist] = resource.typedContent() {
self.playlists = playlists
PlaylistsCacheModel.shared.storePlaylist(account: account, playlists: playlists)
onSuccess()
}
}
.onFailure { error in
self.playlists = []
NavigationModel.shared.presentAlert(title: "Could not refresh Playlists", message: error.userMessage)
}
.onFailure { self.error = $0 }
}
}