diff --git a/LeStorage/Store.swift b/LeStorage/Store.swift index 8c02089..c2ad317 100644 --- a/LeStorage/Store.swift +++ b/LeStorage/Store.swift @@ -274,7 +274,7 @@ final public class Store { // MARK: - Synchronization fileprivate func _requestWrite(type: T.Type) { - self._baseCollections[T.resourceName()]?.requestWrite() + self._baseCollections[T.resourceName()]?.requestWriteIfNecessary() } @MainActor diff --git a/LeStorage/StoredCollection.swift b/LeStorage/StoredCollection.swift index 577d075..2247ff5 100644 --- a/LeStorage/StoredCollection.swift +++ b/LeStorage/StoredCollection.swift @@ -25,7 +25,7 @@ public protocol SomeCollection: Identifiable { func deleteDependencies(actionOption: ActionOption, _ isIncluded: (Item) -> Bool) func findById(_ id: Item.ID) -> Item? - func requestWrite() + func requestWriteIfNecessary() } protocol CollectionDelegate { @@ -81,7 +81,7 @@ public class StoredCollection: SomeCollection { /// Indicates whether the collection has changed, thus requiring a write operation fileprivate var _triggerWrite: Bool = false { didSet { - if self._triggerWrite == true && self.inMemory == false { + if self._triggerWrite == true { self._scheduleWrite() self._triggerWrite = false } @@ -143,8 +143,10 @@ public class StoredCollection: SomeCollection { // MARK: - Loading /// Sets the collection as changed to trigger a write - public func requestWrite() { - self._triggerWrite = true + public func requestWriteIfNecessary() { + if self.inMemory == false { + self._triggerWrite = true + } } /// Migrates if necessary and asynchronously decodes the json file @@ -214,7 +216,6 @@ public class StoredCollection: SomeCollection { for item in items { self._addItem(instance: item) } - self.requestWrite() } @MainActor @@ -226,7 +227,7 @@ public class StoredCollection: SomeCollection { self.setAsLoaded() self.addOrUpdate(contentOfs: items) } - + self.requestWriteIfNecessary() } /// Updates the whole index with the items array @@ -242,7 +243,7 @@ public class StoredCollection: SomeCollection { /// Adds it if its id is not found, and otherwise updates it @discardableResult public func addOrUpdate(instance: T) -> ActionResult { defer { - self.requestWrite() + self.requestWriteIfNecessary() } return self._rawAddOrUpdate(instance: instance) } @@ -251,7 +252,7 @@ public class StoredCollection: SomeCollection { public func addOrUpdate(contentOfs sequence: any Sequence, _ handler: ((ActionResult) -> ())? = nil) { defer { - self.requestWrite() + self.requestWriteIfNecessary() } for instance in sequence { @@ -274,7 +275,7 @@ public class StoredCollection: SomeCollection { /// A method the treat the collection as a single instance holder func setSingletonNoSync(instance: T) { defer { - self.requestWrite() + self.requestWriteIfNecessary() } self.items.removeAll() self._addItem(instance: instance) @@ -424,7 +425,7 @@ public class StoredCollection: SomeCollection { self.deleteItem(instance, actionOption: actionOption) } if actionOption.write { - self.requestWrite() + self.requestWriteIfNecessary() } } @@ -440,7 +441,7 @@ public class StoredCollection: SomeCollection { /// Also removes related API calls public func deleteDependencies(_ items: any Sequence) { defer { - self.requestWrite() + self.requestWriteIfNecessary() } let itemsArray = Array(items) // fix error if items is self.items for item in itemsArray { @@ -567,7 +568,7 @@ public class StoredCollection: SomeCollection { func updateLocalInstance(_ serverInstance: T) { if let localInstance = self.findById(serverInstance.id) { localInstance.copy(from: serverInstance) - self.requestWrite() + self.requestWriteIfNecessary() } } diff --git a/LeStorage/SyncedCollection.swift b/LeStorage/SyncedCollection.swift index 4b07c4a..da047d0 100644 --- a/LeStorage/SyncedCollection.swift +++ b/LeStorage/SyncedCollection.swift @@ -413,8 +413,8 @@ public class SyncedCollection: SomeSyncedCollection, Collect return self.collection.items } - public func requestWrite() { - self.collection.requestWrite() + public func requestWriteIfNecessary() { + self.collection.requestWriteIfNecessary() } }