improvements

upgrade
Laurent 4 days ago
parent d019e491af
commit 17148d498d
  1. 2
      LeStorage/Store.swift
  2. 23
      LeStorage/StoredCollection.swift
  3. 4
      LeStorage/SyncedCollection.swift

@ -274,7 +274,7 @@ final public class Store {
// MARK: - Synchronization
fileprivate func _requestWrite<T: SyncedStorable>(type: T.Type) {
self._baseCollections[T.resourceName()]?.requestWrite()
self._baseCollections[T.resourceName()]?.requestWriteIfNecessary()
}
@MainActor

@ -25,7 +25,7 @@ public protocol SomeCollection<Item>: Identifiable {
func deleteDependencies(actionOption: ActionOption, _ isIncluded: (Item) -> Bool)
func findById(_ id: Item.ID) -> Item?
func requestWrite()
func requestWriteIfNecessary()
}
protocol CollectionDelegate<Item> {
@ -81,7 +81,7 @@ public class StoredCollection<T: Storable>: 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,9 +143,11 @@ public class StoredCollection<T: Storable>: SomeCollection {
// MARK: - Loading
/// Sets the collection as changed to trigger a write
public func requestWrite() {
public func requestWriteIfNecessary() {
if self.inMemory == false {
self._triggerWrite = true
}
}
/// Migrates if necessary and asynchronously decodes the json file
func load() async {
@ -214,7 +216,6 @@ public class StoredCollection<T: Storable>: SomeCollection {
for item in items {
self._addItem(instance: item)
}
self.requestWrite()
}
@MainActor
@ -226,7 +227,7 @@ public class StoredCollection<T: Storable>: SomeCollection {
self.setAsLoaded()
self.addOrUpdate(contentOfs: items)
}
self.requestWriteIfNecessary()
}
/// Updates the whole index with the items array
@ -242,7 +243,7 @@ public class StoredCollection<T: Storable>: SomeCollection {
/// Adds it if its id is not found, and otherwise updates it
@discardableResult public func addOrUpdate(instance: T) -> ActionResult<T> {
defer {
self.requestWrite()
self.requestWriteIfNecessary()
}
return self._rawAddOrUpdate(instance: instance)
}
@ -251,7 +252,7 @@ public class StoredCollection<T: Storable>: SomeCollection {
public func addOrUpdate(contentOfs sequence: any Sequence<T>, _ handler: ((ActionResult<T>) -> ())? = nil) {
defer {
self.requestWrite()
self.requestWriteIfNecessary()
}
for instance in sequence {
@ -274,7 +275,7 @@ public class StoredCollection<T: Storable>: 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<T: Storable>: SomeCollection {
self.deleteItem(instance, actionOption: actionOption)
}
if actionOption.write {
self.requestWrite()
self.requestWriteIfNecessary()
}
}
@ -440,7 +441,7 @@ public class StoredCollection<T: Storable>: SomeCollection {
/// Also removes related API calls
public func deleteDependencies(_ items: any Sequence<T>) {
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<T: Storable>: SomeCollection {
func updateLocalInstance(_ serverInstance: T) {
if let localInstance = self.findById(serverInstance.id) {
localInstance.copy(from: serverInstance)
self.requestWrite()
self.requestWriteIfNecessary()
}
}

@ -413,8 +413,8 @@ public class SyncedCollection<T : SyncedStorable>: SomeSyncedCollection, Collect
return self.collection.items
}
public func requestWrite() {
self.collection.requestWrite()
public func requestWriteIfNecessary() {
self.collection.requestWriteIfNecessary()
}
}

Loading…
Cancel
Save