From f977caa1ed00aae42c88845abfcd0edb1cc5aedc Mon Sep 17 00:00:00 2001 From: SessionHero01 <180888785+SessionHero01@users.noreply.github.com> Date: Wed, 4 Dec 2024 12:28:44 +0800 Subject: [PATCH] Fix member not having access to old messages (#831) --- .../thoughtcrime/securesms/database/LokiAPIDatabase.kt | 10 ++++++++++ .../securesms/groups/GroupManagerV2Impl.kt | 4 ++++ .../libsignal/database/LokiAPIDatabaseProtocol.kt | 2 ++ 3 files changed, 16 insertions(+) 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 ff22ae14e3..1e9379bc8d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/LokiAPIDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/LokiAPIDatabase.kt @@ -293,6 +293,11 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( val lastHash = database.insertOrUpdate(lastMessageHashValueTable2, row, query, arrayOf( snode.toString(), publicKey, namespace.toString() )) } + override fun clearLastMessageHashes(publicKey: String) { + databaseHelper.writableDatabase + .delete(lastMessageHashValueTable2, "${Companion.publicKey} = ?", arrayOf(publicKey)) + } + override fun clearAllLastMessageHashes() { val database = databaseHelper.writableDatabase database.delete(lastMessageHashValueTable2, null, null) @@ -319,6 +324,11 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( database.insertOrUpdate(receivedMessageHashValuesTable, row, query, arrayOf( publicKey, namespace.toString() )) } + override fun clearReceivedMessageHashValues(publicKey: String) { + databaseHelper.writableDatabase + .delete(receivedMessageHashValuesTable, "${Companion.publicKey} = ?", arrayOf(publicKey)) + } + override fun clearReceivedMessageHashValues() { val database = databaseHelper.writableDatabase database.delete(receivedMessageHashValuesTable, null, null) diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt index d0b00f458b..0535774be4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt @@ -56,6 +56,7 @@ import org.session.libsignal.utilities.AccountId import org.session.libsignal.utilities.Base64 import org.session.libsignal.utilities.Log import org.session.libsignal.utilities.Namespace +import org.thoughtcrime.securesms.database.LokiAPIDatabase import org.thoughtcrime.securesms.database.LokiMessageDatabase import org.thoughtcrime.securesms.database.MmsSmsDatabase import org.thoughtcrime.securesms.database.ThreadDatabase @@ -79,6 +80,7 @@ class GroupManagerV2Impl @Inject constructor( @ApplicationContext val application: Context, private val clock: SnodeClock, private val messageDataProvider: MessageDataProvider, + private val lokiAPIDatabase: LokiAPIDatabase, ) : GroupManagerV2 { private val dispatcher = Dispatchers.Default @@ -472,6 +474,8 @@ class GroupManagerV2Impl @Inject constructor( storage.getThreadId(Address.fromSerialized(groupId.hexString)) ?.let(storage::deleteConversation) configFactory.removeGroup(groupId) + lokiAPIDatabase.clearLastMessageHashes(groupId.hexString) + lokiAPIDatabase.clearReceivedMessageHashValues(groupId.hexString) } } 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 d7458ff651..0ceb4753b6 100644 --- a/libsignal/src/main/java/org/session/libsignal/database/LokiAPIDatabaseProtocol.kt +++ b/libsignal/src/main/java/org/session/libsignal/database/LokiAPIDatabaseProtocol.kt @@ -17,9 +17,11 @@ interface LokiAPIDatabaseProtocol { fun setSwarm(publicKey: String, newValue: Set) fun getLastMessageHashValue(snode: Snode, publicKey: String, namespace: Int): String? fun setLastMessageHashValue(snode: Snode, publicKey: String, newValue: String, namespace: Int) + fun clearLastMessageHashes(publicKey: String) fun clearAllLastMessageHashes() fun getReceivedMessageHashValues(publicKey: String, namespace: Int): Set? fun setReceivedMessageHashValues(publicKey: String, newValue: Set, namespace: Int) + fun clearReceivedMessageHashValues(publicKey: String) fun clearReceivedMessageHashValues() fun getAuthToken(server: String): String? fun setAuthToken(server: String, newValue: String?)