mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Fix gradient background animation
This commit is contained in:
@@ -7,14 +7,60 @@ import Display
|
||||
import MergeLists
|
||||
import AccountContext
|
||||
|
||||
func preparedChatHistoryViewTransition(from fromView: ChatHistoryView?, to toView: ChatHistoryView, reason: ChatHistoryViewTransitionReason, reverse: Bool, chatLocation: ChatLocation, controllerInteraction: ChatControllerInteraction, scrollPosition: ChatHistoryViewScrollPosition?, initialData: InitialMessageHistoryData?, keyboardButtonsMessage: Message?, cachedData: CachedPeerData?, cachedDataMessages: [MessageId: Message]?, readStateData: [PeerId: ChatHistoryCombinedInitialReadStateData]?, flashIndicators: Bool, updatedMessageSelection: Bool) -> ChatHistoryViewTransition {
|
||||
let mergeResult: (deleteIndices: [Int], indicesAndItems: [(Int, ChatHistoryEntry, Int?)], updateIndices: [(Int, ChatHistoryEntry, Int)])
|
||||
func preparedChatHistoryViewTransition(from fromView: ChatHistoryView?, to toView: ChatHistoryView, reason: ChatHistoryViewTransitionReason, reverse: Bool, chatLocation: ChatLocation, controllerInteraction: ChatControllerInteraction, scrollPosition: ChatHistoryViewScrollPosition?, initialData: InitialMessageHistoryData?, keyboardButtonsMessage: Message?, cachedData: CachedPeerData?, cachedDataMessages: [MessageId: Message]?, readStateData: [PeerId: ChatHistoryCombinedInitialReadStateData]?, flashIndicators: Bool, updatedMessageSelection: Bool, messageTransitionNode: ChatMessageTransitionNode?) -> ChatHistoryViewTransition {
|
||||
var mergeResult: (deleteIndices: [Int], indicesAndItems: [(Int, ChatHistoryEntry, Int?)], updateIndices: [(Int, ChatHistoryEntry, Int)])
|
||||
let allUpdated = fromView?.associatedData != toView.associatedData
|
||||
if reverse {
|
||||
mergeResult = mergeListsStableWithUpdatesReversed(leftList: fromView?.filteredEntries ?? [], rightList: toView.filteredEntries, allUpdated: allUpdated)
|
||||
} else {
|
||||
mergeResult = mergeListsStableWithUpdates(leftList: fromView?.filteredEntries ?? [], rightList: toView.filteredEntries, allUpdated: allUpdated)
|
||||
}
|
||||
|
||||
if let messageTransitionNode = messageTransitionNode, messageTransitionNode.hasOngoingTransitions, let previousEntries = fromView?.filteredEntries {
|
||||
for i in 0 ..< mergeResult.updateIndices.count {
|
||||
switch mergeResult.updateIndices[i].1 {
|
||||
case let .MessageEntry(message, presentationData, flag, monthLocation, messageSelection, entryAttributes):
|
||||
if messageTransitionNode.isAnimatingMessage(stableId: message.stableId) {
|
||||
var updatedMessage = message
|
||||
mediaLoop: for media in message.media {
|
||||
if let webpage = media as? TelegramMediaWebpage, case .Loaded = webpage.content {
|
||||
var filterMedia = false
|
||||
switch previousEntries[mergeResult.updateIndices[i].2] {
|
||||
case let .MessageEntry(previousMessage, _, _, _, _, _):
|
||||
if previousMessage.media.contains(where: { value in
|
||||
if let value = value as? TelegramMediaWebpage, case .Loaded = value.content {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}) {
|
||||
if messageTransitionNode.hasScheduledUpdateMessageAfterAnimationCompleted(stableId: message.stableId) {
|
||||
filterMedia = true
|
||||
}
|
||||
} else {
|
||||
filterMedia = true
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
if filterMedia {
|
||||
updatedMessage = message.withUpdatedMedia(message.media.filter {
|
||||
$0 !== media
|
||||
})
|
||||
messageTransitionNode.scheduleUpdateMessageAfterAnimationCompleted(stableId: message.stableId)
|
||||
}
|
||||
|
||||
break mediaLoop
|
||||
}
|
||||
}
|
||||
mergeResult.updateIndices[i].1 = .MessageEntry(updatedMessage, presentationData, flag, monthLocation, messageSelection, entryAttributes)
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var adjustedDeleteIndices: [ListViewDeleteItem] = []
|
||||
let previousCount: Int
|
||||
|
||||
Reference in New Issue
Block a user