From a5a226b468403e80851841db6e5b66b78caba6e6 Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 29 Nov 2023 10:16:54 +1030 Subject: [PATCH] Allow legacy expiration updates when flag is off --- .../session/libsession/messaging/messages/Message.kt | 8 ++++---- .../messages/control/ExpirationTimerUpdate.kt | 2 +- .../sending_receiving/ReceivedMessageHandler.kt | 12 +++++++++--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt index 2fa04aee6..988789b2c 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt @@ -57,7 +57,7 @@ abstract class Message { } fun SignalServiceProtos.Content.Builder.setExpirationConfigurationIfNeeded(threadId: Long?): SignalServiceProtos.Content.Builder { - val config = threadId?.let { MessagingModuleConfiguration.shared.storage.getExpirationConfiguration(it) } + val config = threadId?.let(MessagingModuleConfiguration.shared.storage::getExpirationConfiguration) ?: run { expirationTimer = 0 return this @@ -66,11 +66,11 @@ abstract class Message { lastDisappearingMessageChangeTimestamp = config.updatedTimestampMs config.expiryMode.let { expiryMode -> expirationType = when (expiryMode) { - is ExpiryMode.Legacy, is ExpiryMode.AfterSend -> ExpirationType.DELETE_AFTER_SEND + is ExpiryMode.AfterSend -> ExpirationType.DELETE_AFTER_SEND is ExpiryMode.AfterRead -> ExpirationType.DELETE_AFTER_READ - ExpiryMode.NONE -> ExpirationType.UNKNOWN + else -> ExpirationType.UNKNOWN } } return this } -} \ No newline at end of file +} diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/control/ExpirationTimerUpdate.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/control/ExpirationTimerUpdate.kt index 18a0472c5..159283238 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/control/ExpirationTimerUpdate.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/control/ExpirationTimerUpdate.kt @@ -30,7 +30,7 @@ data class ExpirationTimerUpdate(var expiryMode: ExpiryMode, var syncTarget: Str val expiryMode = when (type) { SignalServiceProtos.Content.ExpirationType.DELETE_AFTER_SEND -> ExpiryMode.AfterSend(duration.toLong()) SignalServiceProtos.Content.ExpirationType.DELETE_AFTER_READ -> ExpiryMode.AfterRead(duration.toLong()) - else -> ExpiryMode.NONE + else -> duration.takeIf { it > 0 }?.toLong()?.let(ExpiryMode::AfterSend) ?: ExpiryMode.NONE } return ExpirationTimerUpdate(expiryMode, syncTarget) diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt index 75aa66285..4c534802e 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt @@ -8,6 +8,7 @@ import org.session.libsession.messaging.MessagingModuleConfiguration import org.session.libsession.messaging.jobs.BackgroundGroupAddJob import org.session.libsession.messaging.jobs.JobQueue import org.session.libsession.messaging.messages.ExpirationConfiguration +import org.session.libsession.messaging.messages.ExpirationConfiguration.Companion.isNewConfigEnabled import org.session.libsession.messaging.messages.Message import org.session.libsession.messaging.messages.control.CallMessage import org.session.libsession.messaging.messages.control.ClosedGroupControlMessage @@ -286,7 +287,7 @@ fun MessageReceiver.updateExpiryIfNeeded( storage.updateDisappearingState(message.sender!!, threadID, disappearingState) } - if (!proto.hasLastDisappearingMessageChangeTimestamp()) return + if (!proto.hasLastDisappearingMessageChangeTimestamp() && !isNewConfigEnabled) return val localConfig = storage.getExpirationConfiguration(threadID) @@ -295,16 +296,21 @@ fun MessageReceiver.updateExpiryIfNeeded( val expiryMode = type?.expiryMode(durationSeconds.toLong()) ?: ExpiryMode.NONE + val lastDisappearingMessageChangeTimestamp = proto.lastDisappearingMessageChangeTimestamp + val remoteConfig = ExpirationConfiguration( threadID, expiryMode, - proto.lastDisappearingMessageChangeTimestamp + lastDisappearingMessageChangeTimestamp ) // don't update any values for open groups if (recipient.isOpenGroupRecipient && type != null) throw MessageReceiver.Error.InvalidMessage - remoteConfig.takeIf { localConfig == null || it.updatedTimestampMs > localConfig.updatedTimestampMs } + remoteConfig.takeIf { + localConfig == null + || it.updatedTimestampMs > localConfig.updatedTimestampMs + || !isNewConfigEnabled && !proto.hasLastDisappearingMessageChangeTimestamp() } ?.let(storage::setExpirationConfiguration)