diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/SignalServiceProtoUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/SignalServiceProtoUtil.kt index 37355b35ba..3016bf742a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/SignalServiceProtoUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/SignalServiceProtoUtil.kt @@ -74,6 +74,9 @@ object SignalServiceProtoUtil { val DataMessage.isExpirationUpdate: Boolean get() = flags != null && flags!! and DataMessage.Flags.EXPIRATION_TIMER_UPDATE.value != 0 + val DataMessage.isProfileKeyUpdate: Boolean + get() = flags != null && flags!! and DataMessage.Flags.PROFILE_KEY_UPDATE.value != 0 + val DataMessage.hasRemoteDelete: Boolean get() = delete != null && delete!!.targetSentTimestamp != null 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 4e28305e37..aac51167e7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt @@ -96,6 +96,7 @@ import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.isEmptyGroupV2 import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.isExpirationUpdate import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.isGroupV2Update import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.isMediaMessage +import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.isProfileKeyUpdate import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.isUnidentified import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.serviceIdsToUnidentifiedStatus import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.toMobileCoinMoney @@ -264,7 +265,7 @@ object SyncMessageProcessor { } dataMessage.hasRemoteDelete -> DataMessageProcessor.handleRemoteDelete(context, envelope, dataMessage, senderRecipient.id, earlyMessageCacheEntry, batchCache) dataMessage.payment != null -> log(envelope.clientTimestamp!!, "Ignoring payment notification/activation from sync transcript; payment row arrives via SyncMessage.OutgoingPayment.") - dataMessage.isMediaMessage -> threadId = handleSynchronizeSentMediaMessage(context, sent, envelope.clientTimestamp!!, senderRecipient) + dataMessage.isMediaMessage || dataMessage.giftBadge != null -> threadId = handleSynchronizeSentMediaMessage(context, sent, envelope.clientTimestamp!!, senderRecipient) dataMessage.pollCreate != null -> threadId = handleSynchronizedPollCreate(envelope, dataMessage, sent, senderRecipient) dataMessage.pollVote != null -> { val destination = getSyncMessageDestination(sent) @@ -282,7 +283,9 @@ object SyncMessageProcessor { DataMessageProcessor.handleAdminRemoteDelete(context, envelope, dataMessage, senderRecipient, threadRecipient, earlyMessageCacheEntry, batchCache) threadId = SignalDatabase.threads.getOrCreateThreadIdFor(getSyncMessageDestination(sent)) } - else -> threadId = handleSynchronizeSentTextMessage(sent, envelope.clientTimestamp!!) + dataMessage.isProfileKeyUpdate -> log(envelope.clientTimestamp!!, "Sent transcript for a profile key update. Nothing to insert.") + !dataMessage.body.isNullOrEmpty() -> threadId = handleSynchronizeSentTextMessage(sent, envelope.clientTimestamp!!) + else -> warn(envelope.clientTimestamp!!, "Sent transcript has no content we know how to handle. Ignoring. Flags: ${dataMessage.flags}") } if (groupId != null && SignalDatabase.groups.isUnknownGroup(groupId)) { @@ -733,7 +736,7 @@ object SyncMessageProcessor { SignalDatabase.recipients.setExpireMessages(recipient.id, sent.message!!.expireTimerDuration.inWholeSeconds.toInt(), sent.message!!.expireTimerVersion!!) if (sent.message!!.expireTimerDuration != recipient.expiresInSeconds.seconds) { - log(sent.timestamp!!, "Not inserted update message as timer value did not change") + log(sent.timestamp!!, "Inserting update message as timer value changed") val messageId: Long = SignalDatabase.messages.insertMessageOutbox(expirationUpdateMessage, threadId, false, null).messageId SignalDatabase.messages.markAsSent(messageId) }