Add support for addressing attachments within a message.

This commit is contained in:
Cody Henthorne
2024-06-14 11:35:52 -04:00
committed by Greyson Parrelli
parent 10922594b3
commit a2fc710261
35 changed files with 181 additions and 66 deletions

View File

@@ -11,6 +11,7 @@ import org.signal.core.util.Base64
import org.thoughtcrime.securesms.blurhash.BlurHash
import org.thoughtcrime.securesms.database.AttachmentTable
import org.thoughtcrime.securesms.stickers.StickerLocator
import java.util.UUID
class ArchivedAttachment : Attachment {
@@ -47,7 +48,8 @@ class ArchivedAttachment : Attachment {
borderless: Boolean,
stickerLocator: StickerLocator?,
gif: Boolean,
quote: Boolean
quote: Boolean,
uuid: UUID?
) : super(
contentType = contentType ?: "",
quote = quote,
@@ -71,7 +73,8 @@ class ArchivedAttachment : Attachment {
stickerLocator = stickerLocator,
blurHash = BlurHash.parseOrNull(blurHash),
audioHash = null,
transformProperties = null
transformProperties = null,
uuid = uuid
) {
this.archiveCdn = archiveCdn ?: Cdn.CDN_3.cdnNumber
this.archiveMediaName = archiveMediaName

View File

@@ -14,6 +14,8 @@ import org.thoughtcrime.securesms.database.AttachmentTable
import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties
import org.thoughtcrime.securesms.stickers.StickerLocator
import org.thoughtcrime.securesms.util.ParcelUtil
import org.whispersystems.signalservice.api.util.UuidUtil
import java.util.UUID
/**
* Note: We have to use our own Parcelable implementation because we need to do custom stuff to preserve
@@ -65,7 +67,9 @@ abstract class Attachment(
@JvmField
val audioHash: AudioHash?,
@JvmField
val transformProperties: TransformProperties?
val transformProperties: TransformProperties?,
@JvmField
val uuid: UUID?
) : Parcelable {
abstract val uri: Uri?
@@ -97,7 +101,8 @@ abstract class Attachment(
stickerLocator = ParcelCompat.readParcelable(parcel, StickerLocator::class.java.classLoader, StickerLocator::class.java),
blurHash = ParcelCompat.readParcelable(parcel, BlurHash::class.java.classLoader, BlurHash::class.java),
audioHash = ParcelCompat.readParcelable(parcel, AudioHash::class.java.classLoader, AudioHash::class.java),
transformProperties = ParcelCompat.readParcelable(parcel, TransformProperties::class.java.classLoader, TransformProperties::class.java)
transformProperties = ParcelCompat.readParcelable(parcel, TransformProperties::class.java.classLoader, TransformProperties::class.java),
uuid = UuidUtil.parseOrNull(parcel.readString())
)
override fun writeToParcel(dest: Parcel, flags: Int) {
@@ -125,6 +130,7 @@ abstract class Attachment(
dest.writeParcelable(blurHash, 0)
dest.writeParcelable(audioHash, 0)
dest.writeParcelable(transformProperties, 0)
dest.writeString(uuid?.toString())
}
override fun describeContents(): Int {

View File

@@ -55,6 +55,7 @@ object AttachmentUploadUtil {
.withResumableUploadSpec(ResumableUploadSpec.from(uploadSpec))
.withCancelationSignal(cancellationSignal)
.withListener(progressListener)
.withUuid(attachment.uuid)
if (MediaUtil.isImageType(attachment.contentType)) {
builder.withBlurHash(getImageBlurHash(context, attachment))

View File

@@ -10,6 +10,7 @@ import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties
import org.thoughtcrime.securesms.mms.PartAuthority
import org.thoughtcrime.securesms.stickers.StickerLocator
import org.thoughtcrime.securesms.util.ParcelUtil
import java.util.UUID
class DatabaseAttachment : Attachment {
@@ -79,7 +80,8 @@ class DatabaseAttachment : Attachment {
archiveThumbnailCdn: Int,
archiveMediaName: String?,
archiveMediaId: String?,
thumbnailRestoreState: AttachmentTable.ThumbnailRestoreState
thumbnailRestoreState: AttachmentTable.ThumbnailRestoreState,
uuid: UUID?
) : super(
contentType = contentType!!,
transferState = transferProgress,
@@ -102,7 +104,8 @@ class DatabaseAttachment : Attachment {
stickerLocator = stickerLocator,
blurHash = blurHash,
audioHash = audioHash,
transformProperties = transformProperties
transformProperties = transformProperties,
uuid = uuid
) {
this.attachmentId = attachmentId
this.mmsId = mmsId

View File

@@ -12,6 +12,7 @@ import org.whispersystems.signalservice.api.messages.SignalServiceAttachment
import org.whispersystems.signalservice.api.util.AttachmentPointerUtil
import org.whispersystems.signalservice.internal.push.DataMessage
import java.util.Optional
import java.util.UUID
class PointerAttachment : Attachment {
@VisibleForTesting
@@ -35,7 +36,8 @@ class PointerAttachment : Attachment {
uploadTimestamp: Long,
caption: String?,
stickerLocator: StickerLocator?,
blurHash: BlurHash?
blurHash: BlurHash?,
uuid: UUID?
) : super(
contentType = contentType,
transferState = transferState,
@@ -59,7 +61,8 @@ class PointerAttachment : Attachment {
stickerLocator = stickerLocator,
blurHash = blurHash,
audioHash = null,
transformProperties = null
transformProperties = null,
uuid = uuid
)
constructor(parcel: Parcel) : super(parcel)
@@ -115,7 +118,8 @@ class PointerAttachment : Attachment {
uploadTimestamp = pointer.get().asPointer().uploadTimestamp,
caption = pointer.get().asPointer().caption.orElse(null),
stickerLocator = stickerLocator,
blurHash = BlurHash.parseOrNull(pointer.get().asPointer().blurHash.orElse(null))
blurHash = BlurHash.parseOrNull(pointer.get().asPointer().blurHash.orElse(null)),
uuid = pointer.get().asPointer().uuid
)
)
}
@@ -152,7 +156,8 @@ class PointerAttachment : Attachment {
uploadTimestamp = thumbnail?.asPointer()?.uploadTimestamp ?: 0,
caption = thumbnail?.asPointer()?.caption?.orElse(null),
stickerLocator = null,
blurHash = null
blurHash = null,
uuid = thumbnail?.asPointer()?.uuid
)
)
}

View File

@@ -4,6 +4,7 @@ import android.net.Uri
import android.os.Parcel
import org.thoughtcrime.securesms.blurhash.BlurHash
import org.thoughtcrime.securesms.database.AttachmentTable
import java.util.UUID
/**
* An attachment that represents where an attachment used to be. Useful when you need to know that
@@ -35,7 +36,8 @@ class TombstoneAttachment : Attachment {
stickerLocator = null,
blurHash = null,
audioHash = null,
transformProperties = null
transformProperties = null,
uuid = null
)
constructor(
@@ -49,7 +51,8 @@ class TombstoneAttachment : Attachment {
voiceNote: Boolean = false,
borderless: Boolean = false,
gif: Boolean = false,
quote: Boolean
quote: Boolean,
uuid: UUID?
) : super(
contentType = contentType ?: "",
quote = quote,
@@ -73,7 +76,8 @@ class TombstoneAttachment : Attachment {
stickerLocator = null,
blurHash = BlurHash.parseOrNull(blurHash),
audioHash = null,
transformProperties = null
transformProperties = null,
uuid = uuid
)
constructor(parcel: Parcel) : super(parcel)

View File

@@ -8,6 +8,7 @@ import org.thoughtcrime.securesms.blurhash.BlurHash
import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties
import org.thoughtcrime.securesms.stickers.StickerLocator
import java.util.Objects
import java.util.UUID
class UriAttachment : Attachment {
@@ -87,7 +88,8 @@ class UriAttachment : Attachment {
stickerLocator = stickerLocator,
blurHash = blurHash,
audioHash = audioHash,
transformProperties = transformProperties
transformProperties = transformProperties,
uuid = UUID.randomUUID()
) {
uri = Objects.requireNonNull(dataUri)
}