Support refreshDueToExternalTransaction in more views

This commit is contained in:
Ali
2021-11-04 21:09:34 +04:00
parent 9290df840d
commit ddb0999af0
36 changed files with 407 additions and 15 deletions

View File

@@ -6,10 +6,42 @@ public enum UnreadMessageCountsItem: Equatable {
case peer(PeerId)
}
private enum MutableUnreadMessageCountsItemEntry {
private enum MutableUnreadMessageCountsItemEntry: Equatable {
case total((ValueBoxKey, PreferencesEntry?)?, ChatListTotalUnreadState)
case totalInGroup(PeerGroupId, ChatListTotalUnreadState)
case peer(PeerId, CombinedPeerReadState?)
static func ==(lhs: MutableUnreadMessageCountsItemEntry, rhs: MutableUnreadMessageCountsItemEntry) -> Bool {
switch lhs {
case let .total(lhsKeyAndEntry, lhsUnreadState):
if case let .total(rhsKeyAndEntry, rhsUnreadState) = rhs {
if lhsKeyAndEntry?.0 != rhsKeyAndEntry?.0 {
return false
}
if lhsKeyAndEntry?.1 != rhsKeyAndEntry?.1 {
return false
}
if lhsUnreadState != rhsUnreadState {
return false
}
return true
} else {
return false
}
case let .totalInGroup(groupId, state):
if case .totalInGroup(groupId, state) = rhs {
return true
} else {
return false
}
case let .peer(peerId, readState):
if case .peer(peerId, readState) = rhs {
return true
} else {
return false
}
}
}
}
public enum UnreadMessageCountsItemEntry {
@@ -19,9 +51,12 @@ public enum UnreadMessageCountsItemEntry {
}
final class MutableUnreadMessageCountsView: MutablePostboxView {
private let items: [UnreadMessageCountsItem]
fileprivate var entries: [MutableUnreadMessageCountsItemEntry]
init(postbox: PostboxImpl, items: [UnreadMessageCountsItem]) {
self.items = items
self.entries = items.map { item in
switch item {
case let .total(preferencesKey):
@@ -80,6 +115,25 @@ final class MutableUnreadMessageCountsView: MutablePostboxView {
return updated
}
func refreshDueToExternalTransaction(postbox: PostboxImpl) -> Bool {
let entries: [MutableUnreadMessageCountsItemEntry] = self.items.map { item -> MutableUnreadMessageCountsItemEntry in
switch item {
case let .total(preferencesKey):
return .total(preferencesKey.flatMap({ ($0, postbox.preferencesTable.get(key: $0)) }), postbox.messageHistoryMetadataTable.getTotalUnreadState(groupId: .root))
case let .totalInGroup(groupId):
return .totalInGroup(groupId, postbox.messageHistoryMetadataTable.getTotalUnreadState(groupId: groupId))
case let .peer(peerId):
return .peer(peerId, postbox.readStateTable.getCombinedState(peerId))
}
}
if self.entries != entries {
self.entries = entries
return true
} else {
return false
}
}
func immutableView() -> PostboxView {
return UnreadMessageCountsView(self)
@@ -151,6 +205,16 @@ final class MutableCombinedReadStateView: MutablePostboxView {
return updated
}
func refreshDueToExternalTransaction(postbox: PostboxImpl) -> Bool {
let state = postbox.readStateTable.getCombinedState(self.peerId)
if state != self.state {
self.state = state
return true
} else {
return false
}
}
func immutableView() -> PostboxView {
return CombinedReadStateView(self)