From 0e06e2de97283edd3393e382879ef4cfb94a6c3b Mon Sep 17 00:00:00 2001 From: Jake McGinty Date: Thu, 10 Sep 2015 16:48:10 -1000 Subject: [PATCH] fix queuing of pending parts that had data already fixes #4061 Closes #4073 // FREEBIE --- .../thoughtcrime/securesms/DatabaseUpgradeActivity.java | 6 +++--- .../thoughtcrime/securesms/components/ThumbnailView.java | 8 ++++---- src/org/thoughtcrime/securesms/database/PartDatabase.java | 7 +++++-- .../securesms/jobs/AttachmentDownloadJob.java | 4 ++++ src/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java | 1 + src/org/thoughtcrime/securesms/mms/ImageSlide.java | 2 +- 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java b/src/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java index 92dab781a6..40733130ff 100644 --- a/src/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java +++ b/src/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java @@ -66,7 +66,7 @@ public class DatabaseUpgradeActivity extends BaseActivity { public static final int PUSH_DECRYPT_SERIAL_ID_VERSION = 131; public static final int MIGRATE_SESSION_PLAINTEXT = 136; public static final int CONTACTS_ACCOUNT_VERSION = 136; - public static final int MEDIA_DOWNLOAD_CONTROLS_VERSION = 149; + public static final int MEDIA_DOWNLOAD_CONTROLS_VERSION = 151; private static final SortedSet UPGRADE_VERSIONS = new TreeSet() {{ add(NO_MORE_KEY_EXCHANGE_PREFIX_VERSION); @@ -233,8 +233,8 @@ public class DatabaseUpgradeActivity extends BaseActivity { final Reader reader = mmsDb.readerFor(masterSecret, mmsDb.getMessage(part.getMmsId())); final MessageRecord record = reader.getNext(); - if (part.getContentLocation() == null) { - Log.w(TAG, "corrected a pending self-sent media part " + part.getPartId() + "."); + if (part.getDataUri() != null) { + Log.w(TAG, "corrected a pending media part " + part.getPartId() + "that already had data."); partDb.setTransferState(part.getMmsId(), part.getPartId(), PartDatabase.TRANSFER_PROGRESS_DONE); } else if (record != null && !record.isOutgoing() && record.isPush()) { Log.w(TAG, "queuing new attachment download job for incoming push part " + part.getPartId() + "."); diff --git a/src/org/thoughtcrime/securesms/components/ThumbnailView.java b/src/org/thoughtcrime/securesms/components/ThumbnailView.java index 3fb3b74ee4..8d37cff54d 100644 --- a/src/org/thoughtcrime/securesms/components/ThumbnailView.java +++ b/src/org/thoughtcrime/securesms/components/ThumbnailView.java @@ -226,7 +226,7 @@ public class ThumbnailView extends FrameLayout { builder = buildPlaceholderGlideRequest(slide); } - if (slide.isInProgress() && !hideControls) { + if (slide.getTransferProgress() != PartDatabase.TRANSFER_PROGRESS_DONE && !hideControls) { return builder; } else { return builder.error(R.drawable.ic_missing_thumbnail_picture); @@ -331,9 +331,9 @@ public class ThumbnailView extends FrameLayout { private class ThumbnailClickDispatcher implements View.OnClickListener { @Override public void onClick(View view) { - if (thumbnailClickListener != null && - slide != null && - slide.getTransferProgress() == PartDatabase.TRANSFER_PROGRESS_DONE) + if (thumbnailClickListener != null && + slide != null && + slide.getPart().getDataUri() != null) { thumbnailClickListener.onClick(view, slide); } diff --git a/src/org/thoughtcrime/securesms/database/PartDatabase.java b/src/org/thoughtcrime/securesms/database/PartDatabase.java index 1d59490593..9c993973d3 100644 --- a/src/org/thoughtcrime/securesms/database/PartDatabase.java +++ b/src/org/thoughtcrime/securesms/database/PartDatabase.java @@ -298,6 +298,11 @@ public class PartDatabase extends Database { if (!cursor.isNull(sizeColumn)) part.setDataSize(cursor.getLong(cursor.getColumnIndexOrThrow(SIZE))); + + int dataColumn = cursor.getColumnIndexOrThrow(DATA); + + if (!cursor.isNull(dataColumn)) + part.setDataUri(PartAuthority.getPartUri(part.getPartId())); } private ContentValues getContentValuesForPart(PduPart part) throws MmsException { @@ -440,8 +445,6 @@ public class PartDatabase extends Database { getPartValues(part, cursor); - part.setDataUri(PartAuthority.getPartUri(part.getPartId())); - return part; } diff --git a/src/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java b/src/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java index 733432acda..01020e8356 100644 --- a/src/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java +++ b/src/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java @@ -71,6 +71,10 @@ public class AttachmentDownloadJob extends MasterSecretJob implements Injectable Log.w(TAG, "part no longer exists."); return; } + if (part.getDataUri() != null) { + Log.w(TAG, "part was already downloaded."); + return; + } Log.w(TAG, "Downloading push part " + partId); diff --git a/src/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/src/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java index 2be79eba48..b8a6cc6e64 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -87,6 +87,7 @@ public class PushGroupSendJob extends PushSendJob implements InjectableType { database.markAsPush(messageId); database.markAsSecure(messageId); database.markAsSent(messageId, "push".getBytes(), 0); + markPartsUploaded(messageId, message.getBody()); } catch (InvalidNumberException | RecipientFormattingException | UndeliverableMessageException e) { Log.w(TAG, e); database.markAsSentFailed(messageId); diff --git a/src/org/thoughtcrime/securesms/mms/ImageSlide.java b/src/org/thoughtcrime/securesms/mms/ImageSlide.java index 87131f2f3b..95fea0352d 100644 --- a/src/org/thoughtcrime/securesms/mms/ImageSlide.java +++ b/src/org/thoughtcrime/securesms/mms/ImageSlide.java @@ -55,7 +55,7 @@ public class ImageSlide extends Slide { @Override public @DrawableRes int getPlaceholderRes(Theme theme) { - return R.drawable.ic_missing_thumbnail_picture; + return 0; } @Override