diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java index 47e5f0019..b525110c1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java @@ -127,6 +127,8 @@ import java.util.Set; import java.util.UUID; import java.util.function.Function; +import kotlin.Unit; + import static org.thoughtcrime.securesms.contactshare.Contact.Avatar; public class MessageTable extends DatabaseTable implements MessageTypes, RecipientIdDatabaseReference, ThreadIdDatabaseReference { @@ -3110,6 +3112,22 @@ public class MessageTable extends DatabaseTable implements MessageTypes, Recipie ApplicationDependencies.getDatabaseObserver().notifyScheduledMessageObservers(threadId); } + public void deleteScheduledMessages(@NonNull RecipientId recipientId) { + Log.d(TAG, "deleteScheduledMessages(" + recipientId + ")"); + Long threadId = SignalDatabase.threads().getThreadIdFor(recipientId); + if (threadId != null) { + SQLiteDatabaseExtensionsKt.withinTransaction(getWritableDatabase(), d -> { + List scheduledMessages = getScheduledMessagesInThread(threadId); + for (MessageRecord record : scheduledMessages) { + deleteScheduledMessage(record.getId()); + } + return Unit.INSTANCE; + }); + } else { + Log.i(TAG, "No thread exists for " + recipientId); + } + } + public void deleteThread(long threadId) { Log.d(TAG, "deleteThread(" + threadId + ")"); Set singleThreadSet = new HashSet<>(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java index c039e17a7..c2adf2ec4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java @@ -134,6 +134,8 @@ public final class GroupManager { throw new GroupChangeFailedException(); } } + + SignalDatabase.recipients().getByGroupId(groupId).ifPresent(id -> SignalDatabase.messages().deleteScheduledMessages(id)); } @WorkerThread