From 549ef9dabc9574812c0eaafe5d448459f562c949 Mon Sep 17 00:00:00 2001 From: Nicholas Tinsley Date: Tue, 2 Jan 2024 17:49:16 -0500 Subject: [PATCH] Revert "Merge database writes for attachment compression." This reverts commit c50993bbf7c4a9e10a253f8d234c621ededffc47. --- .../securesms/database/AttachmentTable.java | 21 +++++-------------- .../jobs/AttachmentCompressionJob.java | 14 +++++++++---- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.java b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.java index f34360c3e3..55e782f23b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.java @@ -886,13 +886,11 @@ public class AttachmentTable extends DatabaseTable { */ public void updateAttachmentData(@NonNull DatabaseAttachment databaseAttachment, @NonNull MediaStream mediaStream, - boolean onlyModifyThisAttachment, - boolean withFastStart) + boolean onlyModifyThisAttachment) throws MmsException, IOException { - AttachmentId attachmentId = databaseAttachment.getAttachmentId(); - SQLiteDatabase database = databaseHelper.getSignalWritableDatabase(); - DataInfo oldDataInfo = getAttachmentDataFileInfo(attachmentId, DATA); + SQLiteDatabase database = databaseHelper.getSignalWritableDatabase(); + DataInfo oldDataInfo = getAttachmentDataFileInfo(databaseAttachment.getAttachmentId(), DATA); if (oldDataInfo == null) { throw new MmsException("No attachment data found!"); @@ -912,15 +910,7 @@ public class AttachmentTable extends DatabaseTable { database.beginTransaction(); try { - TransformProperties transformProperties = databaseAttachment.getTransformProperties(); - - dataInfo = deduplicateAttachment(dataInfo, attachmentId, transformProperties); - - transformProperties = transformProperties.withSkipTransform(); - - if (withFastStart) { - transformProperties = transformProperties.withMp4Faststart(); - } + dataInfo = deduplicateAttachment(dataInfo, databaseAttachment.getAttachmentId(), databaseAttachment.getTransformProperties()); ContentValues contentValues = new ContentValues(); contentValues.put(SIZE, dataInfo.length); @@ -930,10 +920,9 @@ public class AttachmentTable extends DatabaseTable { contentValues.put(DATA, dataInfo.file.getAbsolutePath()); contentValues.put(DATA_RANDOM, dataInfo.random); contentValues.put(DATA_HASH, dataInfo.hash); - contentValues.put(TRANSFORM_PROPERTIES, transformProperties.serialize()); int updateCount = updateAttachmentAndMatchingHashes(database, - attachmentId, + databaseAttachment.getAttachmentId(), isSingleUseOfData ? dataInfo.hash : oldDataInfo.hash, contentValues); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java index 8c5a1f5d35..e5ff3861d0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java @@ -7,6 +7,7 @@ import android.net.Uri; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; + import androidx.media3.common.MimeTypes; import org.greenrobot.eventbus.EventBus; @@ -22,8 +23,8 @@ import org.thoughtcrime.securesms.crypto.ModernEncryptingPartOutputStream; import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.events.PartProgressEvent; -import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JsonJobData; +import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader; import org.thoughtcrime.securesms.mms.MediaConstraints; @@ -36,6 +37,7 @@ import org.thoughtcrime.securesms.util.BitmapDecodingException; import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.ImageCompressionUtil; import org.thoughtcrime.securesms.util.MediaUtil; +import org.thoughtcrime.securesms.util.MemoryFileDescriptor; import org.thoughtcrime.securesms.util.MemoryFileDescriptor.MemoryFileException; import org.thoughtcrime.securesms.video.InMemoryTranscoder; import org.thoughtcrime.securesms.video.StreamingTranscoder; @@ -170,8 +172,9 @@ public final class AttachmentCompressionJob extends BaseJob { } else if (constraints.canResize(attachment)) { Log.i(TAG, "Compressing image."); try (MediaStream converted = compressImage(context, attachment, constraints)) { - attachmentDatabase.updateAttachmentData(attachment, converted, false, false); + attachmentDatabase.updateAttachmentData(attachment, converted, false); } + attachmentDatabase.markAttachmentAsTransformed(attachmentId, false); } else if (constraints.isSatisfied(context, attachment)) { Log.i(TAG, "Not compressing."); attachmentDatabase.markAttachmentAsTransformed(attachmentId, false); @@ -247,7 +250,7 @@ public final class AttachmentCompressionJob extends BaseJob { 100)); try (MediaStream mediaStream = new MediaStream(ModernDecryptingPartInputStream.createFor(attachmentSecret, file, 0), MimeTypes.VIDEO_MP4, 0, 0)) { - attachmentDatabase.updateAttachmentData(attachment, mediaStream, true, false); + attachmentDatabase.updateAttachmentData(attachment, mediaStream, true); } } finally { if (!file.delete()) { @@ -255,6 +258,8 @@ public final class AttachmentCompressionJob extends BaseJob { } } + attachmentDatabase.markAttachmentAsTransformed(attachment.getAttachmentId(), false); + return Objects.requireNonNull(attachmentDatabase.getAttachment(attachment.getAttachmentId())); } else { Log.i(TAG, "Transcode was not required"); @@ -273,7 +278,8 @@ public final class AttachmentCompressionJob extends BaseJob { 100, percent)); }, cancelationSignal)) { - attachmentDatabase.updateAttachmentData(attachment, mediaStream, true, mediaStream.getFaststart()); + attachmentDatabase.updateAttachmentData(attachment, mediaStream, true); + attachmentDatabase.markAttachmentAsTransformed(attachment.getAttachmentId(), mediaStream.getFaststart()); } eventBus.postSticky(new PartProgressEvent(attachment,