feat: add expiration updates via config for contacts as well

This commit is contained in:
0x330a 2023-03-09 17:35:48 +11:00
parent a9e6db4734
commit eca5712282
No known key found for this signature in database
GPG Key ID: 267811D6E6A2698C
5 changed files with 29 additions and 15 deletions

View File

@ -1052,7 +1052,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
if (group?.isActive == false) { return } if (group?.isActive == false) { return }
} }
ExpirationDialog.show(this, thread.expireMessages) { expirationTime: Int -> ExpirationDialog.show(this, thread.expireMessages) { expirationTime: Int ->
recipientDb.setExpireMessages(thread, expirationTime) storage.setExpirationTimer(thread.address.serialize(), expirationTime)
val message = ExpirationTimerUpdate(expirationTime) val message = ExpirationTimerUpdate(expirationTime)
message.recipient = thread.address.serialize() message.recipient = thread.address.serialize()
message.sentTimestamp = System.currentTimeMillis() message.sentTimestamp = System.currentTimeMillis()

View File

@ -9,6 +9,7 @@ import network.loki.messenger.libsession_util.UserGroupsConfig
import network.loki.messenger.libsession_util.UserProfile import network.loki.messenger.libsession_util.UserProfile
import network.loki.messenger.libsession_util.util.BaseCommunityInfo import network.loki.messenger.libsession_util.util.BaseCommunityInfo
import network.loki.messenger.libsession_util.util.Conversation import network.loki.messenger.libsession_util.util.Conversation
import network.loki.messenger.libsession_util.util.ExpiryMode
import network.loki.messenger.libsession_util.util.UserPic import network.loki.messenger.libsession_util.util.UserPic
import org.session.libsession.avatars.AvatarHelper import org.session.libsession.avatars.AvatarHelper
import org.session.libsession.database.StorageProtocol import org.session.libsession.database.StorageProtocol
@ -359,6 +360,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper, private val configF
setRecipientApprovedMe(recipient, contact.approvedMe) setRecipientApprovedMe(recipient, contact.approvedMe)
profileManager.setName(context, recipient, contact.name) profileManager.setName(context, recipient, contact.name)
profileManager.setNickname(context, recipient, contact.nickname) profileManager.setNickname(context, recipient, contact.nickname)
if (contact.profilePicture != UserPic.DEFAULT) { if (contact.profilePicture != UserPic.DEFAULT) {
val (url, key) = contact.profilePicture val (url, key) = contact.profilePicture
if (key.size != ProfileKeyUtil.PROFILE_KEY_BYTES) return@forEach if (key.size != ProfileKeyUtil.PROFILE_KEY_BYTES) return@forEach
@ -460,7 +462,6 @@ class Storage(context: Context, helper: SQLCipherOpenHelper, private val configF
addClosedGroupEncryptionKeyPair(keyPair, group.sessionId, SnodeAPI.nowWithOffset) addClosedGroupEncryptionKeyPair(keyPair, group.sessionId, SnodeAPI.nowWithOffset)
// Set expiration timer // Set expiration timer
val expireTimer = group.disappearingTimer val expireTimer = group.disappearingTimer
setExpirationTimer()
setExpirationTimer(groupId, expireTimer.toInt()) setExpirationTimer(groupId, expireTimer.toInt())
// Notify the PN server // Notify the PN server
PushNotificationAPI.performOperation(PushNotificationAPI.ClosedGroupOperation.Subscribe, group.sessionId, localUserPublicKey) PushNotificationAPI.performOperation(PushNotificationAPI.ClosedGroupOperation.Subscribe, group.sessionId, localUserPublicKey)
@ -774,9 +775,21 @@ class Storage(context: Context, helper: SQLCipherOpenHelper, private val configF
.updateTimestampUpdated(groupID, updatedTimestamp) .updateTimestampUpdated(groupID, updatedTimestamp)
} }
override fun setExpirationTimer(groupID: String, duration: Int) { override fun setExpirationTimer(address: String, duration: Int) {
val recipient = Recipient.from(context, fromSerialized(groupID), false) val recipient = Recipient.from(context, fromSerialized(address), false)
DatabaseComponent.get(context).recipientDatabase().setExpireMessages(recipient, duration) DatabaseComponent.get(context).recipientDatabase().setExpireMessages(recipient, duration)
if (recipient.isContactRecipient) {
configFactory.contacts?.upsertContact(address) {
this.expiryMode = if (duration != 0) {
ExpiryMode.AfterRead(duration.toLong())
} else { // = 0 / delete
ExpiryMode.NONE
}
}
if (configFactory.contacts?.needsPush() == true) {
ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(context)
}
}
} }
override fun setServerCapabilities(server: String, capabilities: List<String>) { override fun setServerCapabilities(server: String, capabilities: List<String>) {

View File

@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.service;
import android.content.Context; import android.content.Context;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.session.libsession.messaging.MessagingModuleConfiguration;
import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate; import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate;
import org.session.libsession.messaging.messages.signal.IncomingMediaMessage; import org.session.libsession.messaging.messages.signal.IncomingMediaMessage;
import org.session.libsession.messaging.messages.signal.OutgoingExpirationUpdateMessage; import org.session.libsession.messaging.messages.signal.OutgoingExpirationUpdateMessage;
@ -123,7 +124,7 @@ public class ExpiringMessageManager implements SSKEnvironment.MessageExpirationM
database.insertSecureDecryptedMessageInbox(mediaMessage, -1, true); database.insertSecureDecryptedMessageInbox(mediaMessage, -1, true);
//set the timer to the conversation //set the timer to the conversation
DatabaseComponent.get(context).recipientDatabase().setExpireMessages(recipient, duration); MessagingModuleConfiguration.getShared().getStorage().setExpirationTimer(recipient.getAddress().serialize(), duration);
} catch (IOException | MmsException ioe) { } catch (IOException | MmsException ioe) {
Log.e("Loki", "Failed to insert expiration update message."); Log.e("Loki", "Failed to insert expiration update message.");
@ -149,7 +150,7 @@ public class ExpiringMessageManager implements SSKEnvironment.MessageExpirationM
recipient = Recipient.from(context, Address.fromSerialized(GroupUtil.doubleEncodeGroupID(groupId)), false); recipient = Recipient.from(context, Address.fromSerialized(GroupUtil.doubleEncodeGroupID(groupId)), false);
} }
//set the timer to the conversation //set the timer to the conversation
DatabaseComponent.get(context).recipientDatabase().setExpireMessages(recipient, duration); MessagingModuleConfiguration.getShared().getStorage().setExpirationTimer(recipient.getAddress().serialize(), duration);
} catch (MmsException | IOException ioe) { } catch (MmsException | IOException ioe) {
Log.e("Loki", "Failed to insert expiration update message."); Log.e("Loki", "Failed to insert expiration update message.");

View File

@ -2,12 +2,12 @@ package network.loki.messenger.libsession_util.util
data class Contact( data class Contact(
val id: String, val id: String,
val name: String = "", var name: String = "",
val nickname: String = "", var nickname: String = "",
val approved: Boolean = false, var approved: Boolean = false,
val approvedMe: Boolean = false, var approvedMe: Boolean = false,
val blocked: Boolean = false, var blocked: Boolean = false,
val profilePicture: UserPic = UserPic.DEFAULT, var profilePicture: UserPic = UserPic.DEFAULT,
val priority: Int = 0, var priority: Int = 0,
val expiryMode: ExpiryMode var expiryMode: ExpiryMode
) )

View File

@ -142,7 +142,7 @@ interface StorageProtocol {
fun getLatestClosedGroupEncryptionKeyPair(groupPublicKey: String): ECKeyPair? fun getLatestClosedGroupEncryptionKeyPair(groupPublicKey: String): ECKeyPair?
fun updateFormationTimestamp(groupID: String, formationTimestamp: Long) fun updateFormationTimestamp(groupID: String, formationTimestamp: Long)
fun updateTimestampUpdated(groupID: String, updatedTimestamp: Long) fun updateTimestampUpdated(groupID: String, updatedTimestamp: Long)
fun setExpirationTimer(groupID: String, duration: Int) fun setExpirationTimer(address: String, duration: Int)
// Groups // Groups
fun getAllGroups(): List<GroupRecord> fun getAllGroups(): List<GroupRecord>