From 8eb3a1906ea248c9728ecc7a2b6606302b3bb124 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 10 Nov 2022 10:47:14 -0500 Subject: [PATCH] Fully delete remotely deleted stories after sending or on receive. --- .../securesms/database/MessageDatabase.java | 1 + .../thoughtcrime/securesms/database/MmsDatabase.java | 11 +++++++++++ .../thoughtcrime/securesms/database/SmsDatabase.java | 5 +++++ .../securesms/database/StorySendsDatabase.kt | 5 ++++- .../securesms/jobs/RemoteDeleteSendJob.java | 7 +++++-- .../securesms/messages/MessageContentProcessor.java | 5 ++++- .../thoughtcrime/securesms/util/MessageRecordUtil.kt | 3 +++ 7 files changed, 33 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java index 15ed6f43b..516e6de0c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java @@ -189,6 +189,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns, abstract void deleteThreads(@NonNull Set threadIds); abstract void deleteAllThreads(); abstract void deleteAbandonedMessages(); + public abstract void deleteRemotelyDeletedStory(long messageId); public abstract List getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java index 1e3891b80..3070570a6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java @@ -2668,6 +2668,17 @@ public class MmsDatabase extends MessageDatabase { } } + @Override + public void deleteRemotelyDeletedStory(long messageId) { + try (Cursor cursor = getMessageCursor(messageId)) { + if (cursor.moveToFirst() && CursorUtil.requireBoolean(cursor, REMOTE_DELETED)) { + deleteMessage(messageId); + } else { + Log.i(TAG, "Unable to delete remotely deleted story: " + messageId); + } + } + } + @Override public List getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit) { String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " + diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java index 5799ba87e..8f055a54e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -1647,6 +1647,11 @@ public class SmsDatabase extends MessageDatabase { } } + @Override + public void deleteRemotelyDeletedStory(long messageId) { + throw new UnsupportedOperationException(); + } + @Override public List getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit) { String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " + diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/StorySendsDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/StorySendsDatabase.kt index 5ffdbf4ca..7440054a8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/StorySendsDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/StorySendsDatabase.kt @@ -357,7 +357,10 @@ class StorySendsDatabase(context: Context, databaseHelper: SignalDatabase) : Dat } val messagesWithoutAnyReceivers = localRows.map { it.messageId }.distinct() - remoteRows.map { it.messageId }.distinct() - messagesWithoutAnyReceivers.forEach { SignalDatabase.mms.markAsRemoteDelete(it) } + messagesWithoutAnyReceivers.forEach { + SignalDatabase.mms.markAsRemoteDelete(it) + SignalDatabase.mms.deleteRemotelyDeletedStory(it) + } writableDatabase.setTransactionSuccessful() } finally { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java index 505da7691..0fafe2e10 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java @@ -15,7 +15,6 @@ import org.thoughtcrime.securesms.database.model.DistributionListId; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.MmsMessageRecord; -import org.thoughtcrime.securesms.database.model.StoryType; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.jobmanager.Data; @@ -28,12 +27,12 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.transport.RetryLaterException; import org.thoughtcrime.securesms.util.GroupUtil; +import org.thoughtcrime.securesms.util.MessageRecordUtil; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.signalservice.api.crypto.ContentHint; import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; import org.whispersystems.signalservice.api.messages.SendMessageResult; import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; -import org.whispersystems.signalservice.api.push.DistributionId; import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; import java.io.IOException; @@ -190,6 +189,10 @@ public class RemoteDeleteSendJob extends BaseJob { if (recipients.isEmpty()) { db.markAsSent(messageId, true); + + if (MessageRecordUtil.isStory(message)) { + db.deleteRemotelyDeletedStory(messageId); + } } else { Log.w(TAG, "Still need to send to " + recipients.size() + " recipients. Retrying."); throw new RetryLaterException(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java index 841de6108..f539fa251 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java @@ -100,7 +100,6 @@ import org.thoughtcrime.securesms.jobs.SenderKeyDistributionSendJob; import org.thoughtcrime.securesms.jobs.StickerPackDownloadJob; import org.thoughtcrime.securesms.jobs.TrimThreadJob; import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.keyvalue.StoryValues; import org.thoughtcrime.securesms.linkpreview.LinkPreview; import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil; import org.thoughtcrime.securesms.mms.IncomingMediaMessage; @@ -136,6 +135,7 @@ import org.thoughtcrime.securesms.util.GroupUtil; import org.thoughtcrime.securesms.util.IdentityUtil; import org.thoughtcrime.securesms.util.LinkUtil; import org.thoughtcrime.securesms.util.MediaUtil; +import org.thoughtcrime.securesms.util.MessageRecordUtil; import org.thoughtcrime.securesms.util.RemoteDeleteUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; @@ -1010,6 +1010,9 @@ public final class MessageContentProcessor { if (targetMessage != null && RemoteDeleteUtil.isValidReceive(targetMessage, senderRecipient, content.getServerReceivedTimestamp())) { MessageDatabase db = targetMessage.isMms() ? SignalDatabase.mms() : SignalDatabase.sms(); db.markAsRemoteDelete(targetMessage.getId()); + if (MessageRecordUtil.isStory(targetMessage)) { + db.deleteRemotelyDeletedStory(targetMessage.getId()); + } ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.fromMessageRecord(targetMessage), false); return new MessageId(targetMessage.getId(), targetMessage.isMms()); } else if (targetMessage == null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/MessageRecordUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/util/MessageRecordUtil.kt index 2662379a6..ad2aedc36 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/MessageRecordUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/MessageRecordUtil.kt @@ -44,6 +44,9 @@ fun MessageRecord.hasThumbnail(): Boolean = fun MessageRecord.isStoryReaction(): Boolean = isMms && MmsSmsColumns.Types.isStoryReaction((this as MmsMessageRecord).type) +fun MessageRecord.isStory(): Boolean = + isMms && (this as MmsMessageRecord).storyType.isStory + fun MessageRecord.isPaymentActivationRequest(): Boolean = isMms && MmsSmsColumns.Types.isRequestToActivatePayments((this as MmsMessageRecord).type)