[WIP] Saved messages

This commit is contained in:
Isaac
2024-01-23 17:52:21 +01:00
parent 7c8d8bc256
commit 0cab0ca678
62 changed files with 1078 additions and 411 deletions

View File

@@ -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] }
}
}