mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-08 08:31:13 +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)
|
additionalData.append(.totalUnreadState)
|
||||||
|
|
||||||
|
let currentViewVersion = Atomic<Int?>(value: nil)
|
||||||
|
|
||||||
let historyViewUpdate = self.chatHistoryLocationPromise.get()
|
let historyViewUpdate = self.chatHistoryLocationPromise.get()
|
||||||
|> distinctUntilChanged
|
|> distinctUntilChanged
|
||||||
|> mapToSignal { location in
|
|> 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 previousView = Atomic<ChatHistoryView?>(value: nil)
|
||||||
let automaticDownloadNetworkType = context.account.networkType
|
let automaticDownloadNetworkType = context.account.networkType
|
||||||
@ -503,7 +515,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode {
|
|||||||
|
|
||||||
let previousHistoryAppearsCleared = Atomic<Bool?>(value: nil)
|
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)
|
|> introduceError(Void.self)
|
||||||
|> mapToQueue { [weak self] update, chatPresentationData, selectedMessages, networkType, historyAppearsCleared -> Signal<ChatHistoryListViewTransition, Void> in
|
|> mapToQueue { [weak self] update, chatPresentationData, selectedMessages, networkType, historyAppearsCleared -> Signal<ChatHistoryListViewTransition, Void> in
|
||||||
func applyHole() {
|
func applyHole() {
|
||||||
@ -527,7 +539,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let initialData: ChatHistoryCombinedInitialData?
|
let initialData: ChatHistoryCombinedInitialData?
|
||||||
switch update {
|
switch update.0 {
|
||||||
case let .Loading(combinedInitialData, type):
|
case let .Loading(combinedInitialData, type):
|
||||||
if case .Generic(.FillHole) = type {
|
if case .Generic(.FillHole) = type {
|
||||||
applyHole()
|
applyHole()
|
||||||
@ -633,7 +645,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode {
|
|||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> mapToQueue { [weak self] transition -> Signal<Void, Void> in
|
|> mapToQueue { [weak self] transition -> Signal<Void, Void> in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
return strongSelf.enqueueHistoryViewTransition(transition)
|
return strongSelf.enqueueHistoryViewTransition(transition)
|
||||||
|> introduceError(Void.self)
|
|> introduceError(Void.self)
|
||||||
}
|
}
|
||||||
return .complete()
|
return .complete()
|
||||||
|
@ -1448,7 +1448,6 @@ class ChatListItemNode: ItemListRevealOptionsItemNode {
|
|||||||
case .peer:
|
case .peer:
|
||||||
let itemId: PinnedItemId = .peer(item.index.messageIndex.id.peerId)
|
let itemId: PinnedItemId = .peer(item.index.messageIndex.id.peerId)
|
||||||
item.interaction.setItemPinned(itemId, true)
|
item.interaction.setItemPinned(itemId, true)
|
||||||
close = false
|
|
||||||
case .groupReference:
|
case .groupReference:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@ -1457,7 +1456,6 @@ class ChatListItemNode: ItemListRevealOptionsItemNode {
|
|||||||
case .peer:
|
case .peer:
|
||||||
let itemId: PinnedItemId = .peer(item.index.messageIndex.id.peerId)
|
let itemId: PinnedItemId = .peer(item.index.messageIndex.id.peerId)
|
||||||
item.interaction.setItemPinned(itemId, false)
|
item.interaction.setItemPinned(itemId, false)
|
||||||
close = false
|
|
||||||
case .groupReference:
|
case .groupReference:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -407,7 +407,9 @@ final class ChatListNode: ListView {
|
|||||||
if state.selectedPeerIds.contains(peerId) {
|
if state.selectedPeerIds.contains(peerId) {
|
||||||
state.selectedPeerIds.remove(peerId)
|
state.selectedPeerIds.remove(peerId)
|
||||||
} else {
|
} else {
|
||||||
state.selectedPeerIds.insert(peerId)
|
if state.selectedPeerIds.count < 100 {
|
||||||
|
state.selectedPeerIds.insert(peerId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return state
|
return state
|
||||||
}
|
}
|
||||||
@ -442,11 +444,6 @@ final class ChatListNode: ListView {
|
|||||||
case let .limitExceeded(maxCount):
|
case let .limitExceeded(maxCount):
|
||||||
strongSelf.presentAlert?(strongSelf.currentState.presentationData.strings.DialogList_PinLimitError("\(maxCount)").0)
|
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
|
}, setPeerMuted: { [weak self] peerId, _ in
|
||||||
@ -533,7 +530,7 @@ final class ChatListNode: ListView {
|
|||||||
|
|
||||||
let currentPeerId: PeerId = context.account.peerId
|
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
|
|> mapToQueue { (hideArchivedFolderByDefault, displayArchiveIntro, savedMessagesPeer, update, state) -> Signal<ChatListNodeListViewTransition, NoError> in
|
||||||
|
|
||||||
let previousHideArchivedFolderByDefaultValue = previousHideArchivedFolderByDefault.swap(hideArchivedFolderByDefault)
|
let previousHideArchivedFolderByDefaultValue = previousHideArchivedFolderByDefault.swap(hideArchivedFolderByDefault)
|
||||||
|
@ -102,8 +102,12 @@ private final class FetchManagerLocationEntry {
|
|||||||
|
|
||||||
var combinedRanges: IndexSet {
|
var combinedRanges: IndexSet {
|
||||||
var result = IndexSet()
|
var result = IndexSet()
|
||||||
for range in self.ranges.copyItems() {
|
if self.userInitiated {
|
||||||
result.formUnion(range)
|
result.insert(integersIn: 0 ..< Int(Int32.max))
|
||||||
|
} else {
|
||||||
|
for range in self.ranges.copyItems() {
|
||||||
|
result.formUnion(range)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ func messageFileMediaResourceStatus(context: AccountContext, file: TelegramMedia
|
|||||||
return status?.status
|
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)
|
return combineLatest(messageMediaFileStatus(context: context, messageId: message.id, file: file), context.account.pendingMessageManager.pendingMessageStatus(message.id), playbackStatus)
|
||||||
|> map { resourceStatus, pendingStatus, playbackStatus -> FileMediaResourceStatus in
|
|> map { resourceStatus, pendingStatus, playbackStatus -> FileMediaResourceStatus in
|
||||||
let mediaStatus: FileMediaResourceMediaStatus
|
let mediaStatus: FileMediaResourceMediaStatus
|
||||||
|
Loading…
x
Reference in New Issue
Block a user