mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Initial implementation of the PSA API
This commit is contained in:
@@ -194,8 +194,8 @@ enum MutableChatListEntry: Equatable {
|
||||
|
||||
var index: ChatListIndex {
|
||||
switch self {
|
||||
case let .IntermediateMessageEntry(intermediateMessageEntry):
|
||||
return intermediateMessageEntry.index
|
||||
case let .IntermediateMessageEntry(index, _):
|
||||
return index
|
||||
case let .MessageEntry(index, _, _, _, _, _, _, _, _, _, _):
|
||||
return index
|
||||
case let .HoleEntry(hole):
|
||||
@@ -287,6 +287,36 @@ public struct ChatListFilterPredicate {
|
||||
}
|
||||
}
|
||||
|
||||
struct MutableChatListAdditionalItemEntry: Equatable {
|
||||
public var entry: MutableChatListEntry
|
||||
public var info: AdditionalChatListItem
|
||||
|
||||
static func ==(lhs: MutableChatListAdditionalItemEntry, rhs: MutableChatListAdditionalItemEntry) -> Bool {
|
||||
if lhs.entry != rhs.entry {
|
||||
return false
|
||||
}
|
||||
if !lhs.info.isEqual(to: rhs.info) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
public struct ChatListAdditionalItemEntry: Equatable {
|
||||
public let entry: ChatListEntry
|
||||
public let info: AdditionalChatListItem
|
||||
|
||||
public static func ==(lhs: ChatListAdditionalItemEntry, rhs: ChatListAdditionalItemEntry) -> Bool {
|
||||
if lhs.entry != rhs.entry {
|
||||
return false
|
||||
}
|
||||
if !lhs.info.isEqual(to: rhs.info) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
final class MutableChatListView {
|
||||
let groupId: PeerGroupId
|
||||
let filterPredicate: ChatListFilterPredicate?
|
||||
@@ -299,7 +329,8 @@ final class MutableChatListView {
|
||||
fileprivate var sampledState: ChatListViewSample
|
||||
|
||||
private var additionalItemIds = Set<PeerId>()
|
||||
fileprivate var additionalItemEntries: [MutableChatListEntry] = []
|
||||
private var additionalItems: [AdditionalChatListItem] = []
|
||||
fileprivate var additionalItemEntries: [MutableChatListAdditionalItemEntry] = []
|
||||
|
||||
init(postbox: Postbox, groupId: PeerGroupId, filterPredicate: ChatListFilterPredicate?, aroundIndex: ChatListIndex, count: Int, summaryComponents: ChatListEntrySummaryComponents) {
|
||||
self.groupId = groupId
|
||||
@@ -328,11 +359,15 @@ final class MutableChatListView {
|
||||
self.count = count
|
||||
|
||||
if case .root = groupId, self.filterPredicate == nil {
|
||||
let itemIds = postbox.additionalChatListItemsTable.get()
|
||||
self.additionalItemIds = Set(itemIds)
|
||||
for peerId in itemIds {
|
||||
if let entry = postbox.chatListTable.getStandalone(peerId: peerId, messageHistoryTable: postbox.messageHistoryTable) {
|
||||
self.additionalItemEntries.append(MutableChatListEntry(entry, cachedDataTable: postbox.cachedPeerDataTable, readStateTable: postbox.readStateTable, messageHistoryTable: postbox.messageHistoryTable))
|
||||
let items = postbox.additionalChatListItemsTable.get()
|
||||
self.additionalItems = items
|
||||
self.additionalItemIds = Set(items.map { $0.peerId })
|
||||
for item in items {
|
||||
if let entry = postbox.chatListTable.getStandalone(peerId: item.peerId, messageHistoryTable: postbox.messageHistoryTable) {
|
||||
self.additionalItemEntries.append(MutableChatListAdditionalItemEntry(
|
||||
entry: MutableChatListEntry(entry, cachedDataTable: postbox.cachedPeerDataTable, readStateTable: postbox.readStateTable, messageHistoryTable: postbox.messageHistoryTable),
|
||||
info: item
|
||||
))
|
||||
}
|
||||
}
|
||||
self.groupEntries = []
|
||||
@@ -480,8 +515,9 @@ final class MutableChatListView {
|
||||
}
|
||||
|
||||
var updateAdditionalItems = false
|
||||
if case .root = self.groupId, self.filterPredicate == nil, let itemIds = transaction.replacedAdditionalChatListItems {
|
||||
self.additionalItemIds = Set(itemIds)
|
||||
if case .root = self.groupId, self.filterPredicate == nil, let items = transaction.replacedAdditionalChatListItems {
|
||||
self.additionalItems = items
|
||||
self.additionalItemIds = Set(items.map { $0.peerId })
|
||||
updateAdditionalItems = true
|
||||
}
|
||||
for peerId in self.additionalItemIds {
|
||||
@@ -497,9 +533,12 @@ final class MutableChatListView {
|
||||
}
|
||||
if updateAdditionalItems {
|
||||
self.additionalItemEntries.removeAll()
|
||||
for peerId in postbox.additionalChatListItemsTable.get() {
|
||||
if let entry = postbox.chatListTable.getStandalone(peerId: peerId, messageHistoryTable: postbox.messageHistoryTable) {
|
||||
self.additionalItemEntries.append(MutableChatListEntry(entry, cachedDataTable: postbox.cachedPeerDataTable, readStateTable: postbox.readStateTable, messageHistoryTable: postbox.messageHistoryTable))
|
||||
for item in self.additionalItems {
|
||||
if let entry = postbox.chatListTable.getStandalone(peerId: item.peerId, messageHistoryTable: postbox.messageHistoryTable) {
|
||||
self.additionalItemEntries.append(MutableChatListAdditionalItemEntry(
|
||||
entry: MutableChatListEntry(entry, cachedDataTable: postbox.cachedPeerDataTable, readStateTable: postbox.readStateTable, messageHistoryTable: postbox.messageHistoryTable),
|
||||
info: item
|
||||
))
|
||||
}
|
||||
}
|
||||
hasChanges = true
|
||||
@@ -555,8 +594,8 @@ final class MutableChatListView {
|
||||
|
||||
func render(postbox: Postbox, renderMessage: (IntermediateMessage) -> Message, getPeer: (PeerId) -> Peer?, getPeerNotificationSettings: (PeerId) -> PeerNotificationSettings?, getPeerPresence: (PeerId) -> PeerPresence?) {
|
||||
for i in 0 ..< self.additionalItemEntries.count {
|
||||
if let updatedEntry = self.renderEntry(self.additionalItemEntries[i], postbox: postbox, renderMessage: renderMessage, getPeer: getPeer, getPeerNotificationSettings: getPeerNotificationSettings, getPeerPresence: getPeerPresence) {
|
||||
self.additionalItemEntries[i] = updatedEntry
|
||||
if let updatedEntry = self.renderEntry(self.additionalItemEntries[i].entry, postbox: postbox, renderMessage: renderMessage, getPeer: getPeer, getPeerNotificationSettings: getPeerNotificationSettings, getPeerPresence: getPeerPresence) {
|
||||
self.additionalItemEntries[i].entry = updatedEntry
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -564,7 +603,7 @@ final class MutableChatListView {
|
||||
|
||||
public final class ChatListView {
|
||||
public let groupId: PeerGroupId
|
||||
public let additionalItemEntries: [ChatListEntry]
|
||||
public let additionalItemEntries: [ChatListAdditionalItemEntry]
|
||||
public let entries: [ChatListEntry]
|
||||
public let groupEntries: [ChatListGroupReferenceEntry]
|
||||
public let earlierIndex: ChatListIndex?
|
||||
@@ -591,11 +630,14 @@ public final class ChatListView {
|
||||
|
||||
self.groupEntries = mutableView.groupEntries
|
||||
|
||||
var additionalItemEntries: [ChatListEntry] = []
|
||||
var additionalItemEntries: [ChatListAdditionalItemEntry] = []
|
||||
for entry in mutableView.additionalItemEntries {
|
||||
switch entry {
|
||||
switch entry.entry {
|
||||
case let .MessageEntry(index, message, combinedReadState, _, isExcludedFromUnreadCount, embeddedState, peer, peerPresence, summaryInfo, hasFailed, isContact):
|
||||
additionalItemEntries.append(.MessageEntry(index: index, message: message, readState: combinedReadState, isRemovedFromTotalUnreadCount: isExcludedFromUnreadCount, embeddedInterfaceState: embeddedState, renderedPeer: peer, presence: peerPresence, summaryInfo: summaryInfo, hasFailed: hasFailed, isContact: isContact))
|
||||
additionalItemEntries.append(ChatListAdditionalItemEntry(
|
||||
entry: .MessageEntry(index: index, message: message, readState: combinedReadState, isRemovedFromTotalUnreadCount: isExcludedFromUnreadCount, embeddedInterfaceState: embeddedState, renderedPeer: peer, presence: peerPresence, summaryInfo: summaryInfo, hasFailed: hasFailed, isContact: isContact),
|
||||
info: entry.info
|
||||
))
|
||||
case .HoleEntry:
|
||||
assertionFailure()
|
||||
case .IntermediateMessageEntry:
|
||||
|
||||
Reference in New Issue
Block a user