Update to the latest backup tests.

This commit is contained in:
Greyson Parrelli
2024-12-03 09:59:08 -05:00
parent c12d577e8b
commit 548da6a09d
19 changed files with 60 additions and 45 deletions

View File

@@ -80,6 +80,7 @@ import org.thoughtcrime.securesms.payments.FailureReason
import org.thoughtcrime.securesms.payments.State
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.JsonUtils
import org.thoughtcrime.securesms.util.MediaUtil
import org.whispersystems.signalservice.api.push.ServiceId.ACI
import org.whispersystems.signalservice.api.util.UuidUtil
import org.whispersystems.signalservice.api.util.toByteArray
@@ -787,7 +788,18 @@ private fun BackupMessageRecord.toRemoteQuote(mediaArchiveEnabled: Boolean, atta
return null
}
val type = QuoteModel.Type.fromCode(this.quoteType)
val localType = QuoteModel.Type.fromCode(this.quoteType)
val remoteType = when (localType) {
QuoteModel.Type.NORMAL -> {
if (attachments?.any { it.contentType == MediaUtil.VIEW_ONCE } == true) {
Quote.Type.VIEW_ONCE
} else {
Quote.Type.NORMAL
}
}
QuoteModel.Type.GIFT_BADGE -> Quote.Type.GIFT_BADGE
}
return Quote(
targetSentTimestamp = this.quoteTargetSentTimestamp.takeIf { !this.quoteMissing && it != MessageTable.QUOTE_TARGET_MISSING_ID },
authorId = this.quoteAuthor,
@@ -797,11 +809,12 @@ private fun BackupMessageRecord.toRemoteQuote(mediaArchiveEnabled: Boolean, atta
bodyRanges = this.quoteBodyRanges?.toRemoteBodyRanges() ?: emptyList()
)
},
attachments = attachments?.toRemoteQuoteAttachments(mediaArchiveEnabled) ?: emptyList(),
type = when (type) {
QuoteModel.Type.NORMAL -> Quote.Type.NORMAL
QuoteModel.Type.GIFT_BADGE -> Quote.Type.GIFT_BADGE
}
attachments = if (remoteType == Quote.Type.VIEW_ONCE) {
emptyList()
} else {
attachments?.toRemoteQuoteAttachments(mediaArchiveEnabled) ?: emptyList()
},
type = remoteType
)
}
@@ -847,7 +860,7 @@ private fun List<DatabaseAttachment>.toRemoteQuoteAttachments(mediaArchiveEnable
mediaArchiveEnabled = mediaArchiveEnabled,
flagOverride = MessageAttachment.Flag.NONE,
contentTypeOverride = "image/jpeg"
).takeUnless { it.pointer?.invalidAttachmentLocator != null }
)
)
}
}

View File

@@ -18,6 +18,7 @@ import org.signal.core.util.toInt
import org.signal.core.util.update
import org.thoughtcrime.securesms.attachments.Attachment
import org.thoughtcrime.securesms.attachments.PointerAttachment
import org.thoughtcrime.securesms.attachments.TombstoneAttachment
import org.thoughtcrime.securesms.backup.v2.ImportState
import org.thoughtcrime.securesms.backup.v2.proto.BodyRange
import org.thoughtcrime.securesms.backup.v2.proto.ChatItem
@@ -70,6 +71,7 @@ import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.stickers.StickerLocator
import org.thoughtcrime.securesms.util.JsonUtils
import org.thoughtcrime.securesms.util.MediaUtil
import org.whispersystems.signalservice.api.payments.Money
import org.whispersystems.signalservice.api.push.ServiceId
import org.whispersystems.signalservice.api.util.UuidUtil
@@ -396,9 +398,7 @@ class ChatItemArchiveImporter(
)
}?.let { listOf(it) } ?: emptyList()
val quoteAttachments: List<Attachment> = this.standardMessage.quote?.attachments?.mapNotNull {
it.toLocalAttachment()
} ?: emptyList()
val quoteAttachments: List<Attachment> = this.standardMessage.quote?.toLocalAttachments() ?: emptyList()
val hasAttachments = attachments.isNotEmpty() || linkPreviewAttachments.isNotEmpty() || quoteAttachments.isNotEmpty() || longTextAttachments.isNotEmpty()
@@ -980,26 +980,30 @@ class ChatItemArchiveImporter(
?: false
}
private fun Quote.QuotedAttachment.toLocalAttachment(): Attachment? {
// TODO [backup] quote status not passed through?
val thumbnail = this.thumbnail?.toLocalAttachment()
if (thumbnail != null) {
return thumbnail
private fun Quote.toLocalAttachments(): List<Attachment> {
if (this.type == Quote.Type.VIEW_ONCE) {
return listOf(TombstoneAttachment(contentType = MediaUtil.VIEW_ONCE, quote = true))
}
if (this.contentType == null) {
return null
}
return attachments.mapNotNull { attachment ->
val thumbnail = attachment.thumbnail?.toLocalAttachment(quote = true)
// TODO [backup] Need to do the normal ArchiveAttachment thing -- not sure why the conversion to a pointer
return PointerAttachment.forPointer(
quotedAttachment = DataMessage.Quote.QuotedAttachment(
contentType = this.contentType,
fileName = this.fileName,
thumbnail = null
)
).orNull()
if (thumbnail != null) {
return@mapNotNull thumbnail
}
if (attachment.contentType == null) {
return@mapNotNull null
}
return@mapNotNull PointerAttachment.forPointer(
quotedAttachment = DataMessage.Quote.QuotedAttachment(
contentType = attachment.contentType,
fileName = attachment.fileName,
thumbnail = null
)
).orNull()
}
}
private fun Sticker?.toLocalAttachment(): Attachment? {
@@ -1030,16 +1034,17 @@ class ChatItemArchiveImporter(
)
}
private fun MessageAttachment.toLocalAttachment(): Attachment? {
private fun MessageAttachment.toLocalAttachment(quote: Boolean = false, contentType: String? = pointer?.contentType): Attachment? {
return pointer?.toLocalAttachment(
importState = importState,
voiceNote = flag == MessageAttachment.Flag.VOICE_MESSAGE,
gif = flag == MessageAttachment.Flag.GIF,
borderless = flag == MessageAttachment.Flag.BORDERLESS,
wasDownloaded = wasDownloaded,
contentType = pointer.contentType,
contentType = contentType,
fileName = pointer.fileName,
uuid = clientUuid
uuid = clientUuid,
quote = quote
)
}

View File

@@ -38,7 +38,8 @@ fun FilePointer?.toLocalAttachment(
stickerLocator: StickerLocator? = null,
contentType: String? = this?.contentType,
fileName: String? = this?.fileName,
uuid: ByteString? = null
uuid: ByteString? = null,
quote: Boolean = false
): Attachment? {
if (this == null) return null
@@ -82,7 +83,7 @@ fun FilePointer?.toLocalAttachment(
voiceNote = voiceNote,
borderless = borderless,
gif = gif,
quote = false,
quote = quote,
stickerLocator = stickerLocator,
uuid = UuidUtil.fromByteStringOrNull(uuid)
)
@@ -108,7 +109,7 @@ fun FilePointer?.toLocalAttachment(
voiceNote = voiceNote,
borderless = borderless,
gif = gif,
quote = false,
quote = quote,
stickerLocator = stickerLocator,
uuid = UuidUtil.fromByteStringOrNull(uuid),
fileName = fileName

View File

@@ -1519,14 +1519,10 @@ class AttachmentTable(
val insertedAttachments: MutableMap<Attachment, AttachmentId> = mutableMapOf()
for (attachment in attachments) {
val attachmentId = if (attachment.uri != null) {
insertAttachmentWithData(mmsId, attachment, attachment.quote)
} else {
if (attachment is ArchivedAttachment) {
insertArchivedAttachment(mmsId, attachment, attachment.quote)
} else {
insertUndownloadedAttachment(mmsId, attachment, attachment.quote)
}
val attachmentId = when {
attachment.uri != null -> insertAttachmentWithData(mmsId, attachment, attachment.quote)
attachment is ArchivedAttachment -> insertArchivedAttachment(mmsId, attachment, attachment.quote)
else -> insertUndownloadedAttachment(mmsId, attachment, attachment.quote)
}
insertedAttachments[attachment] = attachmentId
@@ -1535,10 +1531,10 @@ class AttachmentTable(
try {
for (attachment in quoteAttachment) {
val attachmentId = if (attachment.uri != null) {
insertAttachmentWithData(mmsId, attachment, true)
} else {
insertUndownloadedAttachment(mmsId, attachment, true)
val attachmentId = when {
attachment.uri != null -> insertAttachmentWithData(mmsId, attachment, true)
attachment is ArchivedAttachment -> insertArchivedAttachment(mmsId, attachment, true)
else -> insertUndownloadedAttachment(mmsId, attachment, true)
}
insertedAttachments[attachment] = attachmentId