]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/helper/ContactHelper.java
Implement message expiration timer version
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / ContactHelper.java
index f9af27f18cf964d2edf077e47168125a88a414d8..56ef89ed434e7189a9c06d6da6952127f2a0ac31 100644 (file)
@@ -36,8 +36,34 @@ public class ContactHelper {
             return;
         }
         final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
+        final var version = contact == null
+                ? 1
+                : contact.messageExpirationTimeVersion() == Integer.MAX_VALUE
+                        ? Integer.MAX_VALUE
+                        : contact.messageExpirationTimeVersion() + 1;
         account.getContactStore()
-                .storeContact(recipientId, builder.withMessageExpirationTime(messageExpirationTimer).build());
+                .storeContact(recipientId,
+                        builder.withMessageExpirationTime(messageExpirationTimer)
+                                .withMessageExpirationTimeVersion(version)
+                                .build());
+    }
+
+    public void setExpirationTimer(
+            RecipientId recipientId, int messageExpirationTimer, int messageExpirationTimerVersion
+    ) {
+        var contact = account.getContactStore().getContact(recipientId);
+        if (contact != null && (
+                contact.messageExpirationTime() == messageExpirationTimer
+                        || contact.messageExpirationTimeVersion() >= messageExpirationTimerVersion
+        )) {
+            return;
+        }
+        final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
+        account.getContactStore()
+                .storeContact(recipientId,
+                        builder.withMessageExpirationTime(messageExpirationTimer)
+                                .withMessageExpirationTimeVersion(messageExpirationTimerVersion)
+                                .build());
     }
 
     public void setContactBlocked(RecipientId recipientId, boolean blocked) {