From 7cc67daf80603e204fb0c669607aab0623e6bf18 Mon Sep 17 00:00:00 2001 From: Anton Chekulaev Date: Mon, 31 Aug 2020 19:46:05 +1000 Subject: [PATCH] DB attachment record gets properly updated on upload error. Individual loading indicators per conversation item thumbnail. --- res/layout/conversation_item_thumbnail.xml | 11 ---------- res/layout/thumbnail_view.xml | 9 ++++++++ .../components/AlbumThumbnailView.java | 7 ++----- .../components/ConversationItemThumbnail.java | 21 ++++--------------- .../securesms/components/ThumbnailView.java | 12 ++++++++--- .../database/AttachmentDatabase.java | 11 +++++++++- .../securesms/jobs/AttachmentUploadJob.java | 19 +++++++++++------ 7 files changed, 47 insertions(+), 43 deletions(-) diff --git a/res/layout/conversation_item_thumbnail.xml b/res/layout/conversation_item_thumbnail.xml index fe438060da..bff1a90fa8 100644 --- a/res/layout/conversation_item_thumbnail.xml +++ b/res/layout/conversation_item_thumbnail.xml @@ -45,15 +45,4 @@ app:footer_text_color="@android:color/white" app:footer_icon_color="@android:color/white"/> - - diff --git a/res/layout/thumbnail_view.xml b/res/layout/thumbnail_view.xml index a9f979014c..96ec33477e 100644 --- a/res/layout/thumbnail_view.xml +++ b/res/layout/thumbnail_view.xml @@ -22,6 +22,15 @@ android:src="@drawable/ic_caption_28" android:visibility="gone" /> + + insertAttachmentsForMessage(long mmsId, @NonNull List attachments, @NonNull List quoteAttachment) throws MmsException { diff --git a/src/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java b/src/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java index 766e8f20f6..a356deabec 100644 --- a/src/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java +++ b/src/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java @@ -87,13 +87,20 @@ public class AttachmentUploadJob extends BaseJob implements InjectableType { // Only upload attachment if necessary if (databaseAttachment.getUrl().isEmpty()) { - MediaConstraints mediaConstraints = MediaConstraints.getPushMediaConstraints(); - Attachment scaledAttachment = scaleAndStripExif(database, mediaConstraints, databaseAttachment); - SignalServiceAttachment localAttachment = getAttachmentFor(scaledAttachment); - SignalServiceAttachmentPointer remoteAttachment = messageSender.uploadAttachment(localAttachment.asStream(), databaseAttachment.isSticker(), new SignalServiceAddress(destination.serialize())); - Attachment attachment = PointerAttachment.forPointer(Optional.of(remoteAttachment), null, databaseAttachment.getFastPreflightId()).get(); + final Attachment attachment; + try { + MediaConstraints mediaConstraints = MediaConstraints.getPushMediaConstraints(); + Attachment scaledAttachment = scaleAndStripExif(database, mediaConstraints, databaseAttachment); + SignalServiceAttachment localAttachment = getAttachmentFor(scaledAttachment); + SignalServiceAttachmentPointer remoteAttachment = messageSender.uploadAttachment(localAttachment.asStream(), databaseAttachment.isSticker(), new SignalServiceAddress(destination.serialize())); + attachment = PointerAttachment.forPointer(Optional.of(remoteAttachment), null, databaseAttachment.getFastPreflightId()).get(); + } catch (Exception e) { + // On any error make sure we mark the related DB record's transfer state as failed. + database.updateAttachmentAfterUploadFailed(databaseAttachment.getAttachmentId()); + throw e; + } - database.updateAttachmentAfterUpload(databaseAttachment.getAttachmentId(), attachment); + database.updateAttachmentAfterUploadSucceeded(databaseAttachment.getAttachmentId(), attachment); } }