|
|
|
|
@ -44,7 +44,7 @@ public class StoreCenter { |
|
|
|
|
fileprivate var _apiCallCollections: [String: any SomeCallCollection] = [:] |
|
|
|
|
|
|
|
|
|
/// A collection of DataLog objects, used for the synchronization |
|
|
|
|
lazy fileprivate var _deleteLogs: StoredCollection<DataLog> = { self.mainStore.registerCollection() }() |
|
|
|
|
fileprivate var _deleteLogs: StoredCollection<DataLog>? = nil |
|
|
|
|
|
|
|
|
|
/// A synchronized collection of DataAccess |
|
|
|
|
fileprivate(set) var dataAccessCollection: SyncedCollection<DataAccess>? = nil |
|
|
|
|
@ -104,6 +104,7 @@ public class StoreCenter { |
|
|
|
|
|
|
|
|
|
if self.useSynchronization { |
|
|
|
|
self.dataAccessCollection = self.mainStore.registerSynchronizedCollection() |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Logger.log("Sync URL: \(urlManager.api)") |
|
|
|
|
@ -265,7 +266,7 @@ public class StoreCenter { |
|
|
|
|
|
|
|
|
|
self._storeLibrary.reset() |
|
|
|
|
self.dataAccessCollection?.reset() |
|
|
|
|
self._deleteLogs.reset() |
|
|
|
|
self._deleteLogs?.reset() |
|
|
|
|
|
|
|
|
|
self._settingsStorage.update { settings in |
|
|
|
|
settings.username = nil |
|
|
|
|
@ -814,7 +815,10 @@ public class StoreCenter { |
|
|
|
|
|
|
|
|
|
/// Returns whether a data has already been deleted by, to avoid inserting it again |
|
|
|
|
func hasAlreadyBeenDeleted<T: Storable>(_ instance: T) -> Bool { |
|
|
|
|
return self._deleteLogs.contains(where: { |
|
|
|
|
guard let deleteLogs = self._deleteLogs else { |
|
|
|
|
fatalError("missing delete logs collection") |
|
|
|
|
} |
|
|
|
|
return deleteLogs.contains(where: { |
|
|
|
|
$0.dataId == instance.stringId && $0.operation == .delete |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
@ -867,8 +871,11 @@ public class StoreCenter { |
|
|
|
|
|
|
|
|
|
/// Deletes a data log by data id |
|
|
|
|
func cleanupDataLog(dataId: String) { |
|
|
|
|
let logs = self._deleteLogs.filter { $0.dataId == dataId } |
|
|
|
|
self._deleteLogs.delete(contentOfs: logs) |
|
|
|
|
guard let deleteLogs = self._deleteLogs else { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
let logs = deleteLogs.filter { $0.dataId == dataId } |
|
|
|
|
deleteLogs.delete(contentOfs: logs) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// Creates a delete log for an instance |
|
|
|
|
@ -876,7 +883,7 @@ public class StoreCenter { |
|
|
|
|
let dataLog = DataLog(dataId: instance.stringId, |
|
|
|
|
modelName: String(describing: T.self), |
|
|
|
|
operation: .delete) |
|
|
|
|
self._deleteLogs.addOrUpdate(instance: dataLog) |
|
|
|
|
self._deleteLogs?.addOrUpdate(instance: dataLog) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// Returns the appropriate store for a relationship |
|
|
|
|
|