From 92b30739f0be97d95430750d805ced450d0eb324 Mon Sep 17 00:00:00 2001 From: charles Date: Wed, 21 Dec 2022 12:14:56 +1100 Subject: [PATCH] Disappearing messages job update --- .../attachments/DatabaseAttachmentProvider.kt | 6 ++++++ .../securesms/database/LokiMessageDatabase.kt | 5 +++++ .../securesms/database/MmsSmsDatabase.java | 6 ++++++ .../org/thoughtcrime/securesms/database/Storage.kt | 4 ++-- .../libsession/database/MessageDataProvider.kt | 1 + .../session/libsession/database/StorageProtocol.kt | 2 +- .../messaging/jobs/DisappearingMessagesJob.kt | 2 +- .../libsession/messaging/jobs/SyncedExpiriesJob.kt | 2 +- .../sending_receiving/ReceivedMessageHandler.kt | 13 ++++++++----- 9 files changed, 31 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachmentProvider.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachmentProvider.kt index 3282a328db..9c5afdd122 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachmentProvider.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachmentProvider.kt @@ -206,6 +206,12 @@ class DatabaseAttachmentProvider(context: Context, helper: SQLCipherOpenHelper) return messageDB.getMessageServerHashes(messageIDs) } + override fun getMessageTimestampForServerHash(serverHash: String): Long? { + return DatabaseComponent.get(context).lokiMessageDatabase().getMessageIdForServerHash(serverHash)?.let { + DatabaseComponent.get(context).mmsSmsDatabase().getMessage(it)?.timestamp + } + } + override fun getDatabaseAttachment(attachmentId: Long): DatabaseAttachment? { val attachmentDatabase = DatabaseComponent.get(context).attachmentDatabase() return attachmentDatabase.getAttachment(AttachmentId(attachmentId, 0)) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/LokiMessageDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/LokiMessageDatabase.kt index 5b4d27ad39..6c3e72cf00 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/LokiMessageDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/LokiMessageDatabase.kt @@ -197,4 +197,9 @@ class LokiMessageDatabase(context: Context, helper: SQLCipherOpenHelper) : Datab database.update(messageThreadMappingTable, contentValues, "$threadID = ?", arrayOf(legacyThreadId.toString())) } + fun getMessageIdForServerHash(serverHash: String): Long? { + return readableDatabase.get(messageHashTable, "$serverHash = ?", arrayOf(serverHash)) { cursor -> + cursor.getLong(messageID) + } + } } \ No newline at end of file diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java index b3afeac477..1211ea3210 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java @@ -81,6 +81,12 @@ public class MmsSmsDatabase extends Database { super(context, databaseHelper); } + public @Nullable MessageRecord getMessage(long messageId) { + try (Cursor cursor = queryTables(PROJECTION, MmsSmsColumns.ID + " = " + messageId, null, null)) { + return readerFor(cursor).getNext(); + } + } + public @Nullable MessageRecord getMessageForTimestamp(long timestamp) { try (Cursor cursor = queryTables(PROJECTION, MmsSmsColumns.NORMALIZED_DATE_SENT + " = " + timestamp, null, null)) { MmsSmsDatabase.Reader reader = readerFor(cursor); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt index ad6ac22dea..5e772eca6a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt @@ -990,7 +990,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context, val smsDb = DatabaseComponent.get(context).smsDatabase() smsDb.readerFor(smsDb.expirationNotStartedMessages).use { reader -> while (reader.next != null) { - if (reader.current.id in messageIds) { + if (messageIds.isEmpty() || reader.current.id in messageIds) { expiringMessages.add(reader.current.id to reader.current.expiresIn) } } @@ -998,7 +998,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context, val mmsDb = DatabaseComponent.get(context).mmsDatabase() mmsDb.expireNotStartedMessages.use { reader -> while (reader.next != null) { - if (reader.current.id in messageIds) { + if (messageIds.isEmpty() || reader.current.id in messageIds) { expiringMessages.add(reader.current.id to reader.current.expiresIn) } } diff --git a/libsession/src/main/java/org/session/libsession/database/MessageDataProvider.kt b/libsession/src/main/java/org/session/libsession/database/MessageDataProvider.kt index f5882a1e2b..e22a8b5b10 100644 --- a/libsession/src/main/java/org/session/libsession/database/MessageDataProvider.kt +++ b/libsession/src/main/java/org/session/libsession/database/MessageDataProvider.kt @@ -24,6 +24,7 @@ interface MessageDataProvider { fun updateMessageAsDeleted(timestamp: Long, author: String) fun getServerHashForMessage(messageID: Long): String? fun getServerHashForMessages(messageIDs: List): List> + fun getMessageTimestampForServerHash(serverHash: String): Long? fun getDatabaseAttachment(attachmentId: Long): DatabaseAttachment? fun getAttachmentStream(attachmentId: Long): SessionServiceAttachmentStream? fun getAttachmentPointer(attachmentId: Long): SessionServiceAttachmentPointer? diff --git a/libsession/src/main/java/org/session/libsession/database/StorageProtocol.kt b/libsession/src/main/java/org/session/libsession/database/StorageProtocol.kt index 57d05a5fe2..4d0ddddbac 100644 --- a/libsession/src/main/java/org/session/libsession/database/StorageProtocol.kt +++ b/libsession/src/main/java/org/session/libsession/database/StorageProtocol.kt @@ -202,6 +202,6 @@ interface StorageProtocol { fun blockedContacts(): List fun getExpirationConfiguration(threadId: Long): ExpirationConfiguration? fun setExpirationConfiguration(config: ExpirationConfiguration) - fun getExpiringMessages(messageIds: List): List> + fun getExpiringMessages(messageIds: List = emptyList()): List> fun updateDisappearingState(address: String, disappearingState: Recipient.DisappearingState) } diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/DisappearingMessagesJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/DisappearingMessagesJob.kt index bbfb59add9..72ae7a18f3 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/DisappearingMessagesJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/DisappearingMessagesJob.kt @@ -5,7 +5,7 @@ import org.session.libsession.messaging.messages.ExpirationConfiguration import org.session.libsession.messaging.utilities.Data class DisappearingMessagesJob( - val messageIds: List = listOf(), + val messageIds: List = emptyList(), val startedAtMs: Long = 0, val threadId: Long = 0 ) : Job { diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/SyncedExpiriesJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/SyncedExpiriesJob.kt index 24f3f420b1..f5d399f3cc 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/SyncedExpiriesJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/SyncedExpiriesJob.kt @@ -10,7 +10,7 @@ import org.session.libsession.snode.SnodeAPI import org.session.libsession.utilities.Address class SyncedExpiriesJob( - val messageIds: List = listOf(), + val messageIds: List = emptyList(), val startedAtMs: Long = 0, val threadId: Long = 0 ) : Job { diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt index 675098ce1e..6c47f0f9df 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt @@ -121,14 +121,16 @@ private fun MessageReceiver.handleCallMessage(message: CallMessage) { } private fun MessageReceiver.handleSyncedExpiriesMessage(message: SyncedExpiriesMessage) { - val storage = MessagingModuleConfiguration.shared.storage - val userPublicKey = storage.getUserPublicKey() ?: return + val module = MessagingModuleConfiguration.shared + val userPublicKey = module.storage.getUserPublicKey() ?: return if (userPublicKey != message.sender) return message.conversationExpiries.forEach { (syncTarget, syncedExpiries) -> - val config = storage.getExpirationConfiguration(storage.getOrCreateThreadIdFor(syncTarget)) ?: return@forEach + val config = module.storage.getExpirationConfiguration(module.storage.getOrCreateThreadIdFor(syncTarget)) ?: return@forEach syncedExpiries.forEach { syncedExpiry -> - val startedAtMs = syncedExpiry.expirationTimestamp!! - config.durationSeconds * 1000 - SSKEnvironment.shared.messageExpirationManager.startAnyExpiration(startedAtMs, syncTarget, System.currentTimeMillis()) + module.messageDataProvider.getMessageTimestampForServerHash(syncedExpiry.serverHash!!)?.let { timestamp -> + val startedAtMs = syncedExpiry.expirationTimestamp!! - config.durationSeconds * 1000 + SSKEnvironment.shared.messageExpirationManager.startAnyExpiration(timestamp, syncTarget, startedAtMs) + } } } } @@ -388,6 +390,7 @@ fun MessageReceiver.handleVisibleMessage(message: VisibleMessage, storage.persist(message, quoteModel, linkPreviews, message.groupPublicKey, openGroupID, attachments, runIncrement, runThreadUpdate ) ?: return null + JobQueue.shared.add(DisappearingMessagesJob()) val openGroupServerID = message.openGroupServerMessageID if (openGroupServerID != null) { val isSms = !(message.isMediaMessage() || attachments.isNotEmpty())