diff --git a/Shared/Extensions/WriteFreelyModel+APIHandlers.swift b/Shared/Extensions/WriteFreelyModel+APIHandlers.swift index b6dc7f3..3163676 100644 --- a/Shared/Extensions/WriteFreelyModel+APIHandlers.swift +++ b/Shared/Extensions/WriteFreelyModel+APIHandlers.swift @@ -40,8 +40,8 @@ extension WriteFreelyModel { client = nil DispatchQueue.main.async { self.account.logout() - LocalStorageManager.standard.purgeUserCollections() do { + try LocalStorageManager.standard.purgeUserCollections() try self.posts.purgePublishedPosts() } catch { self.currentError = error @@ -59,8 +59,8 @@ extension WriteFreelyModel { client = nil DispatchQueue.main.async { self.account.logout() - LocalStorageManager.standard.purgeUserCollections() do { + try LocalStorageManager.standard.purgeUserCollections() try self.posts.purgePublishedPosts() } catch { self.currentError = error diff --git a/Shared/LocalStorageManager.swift b/Shared/LocalStorageManager.swift index af62660..ae074b4 100644 --- a/Shared/LocalStorageManager.swift +++ b/Shared/LocalStorageManager.swift @@ -23,19 +23,19 @@ final class LocalStorageManager { do { try container.viewContext.save() } catch { - print(LocalStoreError.couldNotSaveContext.localizedDescription) + fatalError(LocalStoreError.couldNotSaveContext.localizedDescription) } } } - func purgeUserCollections() { + func purgeUserCollections() throws { let fetchRequest: NSFetchRequest = NSFetchRequest(entityName: "WFACollection") let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest) do { try container.viewContext.executeAndMergeChanges(using: deleteRequest) } catch { - print(LocalStoreError.couldNotPurgeCollections.localizedDescription) + throw LocalStoreError.couldNotPurgeCollections } } diff --git a/Shared/PostCollection/CollectionListModel.swift b/Shared/PostCollection/CollectionListModel.swift index 86e4088..b2ac884 100644 --- a/Shared/PostCollection/CollectionListModel.swift +++ b/Shared/PostCollection/CollectionListModel.swift @@ -20,7 +20,7 @@ class CollectionListModel: NSObject, ObservableObject { list = collectionsController.fetchedObjects ?? [] } catch { // FIXME: Errors cannot be thrown out of the CollectionListView property initializer - print("Failed to fetch collections!") + fatalError(LocalStoreError.couldNotFetchCollections.localizedDescription) } } } diff --git a/Shared/PostCollection/CollectionListView.swift b/Shared/PostCollection/CollectionListView.swift index 29e84b1..0975fff 100644 --- a/Shared/PostCollection/CollectionListView.swift +++ b/Shared/PostCollection/CollectionListView.swift @@ -2,6 +2,7 @@ import SwiftUI struct CollectionListView: View { @EnvironmentObject var model: WriteFreelyModel + @EnvironmentObject var errorHandling: ErrorHandling @ObservedObject var collections = CollectionListModel( managedObjectContext: LocalStorageManager.standard.container.viewContext ) @@ -40,6 +41,16 @@ struct CollectionListView: View { self.model.editor.showAllPostsFlag = model.showAllPosts } } + .onChange(of: model.hasError) { value in + if value { + if let error = model.currentError { + self.errorHandling.handle(error: error) + } else { + self.errorHandling.handle(error: AppError.genericError()) + } + model.hasError = false + } + } } }