mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-07 08:01:10 +00:00
FetchManager: fix userInitiated item persistence
ChatList: fix animation glitches, limit chat selection to 100
This commit is contained in:
parent
e486a4e00e
commit
b43a19fa3b
@ -475,6 +475,8 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode {
|
||||
}
|
||||
additionalData.append(.totalUnreadState)
|
||||
|
||||
let currentViewVersion = Atomic<Int?>(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<ChatHistoryView?>(value: nil)
|
||||
let automaticDownloadNetworkType = context.account.networkType
|
||||
@ -503,7 +515,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode {
|
||||
|
||||
let previousHistoryAppearsCleared = Atomic<Bool?>(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<ChatHistoryListViewTransition, Void> 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<Void, Void> in
|
||||
if let strongSelf = self {
|
||||
return strongSelf.enqueueHistoryViewTransition(transition)
|
||||
return strongSelf.enqueueHistoryViewTransition(transition)
|
||||
|> introduceError(Void.self)
|
||||
}
|
||||
return .complete()
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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<ChatListNodeListViewTransition, NoError> in
|
||||
|
||||
let previousHideArchivedFolderByDefaultValue = previousHideArchivedFolderByDefault.swap(hideArchivedFolderByDefault)
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user