mirror of
https://github.com/oxen-io/session-android.git
synced 2025-04-28 05:50:46 +00:00
fix: empty messages in open groups now correct properly
This commit is contained in:
parent
d292c760c4
commit
c3f7425ccd
@ -182,8 +182,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context,
|
|||||||
|
|
||||||
override fun resumeMessageSendJobIfNeeded(messageSendJobID: String) {
|
override fun resumeMessageSendJobIfNeeded(messageSendJobID: String) {
|
||||||
val job = DatabaseFactory.getSessionJobDatabase(context).getMessageSendJob(messageSendJobID) ?: return
|
val job = DatabaseFactory.getSessionJobDatabase(context).getMessageSendJob(messageSendJobID) ?: return
|
||||||
job.delegate = JobQueue.shared
|
JobQueue.shared.add(job)
|
||||||
job.execute()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isJobCanceled(job: Job): Boolean {
|
override fun isJobCanceled(job: Job): Boolean {
|
||||||
|
@ -34,41 +34,44 @@ class AttachmentDownloadJob(val attachmentID: Long, val databaseMessageID: Long)
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun execute() {
|
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 {
|
try {
|
||||||
FileServerAPI.shared.downloadFile(tempFile, attachment.url, MAX_ATTACHMENT_SIZE, null)
|
val messageDataProvider = MessagingConfiguration.shared.messageDataProvider
|
||||||
} catch (e: Exception) {
|
val attachment = messageDataProvider.getDatabaseAttachment(attachmentID) ?: return handleFailure(Error.NoAttachment)
|
||||||
return handleFailure(e)
|
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
|
// 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)
|
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)
|
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()
|
tempFile.delete()
|
||||||
handleSuccess()
|
handleSuccess()
|
||||||
|
} catch (e: Exception) {
|
||||||
|
handleFailure(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleSuccess() {
|
private fun handleSuccess() {
|
||||||
|
@ -42,7 +42,8 @@ data class OpenGroupMessage(
|
|||||||
}()
|
}()
|
||||||
// Message
|
// Message
|
||||||
val displayname = storage.getUserDisplayName() ?: "Anonymous"
|
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)
|
val result = OpenGroupMessage(null, userPublicKey, displayname, body, message.sentTimestamp!!, OpenGroupAPI.openGroupMessageType, quote, mutableListOf(), null, null, 0)
|
||||||
// Link preview
|
// Link preview
|
||||||
val linkPreview = message.linkPreview
|
val linkPreview = message.linkPreview
|
||||||
|
Loading…
x
Reference in New Issue
Block a user