swiftui-multiplatform/Shared/Account/AccountModel.swift
Angelo Stavrow a51bbd3abc
Alert on error: shared code (#207)
* Initial work on presenting alert on error

* Move Account-related error handling up the hierarchy

* Handle errors on logout

* Fix for temporary debugging

* Clean up WriteFreelyModel’s published vars

* Add error handling to top-level content view

* Set current error on API call failures

* Set current error on API call handlers

* Move User Defaults errors to ErrorConstants file

* Add default values for some error strings

* Handle purging post errors

* Add FIXME to track silent failure on fetching collections

As collections are fetched and added to the `list` property in the CollectionListModel’s initializer, it’s tricky to throw an error here: we call it as a property initializer in CollectionListView, which cannot throw.

Consider refactoring this logic such that we’re using, for example, a @FetchRequest in CollectionListView instead.

* Handle errors in (most) shared code

Two outliers to come back to are:

- the LocalStoreManager, where we can’t set a current error in the WriteFreelyModel in methods that can’t throw
- the CollectionListModel, where the initializer can’t throw because we use it as a property initializer in CollectionListView

* Add error handling to Mac app

* Revert "Add error handling to Mac app"

This reverts commit b1a8b8b29c.
2022-07-27 09:56:32 -04:00

33 lines
1007 B
Swift

import SwiftUI
import WriteFreely
struct AccountModel {
@AppStorage(WFDefaults.isLoggedIn, store: UserDefaults.shared) var isLoggedIn: Bool = false
private let defaults = UserDefaults.shared
var server: String = ""
var username: String = ""
private(set) var user: WFUser?
mutating func login(_ user: WFUser) {
self.user = user
self.username = user.username ?? ""
self.isLoggedIn = true
defaults.set(user.username, forKey: WFDefaults.usernameStringKey)
defaults.set(server, forKey: WFDefaults.serverStringKey)
}
mutating func logout() {
self.user = nil
self.isLoggedIn = false
defaults.removeObject(forKey: WFDefaults.usernameStringKey)
defaults.removeObject(forKey: WFDefaults.serverStringKey)
}
mutating func restoreState() {
server = defaults.string(forKey: WFDefaults.serverStringKey) ?? ""
username = defaults.string(forKey: WFDefaults.usernameStringKey) ?? ""
}
}