Swiftgram/submodules/Postbox/Sources/ItemCollectionInfoView.swift
2021-09-22 01:56:45 +03:00

66 lines
1.9 KiB
Swift

import Foundation
final class MutableItemCollectionInfoView: MutablePostboxView {
let id: ItemCollectionId
var info: ItemCollectionInfo?
init(postbox: PostboxImpl, id: ItemCollectionId) {
self.id = id
let infos = postbox.itemCollectionInfoTable.getInfos(namespace: id.namespace)
for (_, infoId, info) in infos {
if id == infoId {
self.info = info
break
}
}
}
func replay(postbox: PostboxImpl, transaction: PostboxTransaction) -> Bool {
if transaction.currentItemCollectionInfosOperations.isEmpty {
return false
}
var updated = false
var reloadInfosNamespaces = Set<ItemCollectionId.Namespace>()
for operation in transaction.currentItemCollectionInfosOperations {
switch operation {
case let .replaceInfos(namespace):
reloadInfosNamespaces.insert(namespace)
}
}
if !reloadInfosNamespaces.isEmpty && reloadInfosNamespaces.contains(self.id.namespace) {
updated = true
let infos = postbox.itemCollectionInfoTable.getInfos(namespace: id.namespace)
var found = false
for (_, infoId, info) in infos {
if id == infoId {
self.info = info
found = true
break
}
}
if !found {
self.info = nil
}
}
return updated
}
func immutableView() -> PostboxView {
return ItemCollectionInfoView(self)
}
}
public final class ItemCollectionInfoView: PostboxView {
public let id: ItemCollectionId
public let info: ItemCollectionInfo?
init(_ view: MutableItemCollectionInfoView) {
self.id = view.id
self.info = view.info
}
}