|
|
|
|
@ -67,6 +67,9 @@ public class StoreCenter { |
|
|
|
|
var useWebsockets: Bool = false |
|
|
|
|
var useSynchronization: Bool = false |
|
|
|
|
|
|
|
|
|
var synchronizesData: Bool = false |
|
|
|
|
var wantsToSynchronize: Bool = false |
|
|
|
|
|
|
|
|
|
init(directoryName: String? = nil) { |
|
|
|
|
|
|
|
|
|
self.directoryName = directoryName ?? "storage" |
|
|
|
|
@ -581,19 +584,35 @@ public class StoreCenter { |
|
|
|
|
guard self.isAuthenticated else { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
guard !self.synchronizesData else { |
|
|
|
|
// Logger.log("*** blocked sync") |
|
|
|
|
self.wantsToSynchronize = true |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
self.synchronizesData = true |
|
|
|
|
self.wantsToSynchronize = false |
|
|
|
|
|
|
|
|
|
let lastSync = self._settingsStorage.item.lastSynchronization |
|
|
|
|
Logger.log("REQUEST sync: \(lastSync)") |
|
|
|
|
|
|
|
|
|
let syncGetCollection: ApiCallCollection<GetSyncData> = try self.apiCallCollection() |
|
|
|
|
if await syncGetCollection.hasPendingCalls() { |
|
|
|
|
await syncGetCollection.rescheduleImmediately() |
|
|
|
|
} else { |
|
|
|
|
if await syncGetCollection.hasPendingCalls() == false { |
|
|
|
|
Logger.log("*** START sync: \(lastSync)") |
|
|
|
|
let getSyncData = GetSyncData() |
|
|
|
|
getSyncData.date = lastSync |
|
|
|
|
try await syncGetCollection.sendGetRequest(instance: getSyncData) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// if await syncGetCollection.hasPendingCalls() { |
|
|
|
|
// await syncGetCollection.rescheduleImmediately() |
|
|
|
|
// Logger.log("=> reschedule") |
|
|
|
|
// } else { |
|
|
|
|
// Logger.log("=> send GET") |
|
|
|
|
// let getSyncData = GetSyncData() |
|
|
|
|
// getSyncData.date = lastSync |
|
|
|
|
// try await syncGetCollection.sendGetRequest(instance: getSyncData) |
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@discardableResult func testSynchronizeOnceAsync() async throws -> Data { |
|
|
|
|
@ -653,7 +672,7 @@ public class StoreCenter { |
|
|
|
|
await self._syncAddOrUpdate(syncData.sharedRelationshipSets, shared: .granted) |
|
|
|
|
await self._syncRevoke(syncData.sharedRelationshipRemovals) |
|
|
|
|
|
|
|
|
|
Logger.log("sync content: updates = \(syncData.updates.count) / deletions = \(syncData.deletions.count), grants = \(syncData.grants.count)") |
|
|
|
|
// Logger.log("sync content: updates = \(syncData.updates.count) / deletions = \(syncData.deletions.count), grants = \(syncData.grants.count)") |
|
|
|
|
|
|
|
|
|
if let dateString = syncData.date { |
|
|
|
|
Logger.log("Sets sync date = \(dateString)") |
|
|
|
|
@ -662,6 +681,17 @@ public class StoreCenter { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
self.synchronizesData = false |
|
|
|
|
if self.wantsToSynchronize { |
|
|
|
|
do { |
|
|
|
|
try await self.synchronizeLastUpdates() |
|
|
|
|
} catch { |
|
|
|
|
Logger.error(error) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Logger.log(">>> SYNC ENDED") |
|
|
|
|
|
|
|
|
|
NotificationCenter.default.post( |
|
|
|
|
name: NSNotification.Name.LeStorageDidSynchronize, object: self) |
|
|
|
|
|
|
|
|
|
@ -924,7 +954,7 @@ public class StoreCenter { |
|
|
|
|
Logger.w("Invalid update data for \(className)") |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
Logger.log(">>> UPDATE \(array.count) \(className)") |
|
|
|
|
// Logger.log(">>> UPDATE \(array.count) \(className)") |
|
|
|
|
|
|
|
|
|
let type = try self.classFromName(className) |
|
|
|
|
let decodedArray = try self._decodeArray(type: type, array: array) |
|
|
|
|
|