diff --git a/TelegramUI/ChatHistoryListNode.swift b/TelegramUI/ChatHistoryListNode.swift index 4b664a5ed2..afbc318ffd 100644 --- a/TelegramUI/ChatHistoryListNode.swift +++ b/TelegramUI/ChatHistoryListNode.swift @@ -475,6 +475,8 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { } additionalData.append(.totalUnreadState) + let currentViewVersion = Atomic(value: nil) + let historyViewUpdate = self.chatHistoryLocationPromise.get() |> distinctUntilChanged |> mapToSignal { location in @@ -488,6 +490,16 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { } } } + |> map { view -> (ChatHistoryViewUpdate, Int) in + let version = currentViewVersion.modify({ value in + if let value = value { + return value + 1 + } else { + return 0 + } + })! + return (view, version) + } let previousView = Atomic(value: nil) let automaticDownloadNetworkType = context.account.networkType @@ -503,7 +515,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { let previousHistoryAppearsCleared = Atomic(value: nil) - let historyViewTransition = combineLatest(historyViewUpdate, self.chatPresentationDataPromise.get(), selectedMessages, automaticDownloadNetworkType, self.historyAppearsClearedPromise.get()) + let historyViewTransition = combineLatest(queue: messageViewQueue, historyViewUpdate, self.chatPresentationDataPromise.get(), selectedMessages, automaticDownloadNetworkType, self.historyAppearsClearedPromise.get()) |> introduceError(Void.self) |> mapToQueue { [weak self] update, chatPresentationData, selectedMessages, networkType, historyAppearsCleared -> Signal in func applyHole() { @@ -527,7 +539,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { } let initialData: ChatHistoryCombinedInitialData? - switch update { + switch update.0 { case let .Loading(combinedInitialData, type): if case .Generic(.FillHole) = type { applyHole() @@ -633,7 +645,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { |> deliverOnMainQueue |> mapToQueue { [weak self] transition -> Signal in if let strongSelf = self { - return strongSelf.enqueueHistoryViewTransition(transition) + return strongSelf.enqueueHistoryViewTransition(transition) |> introduceError(Void.self) } return .complete() diff --git a/TelegramUI/ChatListItem.swift b/TelegramUI/ChatListItem.swift index fa2b9fa64f..87e48367c8 100644 --- a/TelegramUI/ChatListItem.swift +++ b/TelegramUI/ChatListItem.swift @@ -1448,7 +1448,6 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { case .peer: let itemId: PinnedItemId = .peer(item.index.messageIndex.id.peerId) item.interaction.setItemPinned(itemId, true) - close = false case .groupReference: break } @@ -1457,7 +1456,6 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { case .peer: let itemId: PinnedItemId = .peer(item.index.messageIndex.id.peerId) item.interaction.setItemPinned(itemId, false) - close = false case .groupReference: break } diff --git a/TelegramUI/ChatListNode.swift b/TelegramUI/ChatListNode.swift index c51118fb1e..686080d160 100644 --- a/TelegramUI/ChatListNode.swift +++ b/TelegramUI/ChatListNode.swift @@ -407,7 +407,9 @@ final class ChatListNode: ListView { if state.selectedPeerIds.contains(peerId) { state.selectedPeerIds.remove(peerId) } else { - state.selectedPeerIds.insert(peerId) + if state.selectedPeerIds.count < 100 { + state.selectedPeerIds.insert(peerId) + } } return state } @@ -442,11 +444,6 @@ final class ChatListNode: ListView { case let .limitExceeded(maxCount): strongSelf.presentAlert?(strongSelf.currentState.presentationData.strings.DialogList_PinLimitError("\(maxCount)").0) } - strongSelf.updateState { state in - var state = state - state.peerIdWithRevealedOptions = nil - return state - } } }) }, setPeerMuted: { [weak self] peerId, _ in @@ -533,7 +530,7 @@ final class ChatListNode: ListView { let currentPeerId: PeerId = context.account.peerId - let chatListNodeViewTransition = combineLatest(hideArchivedFolderByDefault, displayArchiveIntro, savedMessagesPeer, chatListViewUpdate, self.statePromise.get()) + let chatListNodeViewTransition = combineLatest(queue: viewProcessingQueue, hideArchivedFolderByDefault, displayArchiveIntro, savedMessagesPeer, chatListViewUpdate, self.statePromise.get()) |> mapToQueue { (hideArchivedFolderByDefault, displayArchiveIntro, savedMessagesPeer, update, state) -> Signal in let previousHideArchivedFolderByDefaultValue = previousHideArchivedFolderByDefault.swap(hideArchivedFolderByDefault) diff --git a/TelegramUI/FetchManager.swift b/TelegramUI/FetchManager.swift index 34babc0205..4a776e786e 100644 --- a/TelegramUI/FetchManager.swift +++ b/TelegramUI/FetchManager.swift @@ -102,8 +102,12 @@ private final class FetchManagerLocationEntry { var combinedRanges: IndexSet { var result = IndexSet() - for range in self.ranges.copyItems() { - result.formUnion(range) + if self.userInitiated { + result.insert(integersIn: 0 ..< Int(Int32.max)) + } else { + for range in self.ranges.copyItems() { + result.formUnion(range) + } } return result } diff --git a/TelegramUI/FileMediaResourceStatus.swift b/TelegramUI/FileMediaResourceStatus.swift index 3720b16d55..39b092a66e 100644 --- a/TelegramUI/FileMediaResourceStatus.swift +++ b/TelegramUI/FileMediaResourceStatus.swift @@ -49,7 +49,7 @@ func messageFileMediaResourceStatus(context: AccountContext, file: TelegramMedia return status?.status } - if message.flags.isSending { + if message.flags.isSending { return combineLatest(messageMediaFileStatus(context: context, messageId: message.id, file: file), context.account.pendingMessageManager.pendingMessageStatus(message.id), playbackStatus) |> map { resourceStatus, pendingStatus, playbackStatus -> FileMediaResourceStatus in let mediaStatus: FileMediaResourceMediaStatus