diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachmentProvider.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachmentProvider.kt index 86a2d79db..b65366f94 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachmentProvider.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachmentProvider.kt @@ -9,7 +9,6 @@ import org.session.libsession.messaging.sending_receiving.attachments.* import org.session.libsession.messaging.threads.Address import org.session.libsession.messaging.utilities.DotNetAPI import org.session.libsession.utilities.Util -import org.session.libsession.utilities.Util.toIntExact import org.session.libsignal.libsignal.util.guava.Optional import org.session.libsignal.service.api.messages.SignalServiceAttachment import org.session.libsignal.service.api.messages.SignalServiceAttachmentPointer @@ -90,6 +89,11 @@ class DatabaseAttachmentProvider(context: Context, helper: SQLCipherOpenHelper) } } + override fun getLinkPreviewAttachmentIDFor(messageID: Long): Long? { + val message = DatabaseFactory.getMmsDatabase(context).getOutgoingMessage(messageID) + return message.linkPreviews.firstOrNull()?.attachmentId?.rowId + } + override fun insertAttachment(messageId: Long, attachmentId: Long, stream: InputStream) { val attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context) attachmentDatabase.insertAttachmentsForPlaceholder(messageId, AttachmentId(attachmentId, 0), stream) @@ -216,7 +220,7 @@ fun DatabaseAttachment.toSignalAttachmentPointer(): SignalServiceAttachmentPoint SignalServiceAttachmentPointer(id, contentType, key, - Optional.of(toIntExact(size)), + Optional.of(Util.toIntExact(size)), Optional.absent(), width, height, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java index dd39bb931..887ea913b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java @@ -196,15 +196,6 @@ public class AttachmentDatabase extends Database { } } - public boolean containsStickerPackId(@NonNull String stickerPackId) { - String selection = STICKER_PACK_ID + " = ?"; - String[] args = new String[] { stickerPackId }; - - try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, selection, args, null, null, "1")) { - return cursor != null && cursor.moveToFirst(); - } - } - public void setTransferProgressFailed(AttachmentId attachmentId, long mmsId) throws MmsException { diff --git a/libsession/src/main/java/org/session/libsession/database/MessageDataProvider.kt b/libsession/src/main/java/org/session/libsession/database/MessageDataProvider.kt index a61d32653..5d925b82c 100644 --- a/libsession/src/main/java/org/session/libsession/database/MessageDataProvider.kt +++ b/libsession/src/main/java/org/session/libsession/database/MessageDataProvider.kt @@ -36,5 +36,6 @@ interface MessageDataProvider { fun getMessageBodyFor(messageID: Long): String fun getAttachmentIDsFor(messageID: Long): List + fun getLinkPreviewAttachmentIDFor(messageID: Long): Long? } \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt index 450c290fc..d23aed884 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt @@ -32,7 +32,11 @@ class MessageSendJob(val message: Message, val destination: Destination) : Job { val message = message as? VisibleMessage message?.let { if(!messageDataProvider.isOutgoingMessage(message.sentTimestamp!!)) return // The message has been deleted - val attachments = message.attachmentIDs.mapNotNull { messageDataProvider.getDatabaseAttachment(it) } + val attachmentIDs = mutableListOf() + attachmentIDs.addAll(message.attachmentIDs) + message.quote?.let { it.attachmentID?.let { attachmentID -> attachmentIDs.add(attachmentID) } } + message.linkPreview?.let { it.attachmentID?.let { attachmentID -> attachmentIDs.add(attachmentID) } } + val attachments = attachmentIDs.mapNotNull { messageDataProvider.getDatabaseAttachment(it) } val attachmentsToUpload = attachments.filter { it.url.isNullOrEmpty() } attachmentsToUpload.forEach { if (MessagingConfiguration.shared.storage.getAttachmentUploadJob(it.attachmentId.rowId) != null) { diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/LinkPreview.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/LinkPreview.kt index d48681355..ddfb39717 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/LinkPreview.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/LinkPreview.kt @@ -53,8 +53,10 @@ class LinkPreview() { title?.let { linkPreviewProto.title = title } val attachmentID = attachmentID attachmentID?.let { - val attachmentProto = MessagingConfiguration.shared.messageDataProvider.getAttachmentStream(attachmentID) - attachmentProto?.let { linkPreviewProto.image = attachmentProto.toProto() } + MessagingConfiguration.shared.messageDataProvider.getSignalAttachmentPointer(attachmentID)?.let { + val attachmentProto = Attachment.createAttachmentPointer(it) + linkPreviewProto.image = attachmentProto + } } // Build try { diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/VisibleMessage.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/VisibleMessage.kt index 449a38dcc..692daab19 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/VisibleMessage.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/VisibleMessage.kt @@ -69,7 +69,6 @@ class VisibleMessage : Message() { override fun toProto(): SignalServiceProtos.Content? { val proto = SignalServiceProtos.Content.newBuilder() - val attachmentIDs = this.attachmentIDs val dataMessage: SignalServiceProtos.DataMessage.Builder // Profile val profile = profile diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt index b2201e07f..5fae947a3 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt @@ -282,10 +282,19 @@ object MessageSender { // Convenience @JvmStatic fun send(message: VisibleMessage, address: Address, attachments: List, quote: SignalQuote?, linkPreview: SignalLinkPreview?) { - val attachmentIDs = MessagingConfiguration.shared.messageDataProvider.getAttachmentIDsFor(message.id!!) + val dataProvider = MessagingConfiguration.shared.messageDataProvider + val attachmentIDs = dataProvider.getAttachmentIDsFor(message.id!!) message.attachmentIDs.addAll(attachmentIDs) message.quote = Quote.from(quote) message.linkPreview = LinkPreview.from(linkPreview) + message.linkPreview?.let { + if (it.attachmentID == null) { + dataProvider.getLinkPreviewAttachmentIDFor(message.id!!)?.let { + message.linkPreview!!.attachmentID = it + message.attachmentIDs.remove(it) + } + } + } send(message, address) }