From c3f7425ccd35c972bd8dd24d404fed2fc700f39f Mon Sep 17 00:00:00 2001 From: jubb Date: Mon, 29 Mar 2021 16:40:56 +1100 Subject: [PATCH] fix: empty messages in open groups now correct properly --- .../securesms/database/Storage.kt | 3 +- .../messaging/jobs/AttachmentDownloadJob.kt | 61 ++++++++++--------- .../messaging/opengroups/OpenGroupMessage.kt | 3 +- 3 files changed, 35 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt index d7643d1cfc..69c4f2e076 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt @@ -182,8 +182,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context, override fun resumeMessageSendJobIfNeeded(messageSendJobID: String) { val job = DatabaseFactory.getSessionJobDatabase(context).getMessageSendJob(messageSendJobID) ?: return - job.delegate = JobQueue.shared - job.execute() + JobQueue.shared.add(job) } override fun isJobCanceled(job: Job): Boolean { diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt index 9f99aff6bf..46dcbae37b 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt @@ -34,41 +34,44 @@ class AttachmentDownloadJob(val attachmentID: Long, val databaseMessageID: Long) } override fun execute() { - val messageDataProvider = MessagingConfiguration.shared.messageDataProvider - messageDataProvider.getDatabaseAttachment(attachmentID) - val attachment = messageDataProvider.getDatabaseAttachment(attachmentID) ?: return handleFailure(Error.NoAttachment) - messageDataProvider.setAttachmentState(AttachmentState.STARTED, attachmentID, this.databaseMessageID) - val tempFile = createTempFile() - val handleFailure: (java.lang.Exception) -> Unit = { exception -> - tempFile.delete() - if(exception is Error && exception == Error.NoAttachment) { - MessagingConfiguration.shared.messageDataProvider.setAttachmentState(AttachmentState.FAILED, attachmentID, databaseMessageID) - this.handlePermanentFailure(exception) - } else if (exception is DotNetAPI.Error && exception == DotNetAPI.Error.ParsingFailed) { - // No need to retry if the response is invalid. Most likely this means we (incorrectly) - // got a "Cannot GET ..." error from the file server. - MessagingConfiguration.shared.messageDataProvider.setAttachmentState(AttachmentState.FAILED, attachmentID, databaseMessageID) - this.handlePermanentFailure(exception) - } else { - this.handleFailure(exception) - } - } try { - FileServerAPI.shared.downloadFile(tempFile, attachment.url, MAX_ATTACHMENT_SIZE, null) - } catch (e: Exception) { - return handleFailure(e) - } + val messageDataProvider = MessagingConfiguration.shared.messageDataProvider + val attachment = messageDataProvider.getDatabaseAttachment(attachmentID) ?: return handleFailure(Error.NoAttachment) + messageDataProvider.setAttachmentState(AttachmentState.STARTED, attachmentID, this.databaseMessageID) + val tempFile = createTempFile() + val handleFailure: (java.lang.Exception) -> Unit = { exception -> + tempFile.delete() + if(exception is Error && exception == Error.NoAttachment) { + MessagingConfiguration.shared.messageDataProvider.setAttachmentState(AttachmentState.FAILED, attachmentID, databaseMessageID) + this.handlePermanentFailure(exception) + } else if (exception is DotNetAPI.Error && exception == DotNetAPI.Error.ParsingFailed) { + // No need to retry if the response is invalid. Most likely this means we (incorrectly) + // got a "Cannot GET ..." error from the file server. + MessagingConfiguration.shared.messageDataProvider.setAttachmentState(AttachmentState.FAILED, attachmentID, databaseMessageID) + this.handlePermanentFailure(exception) + } else { + this.handleFailure(exception) + } + } + try { + FileServerAPI.shared.downloadFile(tempFile, attachment.url, MAX_ATTACHMENT_SIZE, null) + } catch (e: Exception) { + return handleFailure(e) + } - // DECRYPTION + // DECRYPTION - // Assume we're retrieving an attachment for an open group server if the digest is not set - val stream = if (attachment.digest?.size ?: 0 == 0 || attachment.key.isNullOrEmpty()) FileInputStream(tempFile) + // Assume we're retrieving an attachment for an open group server if the digest is not set + val stream = if (attachment.digest?.size ?: 0 == 0 || attachment.key.isNullOrEmpty()) FileInputStream(tempFile) else AttachmentCipherInputStream.createForAttachment(tempFile, attachment.size, Base64.decode(attachment.key), attachment.digest) - messageDataProvider.insertAttachment(databaseMessageID, attachment.attachmentId, stream) + messageDataProvider.insertAttachment(databaseMessageID, attachment.attachmentId, stream) - tempFile.delete() - handleSuccess() + tempFile.delete() + handleSuccess() + } catch (e: Exception) { + handleFailure(e) + } } private fun handleSuccess() { diff --git a/libsession/src/main/java/org/session/libsession/messaging/opengroups/OpenGroupMessage.kt b/libsession/src/main/java/org/session/libsession/messaging/opengroups/OpenGroupMessage.kt index 0a414649d8..5a05d0f5f8 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/opengroups/OpenGroupMessage.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/opengroups/OpenGroupMessage.kt @@ -42,7 +42,8 @@ data class OpenGroupMessage( }() // Message val displayname = storage.getUserDisplayName() ?: "Anonymous" - val body = message.text ?: message.sentTimestamp.toString() // The back-end doesn't accept messages without a body so we use this as a workaround + val text = message.text + val body = if (text.isNullOrEmpty()) message.sentTimestamp.toString() else text // The back-end doesn't accept messages without a body so we use this as a workaround val result = OpenGroupMessage(null, userPublicKey, displayname, body, message.sentTimestamp!!, OpenGroupAPI.openGroupMessageType, quote, mutableListOf(), null, null, 0) // Link preview val linkPreview = message.linkPreview