Swiftgram/submodules/TelegramCore/Sources/State/SynchronizeChatInputStateOperation.swift
2022-10-16 17:06:30 +04:00

42 lines
1.9 KiB
Swift

import Foundation
import Postbox
func addSynchronizeChatInputStateOperation(transaction: Transaction, peerId: PeerId, threadId: Int64?) {
var removeLocalIndices: [Int32] = []
let tag: PeerOperationLogTag = OperationLogTags.SynchronizeChatInputStates
var previousOperation: SynchronizeChatInputStateOperation?
transaction.operationLogEnumerateEntries(peerId: peerId, tag: tag, { entry in
if let operation = entry.contents as? SynchronizeChatInputStateOperation {
if operation.threadId == threadId {
previousOperation = operation
removeLocalIndices.append(entry.tagLocalIndex)
return false
}
} else {
removeLocalIndices.append(entry.tagLocalIndex)
}
return true
})
var previousState: SynchronizeableChatInputState?
if let previousOperation = previousOperation {
previousState = previousOperation.previousState
} else {
let peerChatInterfaceState: StoredPeerChatInterfaceState?
if let threadId = threadId {
peerChatInterfaceState = transaction.getPeerChatThreadInterfaceState(peerId, threadId: threadId)
} else {
peerChatInterfaceState = transaction.getPeerChatInterfaceState(peerId)
}
if let peerChatInterfaceState = peerChatInterfaceState, let data = peerChatInterfaceState.data {
previousState = (try? AdaptedPostboxDecoder().decode(InternalChatInterfaceState.self, from: data))?.synchronizeableInputState
}
}
let operationContents = SynchronizeChatInputStateOperation(previousState: previousState, threadId: threadId)
for index in removeLocalIndices {
let _ = transaction.operationLogRemoveEntry(peerId: peerId, tag: tag, tagLocalIndex: index)
}
transaction.operationLogAddEntry(peerId: peerId, tag: tag, tagLocalIndex: .automatic, tagMergedIndex: .automatic, contents: operationContents)
}