From 8c76cead58973f2ae012ae36e96e6adf91bc10f6 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Wed, 12 Oct 2022 13:35:38 -0300 Subject: [PATCH] Do not remove onboarding story when disabling stories. --- .../securesms/database/MessageDatabase.java | 1 + .../securesms/database/MmsDatabase.java | 11 +++++++++++ .../securesms/database/SmsDatabase.java | 5 +++++ .../v2/NotificationStateProvider.kt | 7 ++++++- .../story/StoriesPrivacySettingsRepository.kt | 16 ++++++++++++---- 5 files changed, 35 insertions(+), 5 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 ace2a1f06c..2b63e3be37 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java @@ -198,6 +198,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns, public abstract boolean isStory(long messageId); public abstract @NonNull Reader getOutgoingStoriesTo(@NonNull RecipientId recipientId); public abstract @NonNull Reader getAllOutgoingStories(boolean reverse, int limit); + public abstract @NonNull Reader getAllIncomingStoriesExceptOnboarding(); public abstract @NonNull Reader getAllOutgoingStoriesAt(long sentTimestamp); public abstract @NonNull List getOrderedStoryRecipientsAndIds(boolean isOutgoingOnly); public abstract @NonNull Reader getAllStoriesFor(@NonNull RecipientId recipientId, int 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 0f81dde45f..2dbee26cd9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java @@ -635,6 +635,17 @@ public class MmsDatabase extends MessageDatabase { return new Reader(rawQuery(where, null, reverse, limit)); } + @Override + public @NonNull MessageDatabase.Reader getAllIncomingStoriesExceptOnboarding() { + RecipientId onboardingRecipientId = SignalStore.releaseChannelValues().getReleaseChannelRecipientId(); + String where = IS_STORY_CLAUSE + " AND NOT (" + getOutgoingTypeClause() + ")"; + if (onboardingRecipientId != null) { + where += " AND " + RECIPIENT_ID + " != " + onboardingRecipientId.serialize(); + } + + return new Reader(rawQuery(where, null, false, -1L)); + } + @Override public @NonNull MessageDatabase.Reader getAllOutgoingStoriesAt(long sentTimestamp) { String where = IS_STORY_CLAUSE + " AND " + DATE_SENT + " = ? AND (" + getOutgoingTypeClause() + ")"; 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 d4ee508a85..cdb31a26c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -1448,6 +1448,11 @@ public class SmsDatabase extends MessageDatabase { throw new UnsupportedOperationException(); } + @Override + public @NonNull MessageDatabase.Reader getAllIncomingStoriesExceptOnboarding() { + throw new UnsupportedOperationException(); + } + @Override public @NonNull MessageDatabase.Reader getAllOutgoingStoriesAt(long sentTimestamp) { throw new UnsupportedOperationException(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationStateProvider.kt b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationStateProvider.kt index 82b0bfbf66..cd987b3024 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationStateProvider.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationStateProvider.kt @@ -5,6 +5,7 @@ import org.signal.core.util.CursorUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.MmsSmsColumns import org.thoughtcrime.securesms.database.MmsSmsDatabase +import org.thoughtcrime.securesms.database.NoSuchMessageException import org.thoughtcrime.securesms.database.RecipientDatabase import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.MessageId @@ -39,7 +40,11 @@ object NotificationStateProvider { val conversationId = ConversationId.fromMessageRecord(record) val parentRecord = conversationId.groupStoryId?.let { - SignalDatabase.mms.getMessageRecord(it) + try { + SignalDatabase.mms.getMessageRecord(it) + } catch (e : NoSuchMessageException) { + null + } } val hasSelfRepliedToGroupStory = conversationId.groupStoryId?.let { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsRepository.kt index de72a5a4c9..027d4dbd84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsRepository.kt @@ -28,10 +28,18 @@ class StoriesPrivacySettingsRepository { Stories.onStorySettingsChanged(Recipient.self().id) ApplicationDependencies.resetAllNetworkConnections() - SignalDatabase.mms.getAllOutgoingStories(false, -1).use { reader -> - reader.map { record -> record.id } - }.forEach { messageId -> - MessageSender.sendRemoteDelete(messageId, true) + if (!isEnabled) { + SignalDatabase.mms.getAllOutgoingStories(false, -1).use { reader -> + reader.map { record -> record.id } + }.forEach { messageId -> + MessageSender.sendRemoteDelete(messageId, true) + } + + SignalDatabase.mms.allIncomingStoriesExceptOnboarding.use { reader -> + reader.map { record -> record.id } + }.forEach { messageId -> + SignalDatabase.mms.deleteMessage(messageId) + } } }.subscribeOn(Schedulers.io()) }