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 671f0a508b..468aae89ee 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachmentProvider.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachmentProvider.kt @@ -4,29 +4,45 @@ import android.content.Context import com.google.protobuf.ByteString import org.session.libsession.database.dto.DatabaseAttachmentDTO import org.session.libsession.database.MessageDataProvider +import org.session.libsession.database.dto.AttachmentState import org.session.libsignal.service.internal.push.SignalServiceProtos import org.thoughtcrime.securesms.database.Database import org.thoughtcrime.securesms.database.DatabaseFactory +import org.thoughtcrime.securesms.database.SmsDatabase import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper +import org.thoughtcrime.securesms.jobs.AttachmentUploadJob import org.thoughtcrime.securesms.util.MediaUtil class DatabaseAttachmentProvider(context: Context, helper: SQLCipherOpenHelper) : Database(context, helper), MessageDataProvider { - override fun getAttachment(uniqueID: String): DatabaseAttachmentDTO? { - + override fun getAttachment(attachmentId: Long): DatabaseAttachmentDTO? { val attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context) - val uniqueID = uniqueID.toLongOrNull() ?: return null - val attachmentID = AttachmentId(0, uniqueID) - val databaseAttachment = attachmentDatabase.getAttachment(attachmentID) ?: return null - + val databaseAttachment = attachmentDatabase.getAttachment(AttachmentId(attachmentId, 0)) ?: return null return databaseAttachment.toDTO() } + override fun setAttachmentState(attachmentState: AttachmentState, attachment: DatabaseAttachmentDTO, messageID: Long) { + val attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context) + attachmentDatabase.setTransferState(messageID, AttachmentId(attachment.attachmentId, 0), attachmentState.value) + } + + @Throws(Exception::class) + override fun uploadAttachment(attachmentId: Long) { + val attachmentUploadJob = AttachmentUploadJob(AttachmentId(attachmentId, 0), null) + attachmentUploadJob.onRun() + } + + override fun isOutgoingMessage(timestamp: Long): Boolean { + val smsDatabase = DatabaseFactory.getSmsDatabase(context) + return smsDatabase.isOutgoingMessage(timestamp) + } + } // Extension to DatabaseAttachment class fun DatabaseAttachment.toDTO(): DatabaseAttachmentDTO { var databaseAttachmentDTO = DatabaseAttachmentDTO() + databaseAttachmentDTO.attachmentId = this.attachmentId.rowId databaseAttachmentDTO.contentType = this.contentType databaseAttachmentDTO.fileName = this.fileName databaseAttachmentDTO.caption = this.caption 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 2f089ff4ff..fc232cfda0 100644 --- a/libsession/src/main/java/org/session/libsession/database/MessageDataProvider.kt +++ b/libsession/src/main/java/org/session/libsession/database/MessageDataProvider.kt @@ -1,9 +1,18 @@ package org.session.libsession.database +import org.session.libsession.database.dto.AttachmentState import org.session.libsession.database.dto.DatabaseAttachmentDTO +import org.session.libsession.messaging.messages.visible.Attachment interface MessageDataProvider { - fun getAttachment(uniqueID: String): DatabaseAttachmentDTO? + fun getAttachment(attachmentId: Long): DatabaseAttachmentDTO? + + fun setAttachmentState(attachmentState: AttachmentState, attachment: DatabaseAttachmentDTO, messageID: Long) + + fun isOutgoingMessage(timestamp: Long): Boolean + + @Throws(Exception::class) + fun uploadAttachment(attachmentId: Long) } \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/database/dto/DatabaseAttachmentDTO.kt b/libsession/src/main/java/org/session/libsession/database/dto/DatabaseAttachmentDTO.kt index 1a7690fdb6..bf5f31f822 100644 --- a/libsession/src/main/java/org/session/libsession/database/dto/DatabaseAttachmentDTO.kt +++ b/libsession/src/main/java/org/session/libsession/database/dto/DatabaseAttachmentDTO.kt @@ -6,6 +6,8 @@ import org.session.libsignal.service.internal.push.SignalServiceProtos import kotlin.math.round class DatabaseAttachmentDTO { + var attachmentId: Long = 0 + var contentType: String? = null var fileName: String? = null diff --git a/libsession/src/main/java/org/session/libsession/messaging/StorageProtocol.kt b/libsession/src/main/java/org/session/libsession/messaging/StorageProtocol.kt index e0d880d94c..25c4437ee8 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/StorageProtocol.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/StorageProtocol.kt @@ -35,7 +35,7 @@ interface StorageProtocol { fun markJobAsSucceeded(job: Job) fun markJobAsFailed(job: Job) fun getAllPendingJobs(type: String): List - fun getAttachmentUploadJob(attachmentID: String): AttachmentUploadJob? + fun getAttachmentUploadJob(attachmentID: Long): AttachmentUploadJob? fun getMessageSendJob(messageSendJobID: String): MessageSendJob? fun resumeMessageSendJobIfNeeded(messageSendJobID: String) fun isJobCanceled(job: Job): Boolean 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 246474b9a3..3999148dff 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 @@ -8,7 +8,7 @@ class LinkPreview() { var title: String? = null var url: String? = null - var attachmentID: String? = null + var attachmentID: Long? = 0 companion object { const val TAG = "LinkPreview" @@ -21,7 +21,7 @@ class LinkPreview() { } //constructor - internal constructor(title: String?, url: String, attachmentID: String?) : this() { + internal constructor(title: String?, url: String, attachmentID: Long?) : this() { this.title = title this.url = url this.attachmentID = attachmentID diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Quote.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Quote.kt index 3914072c36..ed6dbb29ea 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Quote.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/visible/Quote.kt @@ -11,7 +11,7 @@ class Quote() { var timestamp: Long? = 0 var publicKey: String? = null var text: String? = null - var attachmentID: String? = null + var attachmentID: Long? = null companion object { const val TAG = "Quote" @@ -25,7 +25,7 @@ class Quote() { } //constructor - internal constructor(timestamp: Long, publicKey: String, text: String?, attachmentID: String?) : this() { + internal constructor(timestamp: Long, publicKey: String, text: String?, attachmentID: Long?) : this() { this.timestamp = timestamp this.publicKey = publicKey this.text = text 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 a1344754e0..b761eb2846 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 @@ -11,7 +11,7 @@ import org.session.libsignal.service.internal.push.SignalServiceProtos class VisibleMessage : Message() { var text: String? = null - var attachmentIDs = ArrayList() + var attachmentIDs = ArrayList() var quote: Quote? = null var linkPreview: LinkPreview? = null var contact: Contact? = null