diff --git a/LeStorage/StoreCenter.swift b/LeStorage/StoreCenter.swift index 439297c..9c9f2a4 100644 --- a/LeStorage/StoreCenter.swift +++ b/LeStorage/StoreCenter.swift @@ -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 = { self.mainStore.registerCollection() }() + fileprivate var _deleteLogs: StoredCollection? = nil /// A synchronized collection of DataAccess fileprivate(set) var dataAccessCollection: SyncedCollection? = 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(_ 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 diff --git a/LeStorage/StoredCollection.swift b/LeStorage/StoredCollection.swift index 4a10ece..cf95ea3 100644 --- a/LeStorage/StoredCollection.swift +++ b/LeStorage/StoredCollection.swift @@ -172,6 +172,19 @@ public class StoredCollection: SomeCollection { try await self._decodeJSONFile() } catch { Logger.error(error) + await MainActor.run { + self.setAsLoaded() + } + do { + let fileURL = try self.store.fileURL(type: T.self) + let jsonString: String = try FileUtils.readFile(fileURL: fileURL) + if !jsonString.isEmpty { + StoreCenter.main.log(message: "Could not decode: \(jsonString)") + } + } catch { + + } + } }