mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 22:55:00 +00:00
Support refreshDueToExternalTransaction in more views
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user