From 1de1a8015541ae2e03f7f0d0aa682802d3767dfc Mon Sep 17 00:00:00 2001 From: SessionHero01 <180888785+SessionHero01@users.noreply.github.com> Date: Tue, 3 Dec 2024 09:06:22 +0800 Subject: [PATCH] Bulk group message deletion (#826) --- .../securesms/configs/ConfigToDatabaseSync.kt | 11 +++++++++-- .../securesms/database/MmsSmsDatabase.java | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/configs/ConfigToDatabaseSync.kt b/app/src/main/java/org/thoughtcrime/securesms/configs/ConfigToDatabaseSync.kt index 95e2a277c0..27e4c6ae27 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/configs/ConfigToDatabaseSync.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/configs/ConfigToDatabaseSync.kt @@ -5,6 +5,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import network.loki.messenger.R import network.loki.messenger.libsession_util.ConfigBase.Companion.PRIORITY_HIDDEN import network.loki.messenger.libsession_util.ConfigBase.Companion.PRIORITY_PINNED import network.loki.messenger.libsession_util.ReadableGroupInfoConfig @@ -39,12 +40,15 @@ import org.session.libsignal.messages.SignalServiceGroup import org.session.libsignal.utilities.AccountId import org.session.libsignal.utilities.Log import org.thoughtcrime.securesms.database.MmsDatabase +import org.thoughtcrime.securesms.database.MmsSmsDatabase import org.thoughtcrime.securesms.database.RecipientDatabase import org.thoughtcrime.securesms.database.ThreadDatabase import org.thoughtcrime.securesms.dependencies.PollerFactory import org.thoughtcrime.securesms.groups.ClosedGroupManager import org.thoughtcrime.securesms.groups.OpenGroupManager +import org.thoughtcrime.securesms.repository.ConversationRepository import org.thoughtcrime.securesms.sskenvironment.ProfileManager +import java.util.concurrent.TimeUnit import javax.inject.Inject private const val TAG = "ConfigToDatabaseSync" @@ -65,6 +69,8 @@ class ConfigToDatabaseSync @Inject constructor( private val clock: SnodeClock, private val profileManager: ProfileManager, private val preferences: TextSecurePreferences, + private val conversationRepository: ConversationRepository, + private val mmsSmsDatabase: MmsSmsDatabase, ) { init { if (!preferences.migratedToGroupV2Config) { @@ -194,10 +200,11 @@ class ConfigToDatabaseSync @Inject constructor( ) } else { groupInfoConfig.deleteBefore?.let { removeBefore -> - storage.trimThreadBefore(threadId, removeBefore) + val messages = mmsSmsDatabase.getAllMessageRecordsBefore(threadId, TimeUnit.SECONDS.toMillis(removeBefore)) + conversationRepository.markAsDeletedLocally(messages, context.getString(R.string.deleteMessageDeletedGlobally)) } groupInfoConfig.deleteAttachmentsBefore?.let { removeAttachmentsBefore -> - mmsDatabase.deleteMessagesInThreadBeforeDate(threadId, removeAttachmentsBefore, onlyMedia = true) + mmsDatabase.deleteMessagesInThreadBeforeDate(threadId, TimeUnit.SECONDS.toMillis(removeAttachmentsBefore), onlyMedia = true) } } } 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 3f99b5430a..9a10e6fb63 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java @@ -310,6 +310,22 @@ public class MmsSmsDatabase extends Database { return identifiedMessages; } + public Set getAllMessageRecordsBefore(long threadId, long timestampMills) { + String selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + MmsSmsColumns.NORMALIZED_DATE_SENT + " < " + timestampMills; + Set identifiedMessages = new HashSet<>(); + + // Try everything with resources so that they auto-close on end of scope + try (Cursor cursor = queryTables(PROJECTION, selection, null, null)) { + try (MmsSmsDatabase.Reader reader = readerFor(cursor)) { + MessageRecord messageRecord; + while ((messageRecord = reader.getNext()) != null) { + identifiedMessages.add(messageRecord); + } + } + } + return identifiedMessages; + } + public long getLastOutgoingTimestamp(long threadId) { String order = MmsSmsColumns.NORMALIZED_DATE_SENT + " DESC"; String selection = MmsSmsColumns.THREAD_ID + " = " + threadId;