fixes and improvements

sync3
Laurent 5 months ago
parent 007f7d6bf1
commit 1f73660832
  1. 4
      LeStorage/Codables/DataAccess.swift
  2. 2
      LeStorage/Codables/SyncData.swift
  3. 43
      LeStorage/StoreCenter.swift
  4. 1
      LeStorage/StoreLibrary.swift

@ -28,12 +28,13 @@ class DataAccess: SyncedModelObject, SyncedStorable {
var modelId: String = ""
var grantedAt: Date = Date()
init(owner: String, sharedWith: [String], modelName: String, modelId: String) {
init(owner: String, sharedWith: [String], modelName: String, modelId: String, storeId: String?) {
self.sharedWith = sharedWith
self.modelName = modelName
self.modelId = modelId
super.init()
self.relatedUser = owner
self.storeId = storeId
}
// Codable implementation
@ -71,6 +72,7 @@ class DataAccess: SyncedModelObject, SyncedStorable {
self.sharedWith = dataAccess.sharedWith
self.modelName = dataAccess.modelName
self.modelId = dataAccess.modelId
self.storeId = dataAccess.storeId
self.grantedAt = dataAccess.grantedAt
}

@ -57,7 +57,7 @@ class SyncData {
if let revocations = json["revocations"] as? [String: Any] {
self.revocations = try storeCenter.decodeObjectIdentifierDictionary(revocations)
}
if let revocationParents = json["revocation_parents"] as? [[String: Any]] {
if let revocationParents = json["revocated_relations"] as? [[String: Any]] {
for level in revocationParents {
let decodedLevel = try storeCenter.decodeObjectIdentifierDictionary(level)
self.revocationParents.append(decodedLevel)

@ -192,22 +192,14 @@ public class StoreCenter {
fileprivate func _requestStore(id: String?) -> Store {
if let storeId = id {
return self._storeLibrary.requestStore(identifier: storeId)
// if let store = self._stores[storeId] {
// return store
// } else {
// let store = Store(storeCenter: self, identifier: storeId)
// self._registerStore(store: store)
// return store
// }
} else {
return self.mainStore
}
}
fileprivate func _store(id: String?) -> Store {
if let storeId = id, let store = self._storeLibrary[storeId] {
return store
fileprivate func _store(id: String?) -> Store? {
if let storeId = id {
return self._storeLibrary[storeId]
} else {
return self.mainStore
}
@ -714,18 +706,23 @@ public class StoreCenter {
}
fileprivate func _syncDelete<T : SyncedStorable>(_ deletionArray: ObjectIdentifierArray, type: T.Type) async {
for deletedObject in deletionArray.items {
let itemsByStore = deletionArray.items.group { $0.storeId }
for (storeId, items) in itemsByStore {
let store = self._requestStore(id: storeId)
if let store = self._store(id: storeId) {
await store.synchronizationDelete(items, type: T.self)
}
// await self.synchronizationDelete(id: deletedObject.modelId, type: deletionArray.type, storeId: deletedObject.storeId)
}
// for deletedObject in deletionArray.items {
//
// let itemsByStore = deletionArray.items.group { $0.storeId }
// for (storeId, items) in itemsByStore {
// let store = self._requestStore(id: storeId)
// await store.synchronizationDelete(items, type: T.self)
// }
//// await self.synchronizationDelete(id: deletedObject.modelId, type: deletionArray.type, storeId: deletedObject.storeId)
// }
}
@ -761,7 +758,7 @@ public class StoreCenter {
let itemsByStore = revokeArray.items.group { $0.storeId }
for (storeId, items) in itemsByStore {
let store = self._requestStore(id: storeId)
await store.synchronizationRevoke(items, type: revokeArray.type)
store.synchronizationRevoke(items, type: revokeArray.type)
}
// for revoked in revokeArray.items {
@ -827,10 +824,10 @@ public class StoreCenter {
// }
// }
fileprivate func _instance<T: SyncedStorable>(id: String, type: T.Type, storeId: String?) -> T? {
let realId: T.ID = T.buildRealId(id: id)
return self._store(id: storeId).findById(realId)
}
// fileprivate func _instance<T: SyncedStorable>(id: String, type: T.Type, storeId: String?) -> T? {
// let realId: T.ID = T.buildRealId(id: id)
// return self._store(id: storeId).findById(realId)
// }
/// Returns whether an instance has been shared with the user
// fileprivate func _instanceShared<T: SyncedStorable>(id: String, type: T.Type, storeId: String?) -> Bool {
@ -1131,7 +1128,7 @@ public class StoreCenter {
try await dataAccessCollection.addOrUpdateAsync(instance: dataAccess)
}
} else {
let dataAccess = DataAccess(owner: userId, sharedWith: users, modelName: String(describing: type(of: instance)), modelId: instance.stringId)
let dataAccess = DataAccess(owner: userId, sharedWith: users, modelName: String(describing: type(of: instance)), modelId: instance.stringId, storeId: instance.getStoreId())
try await dataAccessCollection.addOrUpdateAsync(instance: dataAccess)
}

@ -54,6 +54,7 @@ class StoreLibrary {
public func destroyStore(identifier: String) {
let directory = "\(self.storeCenter.directoryName)/\(identifier)"
FileManager.default.deleteDirectoryInDocuments(directoryName: directory)
self._stores[identifier]?.reset()
self._stores.removeValue(forKey: identifier)
}

Loading…
Cancel
Save