From 105c8c974566f536dc0740bffc208cfc0a36c34d Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 21 Jan 2021 14:33:32 -0500 Subject: [PATCH] Fix issue where forwarded link previews weren't marked uploaded. --- .../securesms/jobs/MmsSendJob.java | 2 +- .../securesms/jobs/PushGroupSendJob.java | 2 +- .../securesms/jobs/PushMediaSendJob.java | 2 +- .../thoughtcrime/securesms/jobs/SendJob.java | 20 ++++++++++++++++++- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java index 39c80c678..ea04fd585 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java @@ -141,7 +141,7 @@ public final class MmsSendJob extends SendJob { final MmsSendResult result = getSendResult(sendConf, pdu); database.markAsSent(messageId, false); - markAttachmentsUploaded(messageId, message.getAttachments()); + markAttachmentsUploaded(messageId, message); Log.i(TAG, "Sent message: " + messageId); } catch (UndeliverableMessageException | IOException e) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java index cb925e210..176522878 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -232,7 +232,7 @@ public final class PushGroupSendJob extends PushSendJob { if (existingNetworkFailures.isEmpty() && networkFailures.isEmpty() && identityMismatches.isEmpty() && existingIdentityMismatches.isEmpty()) { database.markAsSent(messageId, true); - markAttachmentsUploaded(messageId, message.getAttachments()); + markAttachmentsUploaded(messageId, message); if (message.getExpiresIn() > 0 && !message.isExpirationUpdate()) { database.markExpireStarted(messageId); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java index 243801e92..476cd54cd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java @@ -129,7 +129,7 @@ public class PushMediaSendJob extends PushSendJob { boolean unidentified = deliver(message); database.markAsSent(messageId, true); - markAttachmentsUploaded(messageId, message.getAttachments()); + markAttachmentsUploaded(messageId, message); database.markUnidentified(messageId, unidentified); if (recipient.isSelf()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java index a785cc588..324e7cff2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java @@ -2,15 +2,23 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import com.annimon.stream.Stream; + import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.BuildConfig; import org.thoughtcrime.securesms.TextSecureExpiredException; import org.thoughtcrime.securesms.attachments.Attachment; +import org.thoughtcrime.securesms.contactshare.Contact; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; +import org.thoughtcrime.securesms.linkpreview.LinkPreview; +import org.thoughtcrime.securesms.mms.OutgoingMediaMessage; +import org.thoughtcrime.securesms.util.Util; +import java.lang.reflect.Array; +import java.util.LinkedList; import java.util.List; public abstract class SendJob extends BaseJob { @@ -37,7 +45,17 @@ public abstract class SendJob extends BaseJob { protected abstract void onSend() throws Exception; - protected void markAttachmentsUploaded(long messageId, @NonNull List attachments) { + protected void markAttachmentsUploaded(long messageId, @NonNull OutgoingMediaMessage message) { + List attachments = new LinkedList<>(); + + attachments.addAll(message.getAttachments()); + attachments.addAll(Stream.of(message.getLinkPreviews()).map(lp -> lp.getThumbnail().orNull()).withoutNulls().toList()); + attachments.addAll(Stream.of(message.getSharedContacts()).map(Contact::getAvatarAttachment).withoutNulls().toList()); + + if (message.getOutgoingQuote() != null) { + attachments.addAll(message.getOutgoingQuote().getAttachments()); + } + AttachmentDatabase database = DatabaseFactory.getAttachmentDatabase(context); for (Attachment attachment : attachments) {