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 67adb16078..e7a10ba40b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java @@ -50,6 +50,7 @@ import org.thoughtcrime.securesms.database.SentStorySyncManifest; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.StickerDatabase; import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord; import org.thoughtcrime.securesms.database.model.Mention; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.MessageLogEntry; @@ -1317,15 +1318,28 @@ public final class MessageContentProcessor { private void handleSynchronizeViewedMessage(@NonNull List viewedMessages, long envelopeTimestamp) { log(envelopeTimestamp, "Synchronize view message. Count: " + viewedMessages.size() + ", Timestamps: " + Stream.of(viewedMessages).map(ViewedMessage::getTimestamp).toList()); - List toMarkViewed = Stream.of(viewedMessages) - .map(message -> { - RecipientId author = Recipient.externalPush(message.getSender()).getId(); - return SignalDatabase.mmsSms().getMessageFor(message.getTimestamp(), author); - }) - .filter(message -> message != null && message.isMms()) + List records = Stream.of(viewedMessages) + .map(message -> { + RecipientId author = Recipient.externalPush(message.getSender()).getId(); + return SignalDatabase.mmsSms().getMessageFor(message.getTimestamp(), author); + }) + .filter(message -> message != null && message.isMms()) + .toList(); + + List toMarkViewed = Stream.of(records) .map(MessageRecord::getId) .toList(); + List toEnqueueDownload = Stream.of(records) + .filter(MessageRecord::isMms) + .map(it -> (MediaMmsMessageRecord) it) + .filter(it -> it.getStoryType().isStory() && !it.getStoryType().isTextStory()) + .toList(); + + for (final MediaMmsMessageRecord mediaMmsMessageRecord : toEnqueueDownload) { + Stories.enqueueAttachmentsFromStoryForDownloadSync(mediaMmsMessageRecord, false); + } + SignalDatabase.mms().setIncomingMessagesViewed(toMarkViewed); SignalDatabase.mms().setOutgoingGiftsRevealed(toMarkViewed); diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt index 1e53151ea2..b57298371f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt @@ -154,8 +154,9 @@ object Stories { }.subscribeOn(Schedulers.io()) } + @JvmStatic @WorkerThread - private fun enqueueAttachmentsFromStoryForDownloadSync(record: MmsMessageRecord, ignoreAutoDownloadConstraints: Boolean) { + fun enqueueAttachmentsFromStoryForDownloadSync(record: MmsMessageRecord, ignoreAutoDownloadConstraints: Boolean) { SignalDatabase.attachments.getAttachmentsForMessage(record.id).filterNot { it.isSticker }.forEach { val job = AttachmentDownloadJob(record.id, it.attachmentId, ignoreAutoDownloadConstraints) ApplicationDependencies.getJobManager().add(job)