import Foundation final class MutableItemCollectionIdsView: MutablePostboxView { let namespaces: [ItemCollectionId.Namespace] var idsByNamespace: [ItemCollectionId.Namespace: Set] init(postbox: PostboxImpl, namespaces: [ItemCollectionId.Namespace]) { self.namespaces = namespaces var idsByNamespace: [ItemCollectionId.Namespace: Set] = [:] for namespace in namespaces { let ids = postbox.itemCollectionInfoTable.getIds(namespace: namespace) idsByNamespace[namespace] = Set(ids) } self.idsByNamespace = idsByNamespace } func replay(postbox: PostboxImpl, transaction: PostboxTransaction) -> Bool { if transaction.currentItemCollectionInfosOperations.isEmpty { return false } var updated = false var reloadInfosNamespaces = Set() for operation in transaction.currentItemCollectionInfosOperations { switch operation { case let .replaceInfos(namespace): reloadInfosNamespaces.insert(namespace) } } if !reloadInfosNamespaces.isEmpty { for namespace in self.namespaces { if reloadInfosNamespaces.contains(namespace) { updated = true let ids = postbox.itemCollectionInfoTable.getIds(namespace: namespace) self.idsByNamespace[namespace] = Set(ids) } } } return updated } func refreshDueToExternalTransaction(postbox: PostboxImpl) -> Bool { /*var idsByNamespace: [ItemCollectionId.Namespace: Set] = [:] for namespace in namespaces { let ids = postbox.itemCollectionInfoTable.getIds(namespace: namespace) idsByNamespace[namespace] = Set(ids) } if self.idsByNamespace != idsByNamespace { self.idsByNamespace = idsByNamespace return true } else { return false }*/ return false } func immutableView() -> PostboxView { return ItemCollectionIdsView(self) } } public final class ItemCollectionIdsView: PostboxView { public let idsByNamespace: [ItemCollectionId.Namespace: Set] init(_ view: MutableItemCollectionIdsView) { self.idsByNamespace = view.idsByNamespace } }