WIP: update expiration of sync messages

pull/941/head
Ryan Zhao 12 months ago
parent 0150816aaa
commit c0073ea7de

@ -186,7 +186,7 @@ extension MessageReceiver {
else { break }
// If we receive an outgoing message that already exists in the database
// then we still need up update the recipient and read states for the
// then we still need to update the recipient and read states for the
// message (even if we don't need to do anything else)
try updateRecipientAndReadStatesForOutgoingInteraction(
db,
@ -197,6 +197,14 @@ extension MessageReceiver {
syncTarget: message.syncTarget
)
getExpirationForOutgoingDisappearingMessages(
db,
threadId: threadId,
variant: variant,
serverHash: message.serverHash,
expireInSeconds: expiresInSeconds
)
default: break
}
@ -215,6 +223,14 @@ extension MessageReceiver {
syncTarget: message.syncTarget
)
getExpirationForOutgoingDisappearingMessages(
db,
threadId: threadId,
variant: variant,
serverHash: message.serverHash,
expireInSeconds: expiresInSeconds
)
// Parse & persist attachments
let attachments: [Attachment] = try dataMessage.attachments
.compactMap { proto -> Attachment? in
@ -483,4 +499,36 @@ extension MessageReceiver {
_ = try pendingReadReceipt.delete(db)
}
}
private static func getExpirationForOutgoingDisappearingMessages(
_ db: Database,
threadId: String,
variant: Interaction.Variant,
serverHash: String?,
expireInSeconds: TimeInterval?
) {
guard
variant == .standardOutgoing,
let serverHash: String = serverHash,
let expireInSeconds: TimeInterval = expireInSeconds,
expireInSeconds > 0
else {
return
}
let startedAtTimestampMs: Double = Double(SnodeAPI.currentOffsetTimestampMs())
JobRunner.add(
db,
job: Job(
variant: .getExpiration,
behaviour: .runOnce,
threadId: threadId,
details: GetExpirationJob.Details(
expirationInfo: [serverHash: expireInSeconds],
startedAtTimestampMs: startedAtTimestampMs
)
)
)
}
}

@ -946,8 +946,25 @@ public final class MessageSender {
openGroupServerMessageId: message.openGroupServerMessageId.map { Int64($0) }
).update(db)
if interaction.isExpiringMessage {
if
interaction.isExpiringMessage && isSyncMessage,
let startedAtMs: Double = interaction.expiresStartedAtMs,
let expiresInSeconds: TimeInterval = interaction.expiresInSeconds,
let serverHash: String = message.serverHash
{
let expirationTimestampMs: Int64 = Int64(startedAtMs + expiresInSeconds * 1000)
JobRunner.add(
db,
job: Job(
variant: .expirationUpdate,
behaviour: .runOnce,
threadId: interaction.threadId,
details: ExpirationUpdateJob.Details(
serverHashes: [serverHash],
expirationTimestampMs: expirationTimestampMs
)
)
)
}
}

Loading…
Cancel
Save