Allow legacy expiration updates when flag is off

This commit is contained in:
andrew 2023-11-29 10:16:54 +10:30
parent 7bd43b1b3c
commit a5a226b468
3 changed files with 14 additions and 8 deletions

View File

@ -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
}
}
}

View File

@ -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)

View File

@ -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)