|
|
|
|
@ -16,16 +16,18 @@ class DataStore: ObservableObject { |
|
|
|
|
|
|
|
|
|
@Published var user: User = User.placeHolder() { |
|
|
|
|
didSet { |
|
|
|
|
Store.main.collectionsCanSynchronize = (user.username.count > 0) |
|
|
|
|
do { |
|
|
|
|
let loggedUser = (user.username.count > 0) |
|
|
|
|
Store.main.collectionsCanSynchronize = loggedUser |
|
|
|
|
|
|
|
|
|
if loggedUser { |
|
|
|
|
if self.user.id != self.userStorage.item()?.id { |
|
|
|
|
try self.userStorage.setItemNoSync(self.user) |
|
|
|
|
self.userStorage.setItemNoSync(self.user) |
|
|
|
|
if Store.main.collectionsCanSynchronize { |
|
|
|
|
Store.main.loadCollectionFromServer() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch { |
|
|
|
|
Logger.error(error) |
|
|
|
|
} else { |
|
|
|
|
self._temporaryLocalUser.item = self.user |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -44,10 +46,10 @@ class DataStore: ObservableObject { |
|
|
|
|
fileprivate(set) var dateIntervals: StoredCollection<DateInterval> |
|
|
|
|
fileprivate(set) var matchSchedulers: StoredCollection<MatchScheduler> |
|
|
|
|
|
|
|
|
|
fileprivate(set) var userStorage: StoredSingleton<User> |
|
|
|
|
fileprivate var userStorage: StoredSingleton<User> |
|
|
|
|
|
|
|
|
|
// fileprivate var _userStorage: OptionalStorage<User> = OptionalStorage<User>(fileName: "user.json") |
|
|
|
|
fileprivate(set) var appSettingsStorage: MicroStorage<AppSettings> = MicroStorage() |
|
|
|
|
fileprivate var _temporaryLocalUser: OptionalStorage<User> = OptionalStorage(fileName: "tmp_local_user.json") |
|
|
|
|
fileprivate(set) var appSettingsStorage: MicroStorage<AppSettings> = MicroStorage(fileName: "appsettings.json") |
|
|
|
|
|
|
|
|
|
var appSettings: AppSettings { |
|
|
|
|
appSettingsStorage.item |
|
|
|
|
@ -58,6 +60,8 @@ class DataStore: ObservableObject { |
|
|
|
|
store.synchronizationApiURL = "https://xlr.alwaysdata.net/api/" |
|
|
|
|
var synchronized : Bool = true |
|
|
|
|
|
|
|
|
|
self.user = User.placeHolder() // force the didSet |
|
|
|
|
|
|
|
|
|
#if DEBUG |
|
|
|
|
if let server = PListReader.readString(plist: "local", key: "server") { |
|
|
|
|
store.synchronizationApiURL = server |
|
|
|
|
@ -91,14 +95,32 @@ class DataStore: ObservableObject { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@objc func collectionDidLoad(notification: Notification) { |
|
|
|
|
self.objectWillChange.send() |
|
|
|
|
if let object: StoredSingleton<User> = notification.object as? StoredSingleton<User> { |
|
|
|
|
Logger.log("StoredObject<User> loaded with user = \(String(describing: object.item()))") |
|
|
|
|
func saveUser() { |
|
|
|
|
|
|
|
|
|
if let user = object.item() { |
|
|
|
|
self.user = user |
|
|
|
|
do { |
|
|
|
|
if user.username.count > 0 { |
|
|
|
|
try self.userStorage.update() |
|
|
|
|
} else { |
|
|
|
|
self._temporaryLocalUser.item = self.user |
|
|
|
|
} |
|
|
|
|
} catch { |
|
|
|
|
Logger.error(error) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@objc func collectionDidLoad(notification: Notification) { |
|
|
|
|
self.objectWillChange.send() |
|
|
|
|
if let userSingleton: StoredSingleton<User> = notification.object as? StoredSingleton<User> { |
|
|
|
|
Logger.log("StoredObject<User> loaded with user = \(String(describing: userSingleton.item()))") |
|
|
|
|
|
|
|
|
|
self.user = userSingleton.item() ?? User.placeHolder() |
|
|
|
|
// if let user = object.item() { |
|
|
|
|
// self.user = user |
|
|
|
|
// } else { |
|
|
|
|
// self. |
|
|
|
|
// } |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -112,6 +134,8 @@ class DataStore: ObservableObject { |
|
|
|
|
// todo qu'est ce qu'on fait des API Call ? |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
self.user = self._temporaryLocalUser.item ?? User.placeHolder() |
|
|
|
|
|
|
|
|
|
Store.main.disconnect() |
|
|
|
|
Store.main.collectionsCanSynchronize = false |
|
|
|
|
|
|
|
|
|
|