From d12bce54bdbf7c1843d1563f27be257b974717a5 Mon Sep 17 00:00:00 2001 From: 0x330a <92654767+0x330a@users.noreply.github.com> Date: Mon, 13 Nov 2023 08:38:33 +1100 Subject: [PATCH] feat: add basic last sent legacy message DB migration and creation for banner --- .../conversation/v2/ConversationActivityV2.kt | 2 +- .../securesms/database/LokiAPIDatabase.kt | 37 +++++++++++++++++++ .../database/helpers/SQLCipherOpenHelper.java | 2 + .../database/LokiAPIDatabaseProtocol.kt | 3 ++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt index 7f8879116..c158053fd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt @@ -698,7 +698,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe private fun setUpOutdatedClientBanner() { val recipient = viewModel.recipient?.takeIf { !it.isLocalNumber } ?: return - if (ExpirationConfiguration.isNewConfigEnabled && recipient.isContactRecipient && + if (ExpirationConfiguration.isNewConfigEnabled && recipient.disappearingState == DisappearingState.LEGACY && viewModel.expirationConfiguration?.isEnabled == true ) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/LokiAPIDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/LokiAPIDatabase.kt index 53f4ea319..d15ebbfd9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/LokiAPIDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/LokiAPIDatabase.kt @@ -97,6 +97,16 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( public val groupPublicKey = "group_public_key" @JvmStatic val createClosedGroupPublicKeysTable = "CREATE TABLE $closedGroupPublicKeysTable ($groupPublicKey STRING PRIMARY KEY)" + + private const val LAST_LEGACY_MESSAGE_TABLE = "last_legacy_messages" + // The overall "thread recipient + private const val LAST_LEGACY_THREAD_RECIPIENT = "last_legacy_thread_recipient" + // The individual 'last' person who sent the message with legacy expiration attached + private const val LAST_LEGACY_SENDER_RECIPIENT = "last_legacy_sender_recipient" + private const val LEGACY_THREAD_RECIPIENT_QUERY = "$LAST_LEGACY_THREAD_RECIPIENT = ?" + + const val CREATE_LAST_LEGACY_MESSAGE_TABLE = "CREATE TABLE $LAST_LEGACY_MESSAGE_TABLE ($LAST_LEGACY_THREAD_RECIPIENT STRING PRIMARY KEY, $LAST_LEGACY_SENDER_RECIPIENT STRING NOT NULL);" + // Hard fork service node info const val FORK_INFO_TABLE = "fork_info" const val DUMMY_KEY = "dummy_key" @@ -415,6 +425,33 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( database.endTransaction() } + override fun getLastLegacySenderAddress(threadRecipientAddress: String): String? { + val database = databaseHelper.readableDatabase + return database.get(LAST_LEGACY_MESSAGE_TABLE, LEGACY_THREAD_RECIPIENT_QUERY, wrap(threadRecipientAddress)) { cursor -> + cursor.getString(LAST_LEGACY_SENDER_RECIPIENT) + } + } + + override fun setLastLegacySenderAddress( + threadRecipientAddress: String, + senderRecipientAddress: String? + ) { + val database = databaseHelper.writableDatabase + if (senderRecipientAddress == null) { + // delete + database.delete(LAST_LEGACY_MESSAGE_TABLE, LEGACY_THREAD_RECIPIENT_QUERY, wrap(threadRecipientAddress)) + } else { + // just update the value to a new one + val values = wrap( + mapOf( + LAST_LEGACY_THREAD_RECIPIENT to threadRecipientAddress, + LAST_LEGACY_SENDER_RECIPIENT to senderRecipientAddress + ) + ) + database.insertOrUpdate(LAST_LEGACY_MESSAGE_TABLE, values, LEGACY_THREAD_RECIPIENT_QUERY, wrap(threadRecipientAddress)) + } + } + fun getUserCount(room: String, server: String): Int? { val database = databaseHelper.readableDatabase val index = "$server.$room" diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java index 416426ace..7713043c2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java @@ -366,6 +366,7 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper { executeStatements(db, ReactionDatabase.CREATE_REACTION_TRIGGERS); db.execSQL(RecipientDatabase.getAddWrapperHash()); db.execSQL(RecipientDatabase.getAddBlocksCommunityMessageRequests()); + db.execSQL(LokiAPIDatabase.CREATE_LAST_LEGACY_MESSAGE_TABLE); } @Override @@ -629,6 +630,7 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper { if (oldVersion < lokiV46) { executeStatements(db, SmsDatabase.ADD_AUTOINCREMENT); executeStatements(db, MmsDatabase.ADD_AUTOINCREMENT); + db.execSQL(LokiAPIDatabase.CREATE_LAST_LEGACY_MESSAGE_TABLE); } db.setTransactionSuccessful(); diff --git a/libsignal/src/main/java/org/session/libsignal/database/LokiAPIDatabaseProtocol.kt b/libsignal/src/main/java/org/session/libsignal/database/LokiAPIDatabaseProtocol.kt index 18880f553..37c00a037 100644 --- a/libsignal/src/main/java/org/session/libsignal/database/LokiAPIDatabaseProtocol.kt +++ b/libsignal/src/main/java/org/session/libsignal/database/LokiAPIDatabaseProtocol.kt @@ -38,4 +38,7 @@ interface LokiAPIDatabaseProtocol { fun getForkInfo(): ForkInfo fun setForkInfo(forkInfo: ForkInfo) fun migrateLegacyOpenGroup(legacyServerId: String, newServerId: String) + fun getLastLegacySenderAddress(threadRecipientAddress: String): String? + fun setLastLegacySenderAddress(threadRecipientAddress: String, senderRecipientAddress: String?) + }