mirror of
https://github.com/oxen-io/session-android.git
synced 2025-02-20 00:08:26 +00:00
Expiration config tweaks
This commit is contained in:
parent
b18cebe03d
commit
9e004cd09a
@ -12,6 +12,8 @@ import kotlinx.coroutines.flow.mapLatest
|
|||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.session.libsession.messaging.messages.ExpirationConfiguration
|
import org.session.libsession.messaging.messages.ExpirationConfiguration
|
||||||
|
import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate
|
||||||
|
import org.session.libsession.messaging.sending_receiving.MessageSender
|
||||||
import org.session.libsession.utilities.recipients.Recipient
|
import org.session.libsession.utilities.recipients.Recipient
|
||||||
import org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType
|
import org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType
|
||||||
import org.thoughtcrime.securesms.database.Storage
|
import org.thoughtcrime.securesms.database.Storage
|
||||||
@ -98,6 +100,11 @@ class ExpirationSettingsViewModel(
|
|||||||
val expiryChangeTimestampMs = System.currentTimeMillis()
|
val expiryChangeTimestampMs = System.currentTimeMillis()
|
||||||
storage.setExpirationConfiguration(ExpirationConfiguration(threadId, expiresIn, expiryType, expiryChangeTimestampMs))
|
storage.setExpirationConfiguration(ExpirationConfiguration(threadId, expiresIn, expiryType, expiryChangeTimestampMs))
|
||||||
|
|
||||||
|
val message = ExpirationTimerUpdate(expiresIn)
|
||||||
|
val address = recipient.value?.address ?: return@launch
|
||||||
|
message.recipient = address.serialize()
|
||||||
|
message.sentTimestamp = System.currentTimeMillis()
|
||||||
|
MessageSender.send(message, address)
|
||||||
}
|
}
|
||||||
|
|
||||||
@dagger.assisted.AssistedFactory
|
@dagger.assisted.AssistedFactory
|
||||||
|
@ -18,6 +18,7 @@ import org.session.libsignal.utilities.Log;
|
|||||||
import org.session.libsignal.utilities.guava.Optional;
|
import org.session.libsignal.utilities.guava.Optional;
|
||||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||||
import org.thoughtcrime.securesms.database.SmsDatabase;
|
import org.thoughtcrime.securesms.database.SmsDatabase;
|
||||||
|
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
||||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||||
import org.thoughtcrime.securesms.dependencies.DatabaseComponent;
|
import org.thoughtcrime.securesms.dependencies.DatabaseComponent;
|
||||||
import org.thoughtcrime.securesms.mms.MmsException;
|
import org.thoughtcrime.securesms.mms.MmsException;
|
||||||
@ -70,10 +71,11 @@ public class ExpiringMessageManager implements SSKEnvironment.MessageExpirationM
|
|||||||
@Override
|
@Override
|
||||||
public void setExpirationTimer(@NotNull ExpirationTimerUpdate message, @Nullable Integer expirationType) {
|
public void setExpirationTimer(@NotNull ExpirationTimerUpdate message, @Nullable Integer expirationType) {
|
||||||
try {
|
try {
|
||||||
long threadId = message.getThreadID();
|
ThreadDatabase threadDb = DatabaseComponent.get(context).threadDatabase();
|
||||||
|
long threadId = threadDb.getOrCreateThreadIdFor(Recipient.from(context, Address.fromSerialized(message.getSender()), false));
|
||||||
if (message.getGroupPublicKey() != null) {
|
if (message.getGroupPublicKey() != null) {
|
||||||
Recipient recipient = Recipient.from(context, Address.fromSerialized(GroupUtil.doubleEncodeGroupID(message.getGroupPublicKey())), false);
|
Recipient recipient = Recipient.from(context, Address.fromSerialized(GroupUtil.doubleEncodeGroupID(message.getGroupPublicKey())), false);
|
||||||
threadId = DatabaseComponent.get(context).threadDatabase().getOrCreateThreadIdFor(recipient);
|
threadId = threadDb.getOrCreateThreadIdFor(recipient);
|
||||||
}
|
}
|
||||||
DatabaseComponent.get(context).expirationConfigurationDatabase().setExpirationConfiguration(
|
DatabaseComponent.get(context).expirationConfigurationDatabase().setExpirationConfiguration(
|
||||||
new ExpirationConfiguration(threadId, message.getDuration(), expirationType, System.currentTimeMillis())
|
new ExpirationConfiguration(threadId, message.getDuration(), expirationType, System.currentTimeMillis())
|
||||||
|
@ -46,9 +46,9 @@ abstract class Message {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
builder.expirationTimer = config.durationSeconds
|
builder.expirationTimer = config.durationSeconds
|
||||||
|
builder.lastDisappearingMessageChangeTimestamp = config.updatedTimestampMs
|
||||||
if (config.isEnabled) {
|
if (config.isEnabled) {
|
||||||
builder.expirationType = config.expirationType
|
builder.expirationType = config.expirationType
|
||||||
builder.lastDisappearingMessageChangeTimestamp = config.updatedTimestampMs
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -92,7 +92,7 @@ fun updateExpirationConfigurationIfNeeded(message: Message, proto: SignalService
|
|||||||
val threadID = storage.getOrCreateThreadIdFor(message.sender!!, message.groupPublicKey, openGroupID)
|
val threadID = storage.getOrCreateThreadIdFor(message.sender!!, message.groupPublicKey, openGroupID)
|
||||||
if (threadID <= 0) return
|
if (threadID <= 0) return
|
||||||
val localConfig = storage.getExpirationConfiguration(threadID)
|
val localConfig = storage.getExpirationConfiguration(threadID)
|
||||||
if (localConfig == null || localConfig.updatedTimestampMs < proto.lastDisappearingMessageChangeTimestamp) return
|
if (localConfig == null || localConfig.updatedTimestampMs > proto.lastDisappearingMessageChangeTimestamp) return
|
||||||
val durationSeconds = if (proto.hasExpirationTimer()) proto.expirationTimer else 0
|
val durationSeconds = if (proto.hasExpirationTimer()) proto.expirationTimer else 0
|
||||||
val type = if (proto.hasExpirationType()) proto.expirationType else null
|
val type = if (proto.hasExpirationType()) proto.expirationType else null
|
||||||
val remoteConfig = ExpirationConfiguration(
|
val remoteConfig = ExpirationConfiguration(
|
||||||
@ -157,7 +157,7 @@ fun MessageReceiver.cancelTypingIndicatorsIfNeeded(senderPublicKey: String) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun MessageReceiver.handleExpirationTimerUpdate(message: ExpirationTimerUpdate) {
|
private fun MessageReceiver.handleExpirationTimerUpdate(message: ExpirationTimerUpdate) {
|
||||||
if (ExpirationConfiguration.isNewConfigEnabled) return
|
if (!ExpirationConfiguration.isNewConfigEnabled) return
|
||||||
val recipient = Recipient.from(MessagingModuleConfiguration.shared.context, Address.fromSerialized(message.sender!!), false)
|
val recipient = Recipient.from(MessagingModuleConfiguration.shared.context, Address.fromSerialized(message.sender!!), false)
|
||||||
val type = when {
|
val type = when {
|
||||||
recipient.isLocalNumber -> ExpirationType.DELETE_AFTER_READ
|
recipient.isLocalNumber -> ExpirationType.DELETE_AFTER_READ
|
||||||
|
Loading…
x
Reference in New Issue
Block a user