|
|
|
|
@ -195,7 +195,7 @@ public class StoreCenter { |
|
|
|
|
self._settingsStorage.update { settings in |
|
|
|
|
settings.username = nil |
|
|
|
|
settings.userId = nil |
|
|
|
|
settings.lastSynchronization = nil |
|
|
|
|
settings.lastSynchronization = Date() |
|
|
|
|
|
|
|
|
|
self._webSocketManager = nil |
|
|
|
|
} |
|
|
|
|
@ -413,22 +413,17 @@ public class StoreCenter { |
|
|
|
|
|
|
|
|
|
func synchronizeLastUpdates() async throws { |
|
|
|
|
|
|
|
|
|
if let lastSync = self._settingsStorage.item.lastSynchronization { |
|
|
|
|
|
|
|
|
|
let syncGetCollection: ApiCallCollection<GetSyncData> = try self.apiCallCollection() |
|
|
|
|
if await syncGetCollection.hasPendingCalls() { |
|
|
|
|
await syncGetCollection.rescheduleApiCallsIfNecessary() |
|
|
|
|
} else { |
|
|
|
|
let getSyncData = GetSyncData() |
|
|
|
|
getSyncData.lastUpdate = lastSync |
|
|
|
|
try await syncGetCollection.sendGetRequest(instance: getSyncData) |
|
|
|
|
} |
|
|
|
|
let lastSync = self._settingsStorage.item.lastSynchronization |
|
|
|
|
|
|
|
|
|
let syncGetCollection: ApiCallCollection<GetSyncData> = try self.apiCallCollection() |
|
|
|
|
if await syncGetCollection.hasPendingCalls() { |
|
|
|
|
await syncGetCollection.rescheduleApiCallsIfNecessary() |
|
|
|
|
} else { |
|
|
|
|
Logger.w("Can't sync due to missing saved date") |
|
|
|
|
let getSyncData = GetSyncData() |
|
|
|
|
getSyncData.lastUpdate = lastSync |
|
|
|
|
try await syncGetCollection.sendGetRequest(instance: getSyncData) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// let lastSync: Date? = self._settingsStorage.item.lastSynchronization |
|
|
|
|
// try await self._services?.synchronizeLastUpdates(since: lastSync) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func userDataAccessRetrieved(_ data: Data) { |
|
|
|
|
@ -473,7 +468,7 @@ public class StoreCenter { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if let revocations = json["revocations"] as? [String: Any] { |
|
|
|
|
try self._parseSyncRevocations(revocations, parents: json["revocation_parents"] as? [String: Any]) |
|
|
|
|
try self._parseSyncRevocations(revocations, parents: json["revocation_parents"] as? [[String: Any]]) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if let dateString = json["date"] as? String, |
|
|
|
|
@ -538,7 +533,7 @@ public class StoreCenter { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fileprivate func _parseSyncRevocations(_ deletions: [String: Any], parents: [String: Any]?) throws { |
|
|
|
|
fileprivate func _parseSyncRevocations(_ deletions: [String: Any], parents: [[String: Any]]?) throws { |
|
|
|
|
for (className, revocationData) in deletions { |
|
|
|
|
guard let revokedItems = revocationData as? [Any] else { |
|
|
|
|
Logger.w("Invalid update data for \(className)") |
|
|
|
|
@ -556,22 +551,23 @@ public class StoreCenter { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if let parents { |
|
|
|
|
for (className, parentData) in parents { |
|
|
|
|
guard let parentItems = parentData as? [Any] else { |
|
|
|
|
Logger.w("Invalid update data for \(className): \(parentData)") |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
for parentItem in parentItems { |
|
|
|
|
do { |
|
|
|
|
let data = try JSONSerialization.data(withJSONObject: parentItem, options: []) |
|
|
|
|
let revokedObject = try JSON.decoder.decode(ObjectIdentifier.self, from: data) |
|
|
|
|
StoreCenter.main.synchronizationRevoke(id: revokedObject.modelId, model: className, storeId: revokedObject.storeId) |
|
|
|
|
} catch { |
|
|
|
|
Logger.error(error) |
|
|
|
|
for level in parents { |
|
|
|
|
for (className, parentData) in level { |
|
|
|
|
guard let parentItems = parentData as? [Any] else { |
|
|
|
|
Logger.w("Invalid update data for \(className): \(parentData)") |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
for parentItem in parentItems { |
|
|
|
|
do { |
|
|
|
|
let data = try JSONSerialization.data(withJSONObject: parentItem, options: []) |
|
|
|
|
let revokedObject = try JSON.decoder.decode(ObjectIdentifier.self, from: data) |
|
|
|
|
StoreCenter.main.synchronizationRevoke(id: revokedObject.modelId, model: className, storeId: revokedObject.storeId) |
|
|
|
|
} catch { |
|
|
|
|
Logger.error(error) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|