]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/helper/ContactHelper.java
Extend updateContact command with nick given/family name and note
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / ContactHelper.java
index 80df94478338e59064dd8469321ccb58cb45812d..8461fbe0fd66483e03703af04cc5a9dcc074c5e0 100644 (file)
@@ -17,34 +17,92 @@ public class ContactHelper {
         return sourceContact != null && sourceContact.isBlocked();
     }
 
-    public void setContactName(final RecipientId recipientId, final String givenName, final String familyName) {
+    public void setContactName(
+            final RecipientId recipientId,
+            final String givenName,
+            final String familyName,
+            final String nickGivenName,
+            final String nickFamilyName,
+            final String note
+    ) {
         var contact = account.getContactStore().getContact(recipientId);
         final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
+        builder.withIsHidden(false);
         if (givenName != null) {
             builder.withGivenName(givenName);
         }
         if (familyName != null) {
             builder.withFamilyName(familyName);
         }
+        if (nickGivenName != null) {
+            builder.withNickNameGivenName(nickGivenName);
+        }
+        if (nickFamilyName != null) {
+            builder.withNickNameFamilyName(nickFamilyName);
+        }
+        if (note != null) {
+            builder.withNote(note);
+        }
         account.getContactStore().storeContact(recipientId, builder.build());
     }
 
     public void setExpirationTimer(RecipientId recipientId, int messageExpirationTimer) {
         var contact = account.getContactStore().getContact(recipientId);
-        if (contact != null && contact.getMessageExpirationTime() == messageExpirationTimer) {
+        if (contact != null && contact.messageExpirationTime() == messageExpirationTimer) {
+            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)
+                                .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).build());
+                .storeContact(recipientId,
+                        builder.withMessageExpirationTime(messageExpirationTimer)
+                                .withMessageExpirationTimeVersion(messageExpirationTimerVersion)
+                                .build());
     }
 
     public void setContactBlocked(RecipientId recipientId, boolean blocked) {
         var contact = account.getContactStore().getContact(recipientId);
         final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
         if (blocked) {
-            builder.withProfileSharingEnabled(false);
+            builder.withIsProfileSharingEnabled(false);
         }
-        account.getContactStore().storeContact(recipientId, builder.withBlocked(blocked).build());
+        account.getContactStore().storeContact(recipientId, builder.withIsBlocked(blocked).build());
+    }
+
+    public void setContactProfileSharing(RecipientId recipientId, boolean profileSharing) {
+        var contact = account.getContactStore().getContact(recipientId);
+        final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
+        builder.withIsProfileSharingEnabled(profileSharing);
+        account.getContactStore().storeContact(recipientId, builder.build());
+    }
+
+    public void setContactHidden(RecipientId recipientId, boolean hidden) {
+        var contact = account.getContactStore().getContact(recipientId);
+        final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
+        account.getContactStore().storeContact(recipientId, builder.withIsHidden(hidden).build());
     }
 }