mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 14:45:21 +00:00
[WIP] Saved messages
This commit is contained in:
@@ -149,6 +149,10 @@ final class PendingMessageRequestDependencyTag: NetworkRequestDependencyTag {
|
||||
}
|
||||
}
|
||||
|
||||
private final class CorrelationIdToSentMessageId {
|
||||
var mapping: [Int64: MessageId] = [:]
|
||||
}
|
||||
|
||||
public final class PendingMessageManager {
|
||||
private let network: Network
|
||||
private let postbox: Postbox
|
||||
@@ -174,6 +178,8 @@ public final class PendingMessageManager {
|
||||
|
||||
var transformOutgoingMessageMedia: TransformOutgoingMessageMedia?
|
||||
|
||||
private let correlationIdToSentMessageId: Atomic<CorrelationIdToSentMessageId> = Atomic(value: CorrelationIdToSentMessageId())
|
||||
|
||||
init(network: Network, postbox: Postbox, accountPeerId: PeerId, auxiliaryMethods: AccountAuxiliaryMethods, stateManager: AccountStateManager, localInputActivityManager: PeerInputActivityManager, messageMediaPreuploadManager: MessageMediaPreuploadManager, revalidationContext: MediaReferenceRevalidationContext) {
|
||||
Logger.shared.log("PendingMessageManager", "create instance")
|
||||
self.network = network
|
||||
@@ -1560,6 +1566,12 @@ public final class PendingMessageManager {
|
||||
var namespace = Namespaces.Message.Cloud
|
||||
if let apiMessage = apiMessage, let id = apiMessage.id(namespace: message.scheduleTime != nil && message.scheduleTime == apiMessage.timestamp ? Namespaces.Message.ScheduledCloud : Namespaces.Message.Cloud) {
|
||||
namespace = id.namespace
|
||||
|
||||
if let attribute = message.attributes.first(where: { $0 is OutgoingMessageInfoAttribute }) as? OutgoingMessageInfoAttribute, let correlationId = attribute.correlationId {
|
||||
self.correlationIdToSentMessageId.with { value in
|
||||
value.mapping[correlationId] = id
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return applyUpdateMessage(postbox: postbox, stateManager: stateManager, message: message, cacheReferenceKey: content.cacheReferenceKey, result: result, accountPeerId: self.accountPeerId)
|
||||
@@ -1586,6 +1598,20 @@ public final class PendingMessageManager {
|
||||
}
|
||||
}
|
||||
|
||||
if messages.count == result.messages.count {
|
||||
for i in 0 ..< messages.count {
|
||||
let message = messages[i]
|
||||
let apiMessage = result.messages[i]
|
||||
if let id = apiMessage.id(namespace: message.scheduleTime != nil && message.scheduleTime == apiMessage.timestamp ? Namespaces.Message.ScheduledCloud : Namespaces.Message.Cloud) {
|
||||
if let attribute = message.attributes.first(where: { $0 is OutgoingMessageInfoAttribute }) as? OutgoingMessageInfoAttribute, let correlationId = attribute.correlationId {
|
||||
self.correlationIdToSentMessageId.with { value in
|
||||
value.mapping[correlationId] = id
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return applyUpdateGroupMessages(postbox: postbox, stateManager: stateManager, messages: messages, result: result)
|
||||
|> afterDisposed { [weak self] in
|
||||
if let strongSelf = self {
|
||||
@@ -1665,4 +1691,8 @@ public final class PendingMessageManager {
|
||||
return disposable
|
||||
}
|
||||
}
|
||||
|
||||
public func synchronouslyLookupCorrelationId(correlationId: Int64) -> MessageId? {
|
||||
return self.correlationIdToSentMessageId.with { $0.mapping[correlationId] }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user