diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt index 4d8997e193..19f9647968 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt @@ -371,8 +371,6 @@ object SyncMessageProcessor { } val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(toRecipient) - val messageId: Long - val attachments: List val mediaMessage = OutgoingMessage( recipient = toRecipient, body = message.body ?: "", @@ -389,32 +387,28 @@ object SyncMessageProcessor { messageToEdit = targetMessage.id ) - SignalDatabase.messages.beginTransaction() - try { - messageId = SignalDatabase.messages.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null) + val messageId: Long = SignalDatabase.messages.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null) - if (toRecipient.isGroup) { - updateGroupReceiptStatus(sent, messageId, toRecipient.requireGroupId()) - } else { - SignalDatabase.messages.markUnidentified(messageId, sent.isUnidentified(toRecipient.serviceId.orNull())) - } - - SignalDatabase.messages.markAsSent(messageId, true) - - attachments = SignalDatabase.attachments.getAttachmentsForMessage(messageId) - - if (targetMessage.expireStarted > 0) { - SignalDatabase.messages.markExpireStarted(messageId, targetMessage.expireStarted) - ApplicationDependencies.getExpiringMessageManager().scheduleDeletion(messageId, true, targetMessage.expireStarted, targetMessage.expireStarted) - } - if (toRecipient.isSelf) { - SignalDatabase.messages.incrementDeliveryReceiptCount(sent.timestamp!!, toRecipient.id, System.currentTimeMillis()) - SignalDatabase.messages.incrementReadReceiptCount(sent.timestamp!!, toRecipient.id, System.currentTimeMillis()) - } - SignalDatabase.messages.setTransactionSuccessful() - } finally { - SignalDatabase.messages.endTransaction() + if (toRecipient.isGroup) { + updateGroupReceiptStatus(sent, messageId, toRecipient.requireGroupId()) + } else { + SignalDatabase.messages.markUnidentified(messageId, sent.isUnidentified(toRecipient.serviceId.orNull())) } + + SignalDatabase.messages.markAsSent(messageId, true) + + val attachments: List = SignalDatabase.attachments.getAttachmentsForMessage(messageId) + + if (targetMessage.expireStarted > 0) { + SignalDatabase.messages.markExpireStarted(messageId, targetMessage.expireStarted) + ApplicationDependencies.getExpiringMessageManager().scheduleDeletion(messageId, true, targetMessage.expireStarted, targetMessage.expireStarted) + } + + if (toRecipient.isSelf) { + SignalDatabase.messages.incrementDeliveryReceiptCount(sent.timestamp!!, toRecipient.id, System.currentTimeMillis()) + SignalDatabase.messages.incrementReadReceiptCount(sent.timestamp!!, toRecipient.id, System.currentTimeMillis()) + } + if (syncAttachments.isNotEmpty()) { SignalDatabase.runPostSuccessfulTransaction { for (attachment in attachments) { @@ -496,35 +490,26 @@ object SyncMessageProcessor { ) val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(recipient) - val messageId: Long - val attachments: List + val messageId: Long = SignalDatabase.messages.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptTable.STATUS_UNDELIVERED, null) - SignalDatabase.messages.beginTransaction() - try { - messageId = SignalDatabase.messages.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptTable.STATUS_UNDELIVERED, null) - - if (groupId != null) { - updateGroupReceiptStatus(sent, messageId, recipient.requireGroupId()) - } else if (recipient.distributionListId.isPresent) { - updateGroupReceiptStatusForDistributionList(sent, messageId, recipient.distributionListId.get()) - } else { - SignalDatabase.messages.markUnidentified(messageId, sent.isUnidentified(recipient.serviceId.orNull())) - } - - SignalDatabase.messages.markAsSent(messageId, true) - - val allAttachments = SignalDatabase.attachments.getAttachmentsForMessage(messageId) - attachments = allAttachments.filterNot { it.isSticker } - - if (recipient.isSelf) { - SignalDatabase.messages.incrementDeliveryReceiptCount(sent.timestamp!!, recipient.id, System.currentTimeMillis()) - SignalDatabase.messages.incrementReadReceiptCount(sent.timestamp!!, recipient.id, System.currentTimeMillis()) - } - - SignalDatabase.messages.setTransactionSuccessful() - } finally { - SignalDatabase.messages.endTransaction() + if (groupId != null) { + updateGroupReceiptStatus(sent, messageId, recipient.requireGroupId()) + } else if (recipient.distributionListId.isPresent) { + updateGroupReceiptStatusForDistributionList(sent, messageId, recipient.distributionListId.get()) + } else { + SignalDatabase.messages.markUnidentified(messageId, sent.isUnidentified(recipient.serviceId.orNull())) } + + SignalDatabase.messages.markAsSent(messageId, true) + + val allAttachments = SignalDatabase.attachments.getAttachmentsForMessage(messageId) + val attachments: List = allAttachments.filterNot { it.isSticker } + + if (recipient.isSelf) { + SignalDatabase.messages.incrementDeliveryReceiptCount(sent.timestamp!!, recipient.id, System.currentTimeMillis()) + SignalDatabase.messages.incrementReadReceiptCount(sent.timestamp!!, recipient.id, System.currentTimeMillis()) + } + SignalDatabase.runPostSuccessfulTransaction { for (attachment in attachments) { ApplicationDependencies.getJobManager().add(AttachmentDownloadJob(messageId, attachment.attachmentId, false)) @@ -718,32 +703,25 @@ object SyncMessageProcessor { } val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(recipient) - val messageId: Long + val messageId: Long = SignalDatabase.messages.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null) - SignalDatabase.messages.beginTransaction() - try { - messageId = SignalDatabase.messages.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null) - if (recipient.isGroup) { - updateGroupReceiptStatus(sent, messageId, recipient.requireGroupId()) - } else { - SignalDatabase.messages.markUnidentified(messageId, sent.isUnidentified(recipient.serviceId.orNull())) - } + if (recipient.isGroup) { + updateGroupReceiptStatus(sent, messageId, recipient.requireGroupId()) + } else { + SignalDatabase.messages.markUnidentified(messageId, sent.isUnidentified(recipient.serviceId.orNull())) + } - SignalDatabase.messages.markAsSent(messageId, true) - if (dataMessage.expireTimerDuration > Duration.ZERO) { - SignalDatabase.messages.markExpireStarted(messageId, sent.expirationStartTimestamp ?: 0) + SignalDatabase.messages.markAsSent(messageId, true) + if (dataMessage.expireTimerDuration > Duration.ZERO) { + SignalDatabase.messages.markExpireStarted(messageId, sent.expirationStartTimestamp ?: 0) - ApplicationDependencies - .getExpiringMessageManager() - .scheduleDeletion(messageId, true, sent.expirationStartTimestamp ?: 0, dataMessage.expireTimerDuration.inWholeMilliseconds) - } - if (recipient.isSelf) { - SignalDatabase.messages.incrementDeliveryReceiptCount(sent.timestamp!!, recipient.id, System.currentTimeMillis()) - SignalDatabase.messages.incrementReadReceiptCount(sent.timestamp!!, recipient.id, System.currentTimeMillis()) - } - SignalDatabase.messages.setTransactionSuccessful() - } finally { - SignalDatabase.messages.endTransaction() + ApplicationDependencies + .getExpiringMessageManager() + .scheduleDeletion(messageId, true, sent.expirationStartTimestamp ?: 0, dataMessage.expireTimerDuration.inWholeMilliseconds) + } + if (recipient.isSelf) { + SignalDatabase.messages.incrementDeliveryReceiptCount(sent.timestamp!!, recipient.id, System.currentTimeMillis()) + SignalDatabase.messages.incrementReadReceiptCount(sent.timestamp!!, recipient.id, System.currentTimeMillis()) } return threadId @@ -790,36 +768,28 @@ object SyncMessageProcessor { } val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(recipient) - val messageId: Long - val attachments: List + val messageId: Long = SignalDatabase.messages.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null) - SignalDatabase.messages.beginTransaction() - try { - messageId = SignalDatabase.messages.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null) - - if (recipient.isGroup) { - updateGroupReceiptStatus(sent, messageId, recipient.requireGroupId()) - } else { - SignalDatabase.messages.markUnidentified(messageId, sent.isUnidentified(recipient.serviceId.orNull())) - } - - SignalDatabase.messages.markAsSent(messageId, true) - - attachments = SignalDatabase.attachments.getAttachmentsForMessage(messageId) - - if (dataMessage.expireTimerDuration > Duration.ZERO) { - SignalDatabase.messages.markExpireStarted(messageId, sent.expirationStartTimestamp ?: 0) - - ApplicationDependencies.getExpiringMessageManager().scheduleDeletion(messageId, true, sent.expirationStartTimestamp ?: 0, dataMessage.expireTimerDuration.inWholeMilliseconds) - } - if (recipient.isSelf) { - SignalDatabase.messages.incrementDeliveryReceiptCount(sent.timestamp!!, recipient.id, System.currentTimeMillis()) - SignalDatabase.messages.incrementReadReceiptCount(sent.timestamp!!, recipient.id, System.currentTimeMillis()) - } - SignalDatabase.messages.setTransactionSuccessful() - } finally { - SignalDatabase.messages.endTransaction() + if (recipient.isGroup) { + updateGroupReceiptStatus(sent, messageId, recipient.requireGroupId()) + } else { + SignalDatabase.messages.markUnidentified(messageId, sent.isUnidentified(recipient.serviceId.orNull())) } + + SignalDatabase.messages.markAsSent(messageId, true) + + val attachments: List = SignalDatabase.attachments.getAttachmentsForMessage(messageId) + + if (dataMessage.expireTimerDuration > Duration.ZERO) { + SignalDatabase.messages.markExpireStarted(messageId, sent.expirationStartTimestamp ?: 0) + + ApplicationDependencies.getExpiringMessageManager().scheduleDeletion(messageId, true, sent.expirationStartTimestamp ?: 0, dataMessage.expireTimerDuration.inWholeMilliseconds) + } + if (recipient.isSelf) { + SignalDatabase.messages.incrementDeliveryReceiptCount(sent.timestamp!!, recipient.id, System.currentTimeMillis()) + SignalDatabase.messages.incrementReadReceiptCount(sent.timestamp!!, recipient.id, System.currentTimeMillis()) + } + SignalDatabase.runPostSuccessfulTransaction { val downloadJobs: List = attachments.map { AttachmentDownloadJob(messageId, it.attachmentId, false) } for (attachment in attachments) {