Folder improvements

This commit is contained in:
Ali 2020-03-19 20:06:04 +04:00
parent c191cb8d62
commit 46ea78b6c3
4 changed files with 54 additions and 86 deletions

View File

@ -244,6 +244,7 @@ public func chatListFilterPresetListController(context: AccountContext, mode: Ch
var dismissImpl: (() -> Void)? var dismissImpl: (() -> Void)?
var pushControllerImpl: ((ViewController) -> Void)? var pushControllerImpl: ((ViewController) -> Void)?
var presentControllerImpl: ((ViewController) -> Void)?
let arguments = ChatListFilterPresetListControllerArguments(context: context, let arguments = ChatListFilterPresetListControllerArguments(context: context,
addSuggestedPresed: { title, data in addSuggestedPresed: { title, data in
@ -268,6 +269,15 @@ public func chatListFilterPresetListController(context: AccountContext, mode: Ch
return state return state
} }
}, removePreset: { id in }, removePreset: { id in
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
let actionSheet = ActionSheetController(presentationData: presentationData)
actionSheet.setItemGroups([
ActionSheetItemGroup(items: [
ActionSheetTextItem(title: presentationData.strings.ChatList_RemoveFolderConfirmation),
ActionSheetButtonItem(title: presentationData.strings.ChatList_RemoveFolderAction, color: .destructive, action: { [weak actionSheet] in
actionSheet?.dismissAnimated()
let _ = (updateChatListFiltersInteractively(postbox: context.account.postbox, { filters in let _ = (updateChatListFiltersInteractively(postbox: context.account.postbox, { filters in
var filters = filters var filters = filters
if let index = filters.firstIndex(where: { $0.id == id }) { if let index = filters.firstIndex(where: { $0.id == id }) {
@ -275,8 +285,16 @@ public func chatListFilterPresetListController(context: AccountContext, mode: Ch
} }
return filters return filters
}) })
|> deliverOnMainQueue).start(next: { _ in |> deliverOnMainQueue).start()
}) })
]),
ActionSheetItemGroup(items: [
ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, color: .accent, font: .bold, action: { [weak actionSheet] in
actionSheet?.dismissAnimated()
})
])
])
presentControllerImpl?(actionSheet)
}) })
let chatCountCache = Atomic<[ChatListFilterData: Int]>(value: [:]) let chatCountCache = Atomic<[ChatListFilterData: Int]>(value: [:])
@ -420,6 +438,9 @@ public func chatListFilterPresetListController(context: AccountContext, mode: Ch
pushControllerImpl = { [weak controller] c in pushControllerImpl = { [weak controller] c in
controller?.push(c) controller?.push(c)
} }
presentControllerImpl = { [weak controller] c in
controller?.present(c, in: .window(.root))
}
dismissImpl = { [weak controller] in dismissImpl = { [weak controller] in
controller?.dismiss() controller?.dismiss()
} }

View File

@ -298,6 +298,9 @@ final class MutableChatListView {
fileprivate var state: ChatListViewState fileprivate var state: ChatListViewState
fileprivate var sampledState: ChatListViewSample fileprivate var sampledState: ChatListViewSample
private var additionalItemIds = Set<PeerId>()
fileprivate var additionalItemEntries: [MutableChatListEntry] = []
init(postbox: Postbox, groupId: PeerGroupId, filterPredicate: ChatListFilterPredicate?, aroundIndex: ChatListIndex, count: Int, summaryComponents: ChatListEntrySummaryComponents) { init(postbox: Postbox, groupId: PeerGroupId, filterPredicate: ChatListFilterPredicate?, aroundIndex: ChatListIndex, count: Int, summaryComponents: ChatListEntrySummaryComponents) {
self.groupId = groupId self.groupId = groupId
self.filterPredicate = filterPredicate self.filterPredicate = filterPredicate
@ -325,17 +328,16 @@ final class MutableChatListView {
self.count = count self.count = count
if case .root = groupId, self.filterPredicate == nil { if case .root = groupId, self.filterPredicate == nil {
/*let itemIds = postbox.additionalChatListItemsTable.get() let itemIds = postbox.additionalChatListItemsTable.get()
self.additionalItemIds = Set(itemIds) self.additionalItemIds = Set(itemIds)
for peerId in itemIds { for peerId in itemIds {
if let entry = postbox.chatListTable.getStandalone(peerId: peerId, messageHistoryTable: postbox.messageHistoryTable) { 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)) self.additionalItemEntries.append(MutableChatListEntry(entry, cachedDataTable: postbox.cachedPeerDataTable, readStateTable: postbox.readStateTable, messageHistoryTable: postbox.messageHistoryTable))
} }
}*/ }
self.groupEntries = [] self.groupEntries = []
self.reloadGroups(postbox: postbox) self.reloadGroups(postbox: postbox)
} else { } else {
//self.additionalItemIds = Set()
self.groupEntries = [] self.groupEntries = []
} }
} }
@ -477,9 +479,6 @@ final class MutableChatListView {
} }
} }
/*
var updateAdditionalItems = false var updateAdditionalItems = false
if let itemIds = transaction.replacedAdditionalChatListItems { if let itemIds = transaction.replacedAdditionalChatListItems {
self.additionalItemIds = Set(itemIds) self.additionalItemIds = Set(itemIds)
@ -505,34 +504,6 @@ final class MutableChatListView {
} }
hasChanges = true hasChanges = true
} }
var updateAdditionalMixedItems = false
for peerId in self.additionalMixedItemIds.union(self.additionalMixedPinnedItemIds) {
if transaction.currentOperationsByPeerId[peerId] != nil {
updateAdditionalMixedItems = true
}
if transaction.currentUpdatedPeers[peerId] != nil {
updateAdditionalMixedItems = true
}
if transaction.currentUpdatedChatListInclusions[peerId] != nil {
updateAdditionalMixedItems = true
}
}
if updateAdditionalMixedItems {
self.additionalMixedItemEntries.removeAll()
for peerId in self.additionalMixedItemIds {
if let entry = postbox.chatListTable.getEntry(peerId: peerId, messageHistoryTable: postbox.messageHistoryTable, peerChatInterfaceStateTable: postbox.peerChatInterfaceStateTable) {
self.additionalMixedItemEntries.append(MutableChatListEntry(entry, cachedDataTable: postbox.cachedPeerDataTable, readStateTable: postbox.readStateTable, messageHistoryTable: postbox.messageHistoryTable))
}
}
self.additionalMixedPinnedEntries.removeAll()
for peerId in self.additionalMixedPinnedItemIds {
if let entry = postbox.chatListTable.getEntry(peerId: peerId, messageHistoryTable: postbox.messageHistoryTable, peerChatInterfaceStateTable: postbox.peerChatInterfaceStateTable) {
self.additionalMixedPinnedEntries.append(MutableChatListEntry(entry, cachedDataTable: postbox.cachedPeerDataTable, readStateTable: postbox.readStateTable, messageHistoryTable: postbox.messageHistoryTable))
}
}
hasChanges = true
}*/
return hasChanges return hasChanges
} }
@ -544,7 +515,7 @@ final class MutableChatListView {
return self.sampledState.hole return self.sampledState.hole
} }
/*private func renderEntry(_ entry: MutableChatListEntry, postbox: Postbox, renderMessage: (IntermediateMessage) -> Message, getPeer: (PeerId) -> Peer?, getPeerNotificationSettings: (PeerId) -> PeerNotificationSettings?, getPeerPresence: (PeerId) -> PeerPresence?) -> MutableChatListEntry? { private func renderEntry(_ entry: MutableChatListEntry, postbox: Postbox, renderMessage: (IntermediateMessage) -> Message, getPeer: (PeerId) -> Peer?, getPeerNotificationSettings: (PeerId) -> PeerNotificationSettings?, getPeerPresence: (PeerId) -> PeerPresence?) -> MutableChatListEntry? {
switch entry { switch entry {
case let .IntermediateMessageEntry(index, messageIndex): case let .IntermediateMessageEntry(index, messageIndex):
let renderedMessage: Message? let renderedMessage: Message?
@ -573,48 +544,21 @@ final class MutableChatListView {
} }
} }
var tagSummaryCount: Int32? let tagSummaryCount: Int32? = nil
var actionsSummaryCount: Int32? let actionsSummaryCount: Int32? = nil
if let tagSummary = self.summaryComponents.tagSummary { return .MessageEntry(index: index, message: renderedMessage, readState: postbox.readStateTable.getCombinedState(index.messageIndex.id.peerId), notificationSettings: notificationSettings, isRemovedFromTotalUnreadCount: false, embeddedInterfaceState: postbox.peerChatInterfaceStateTable.get(index.messageIndex.id.peerId)?.chatListEmbeddedState, renderedPeer: RenderedPeer(peerId: index.messageIndex.id.peerId, peers: peers), presence: presence, tagSummaryInfo: ChatListMessageTagSummaryInfo(tagSummaryCount: tagSummaryCount, actionsSummaryCount: actionsSummaryCount), hasFailedMessages: postbox.messageHistoryFailedTable.contains(peerId: index.messageIndex.id.peerId), isContact: isContact)
let key = MessageHistoryTagsSummaryKey(tag: tagSummary.tag, peerId: index.messageIndex.id.peerId, namespace: tagSummary.namespace)
if let summary = postbox.messageHistoryTagsSummaryTable.get(key) {
tagSummaryCount = summary.count
}
}
if let actionsSummary = self.summaryComponents.actionsSummary {
let key = PendingMessageActionsSummaryKey(type: actionsSummary.type, peerId: index.messageIndex.id.peerId, namespace: actionsSummary.namespace)
actionsSummaryCount = postbox.pendingMessageActionsMetadataTable.getCount(.peerNamespaceAction(key.peerId, key.namespace, key.type))
}
return .MessageEntry(index: index, message: renderedMessage, readState: postbox.readStateTable.getCombinedState(index.messageIndex.id.peerId), notificationSettings: notificationSettings, embeddedInterfaceState: postbox.peerChatInterfaceStateTable.get(index.messageIndex.id.peerId)?.chatListEmbeddedState, renderedPeer: RenderedPeer(peerId: index.messageIndex.id.peerId, peers: peers), presence: presence, tagSummaryInfo: ChatListMessageTagSummaryInfo(tagSummaryCount: tagSummaryCount, actionsSummaryCount: actionsSummaryCount), hasFailedMessages: postbox.messageHistoryFailedTable.contains(peerId: index.messageIndex.id.peerId), isContact: isContact)
default: default:
return nil return nil
} }
}*/ }
func render(postbox: Postbox, renderMessage: (IntermediateMessage) -> Message, getPeer: (PeerId) -> Peer?, getPeerNotificationSettings: (PeerId) -> PeerNotificationSettings?, getPeerPresence: (PeerId) -> PeerPresence?) { func render(postbox: Postbox, renderMessage: (IntermediateMessage) -> Message, getPeer: (PeerId) -> Peer?, getPeerNotificationSettings: (PeerId) -> PeerNotificationSettings?, getPeerPresence: (PeerId) -> PeerPresence?) {
/*for i in 0 ..< self.entries.count {
if let updatedEntry = self.renderEntry(self.entries[i], postbox: postbox, renderMessage: renderMessage, getPeer: getPeer, getPeerNotificationSettings: getPeerNotificationSettings, getPeerPresence: getPeerPresence) {
self.entries[i] = updatedEntry
}
}
for i in 0 ..< self.additionalItemEntries.count { 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) { if let updatedEntry = self.renderEntry(self.additionalItemEntries[i], postbox: postbox, renderMessage: renderMessage, getPeer: getPeer, getPeerNotificationSettings: getPeerNotificationSettings, getPeerPresence: getPeerPresence) {
self.additionalItemEntries[i] = updatedEntry self.additionalItemEntries[i] = updatedEntry
} }
} }
for i in 0 ..< self.additionalMixedItemEntries.count {
if let updatedEntry = self.renderEntry(self.additionalMixedItemEntries[i], postbox: postbox, renderMessage: renderMessage, getPeer: getPeer, getPeerNotificationSettings: getPeerNotificationSettings, getPeerPresence: getPeerPresence) {
self.additionalMixedItemEntries[i] = updatedEntry
}
}
for i in 0 ..< self.additionalMixedPinnedEntries.count {
if let updatedEntry = self.renderEntry(self.additionalMixedPinnedEntries[i], postbox: postbox, renderMessage: renderMessage, getPeer: getPeer, getPeerNotificationSettings: getPeerNotificationSettings, getPeerPresence: getPeerPresence) {
self.additionalMixedPinnedEntries[i] = updatedEntry
}
}*/
} }
} }
@ -648,16 +592,16 @@ public final class ChatListView {
self.groupEntries = mutableView.groupEntries self.groupEntries = mutableView.groupEntries
var additionalItemEntries: [ChatListEntry] = [] var additionalItemEntries: [ChatListEntry] = []
/*for entry in mutableView.additionalItemEntries { for entry in mutableView.additionalItemEntries {
switch entry { switch entry {
case let .MessageEntry(index, message, combinedReadState, notificationSettings, embeddedState, peer, peerPresence, summaryInfo, hasFailed, isContact): case let .MessageEntry(index, message, combinedReadState, _, isExcludedFromUnreadCount, embeddedState, peer, peerPresence, summaryInfo, hasFailed, isContact):
additionalItemEntries.append(.MessageEntry(index, message, combinedReadState, notificationSettings, 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))
case .HoleEntry: case .HoleEntry:
assertionFailure() assertionFailure()
case .IntermediateMessageEntry: case .IntermediateMessageEntry:
assertionFailure() assertionFailure()
} }
}*/ }
self.additionalItemEntries = additionalItemEntries self.additionalItemEntries = additionalItemEntries
} }

View File

@ -161,8 +161,11 @@ final class ContactMultiselectionControllerNode: ASDisplayNode {
selectionState = state selectionState = state
return state return state
} }
case .chats: case let .chats(chatsNode):
break selectionState = ContactListNodeGroupSelectionState()
for peerId in chatsNode.currentState.selectedPeerIds {
selectionState = selectionState?.withToggledPeerId(.peer(peerId))
}
} }
var searchChatList = false var searchChatList = false
var searchGroups = false var searchGroups = false