]> nmode's Git Repositories - signal-cli/commitdiff
Split contact name field in given name and family name
authorAsamK <asamk@gmx.de>
Mon, 23 May 2022 14:42:38 +0000 (16:42 +0200)
committerAsamK <asamk@gmx.de>
Mon, 23 May 2022 14:42:38 +0000 (16:42 +0200)
lib/src/main/java/org/asamk/signal/manager/helper/ContactHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/StorageHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java
lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java
lib/src/main/java/org/asamk/signal/manager/storage/recipients/Contact.java
lib/src/main/java/org/asamk/signal/manager/storage/recipients/RecipientStore.java
src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java

index 164fea761d2d541986b8b4b8537f034f78947a8f..a10436e8708596b80670e0df09636bb679982d1d 100644 (file)
@@ -20,7 +20,7 @@ public class ContactHelper {
     public void setContactName(final RecipientId recipientId, final String name) {
         var contact = account.getContactStore().getContact(recipientId);
         final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
-        account.getContactStore().storeContact(recipientId, builder.withName(name).build());
+        account.getContactStore().storeContact(recipientId, builder.withGivenName(name).build());
     }
 
     public void setExpirationTimer(RecipientId recipientId, int messageExpirationTimer) {
index b1a653fd7aa5b19e9758355e712ab33a9a42ec37..ff8232e1113194047a800d15ba91cdff98674ddd 100644 (file)
@@ -95,9 +95,9 @@ public class StorageHelper {
                 || blocked != contactRecord.isBlocked()
                 || profileShared != contactRecord.isProfileSharingEnabled()) {
             final var contactBuilder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
-            final var name = contactRecord.getGivenName().orElse("") + " " + contactRecord.getFamilyName().orElse("");
             final var newContact = contactBuilder.withBlocked(contactRecord.isBlocked())
-                    .withName(name.trim())
+                    .withGivenName(contactRecord.getGivenName().orElse(null))
+                    .withFamilyName(contactRecord.getFamilyName().orElse(null))
                     .withProfileSharingEnabled(contactRecord.isProfileSharingEnabled())
                     .build();
             account.getContactStore().storeContact(recipientId, newContact);
index d98f9eef7006c12ea77f1c0bb5b8014430150261..035e57706757282416500ac29a7d721165fab22b 100644 (file)
@@ -261,7 +261,7 @@ public class SyncHelper {
             var contact = account.getContactStore().getContact(recipientId);
             final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
             if (c.getName().isPresent()) {
-                builder.withName(c.getName().get());
+                builder.withGivenName(c.getName().get());
             }
             if (c.getColor().isPresent()) {
                 builder.withColor(c.getColor().get());
index 521e21d9152ddae129b72020c1b965f42240dccc..27e96016ad16c365f02d08574433477af0783205 100644 (file)
@@ -717,6 +717,7 @@ public class SignalAccount implements Closeable {
                 final var recipientId = getRecipientStore().resolveRecipientTrusted(contact.getAddress());
                 getContactStore().storeContact(recipientId,
                         new Contact(contact.name,
+                                null,
                                 contact.color,
                                 contact.messageExpirationTime,
                                 contact.blocked,
index 25d6151ff101baa49157bf8936fd16bce4fbffe4..a1091b455fc146087a20522ce12c3f7e4cd56d3f 100644 (file)
@@ -1,10 +1,14 @@
 package org.asamk.signal.manager.storage.recipients;
 
+import org.whispersystems.signalservice.internal.util.Util;
+
 import java.util.Objects;
 
 public class Contact {
 
-    private final String name;
+    private final String givenName;
+
+    private final String familyName;
 
     private final String color;
 
@@ -17,14 +21,16 @@ public class Contact {
     private final boolean profileSharingEnabled;
 
     public Contact(
-            final String name,
+            final String givenName,
+            final String familyName,
             final String color,
             final int messageExpirationTime,
             final boolean blocked,
             final boolean archived,
             final boolean profileSharingEnabled
     ) {
-        this.name = name;
+        this.givenName = givenName;
+        this.familyName = familyName;
         this.color = color;
         this.messageExpirationTime = messageExpirationTime;
         this.blocked = blocked;
@@ -33,7 +39,8 @@ public class Contact {
     }
 
     private Contact(final Builder builder) {
-        name = builder.name;
+        givenName = builder.givenName;
+        familyName = builder.familyName;
         color = builder.color;
         messageExpirationTime = builder.messageExpirationTime;
         blocked = builder.blocked;
@@ -47,7 +54,8 @@ public class Contact {
 
     public static Builder newBuilder(final Contact copy) {
         Builder builder = new Builder();
-        builder.name = copy.getName();
+        builder.givenName = copy.getGivenName();
+        builder.familyName = copy.getFamilyName();
         builder.color = copy.getColor();
         builder.messageExpirationTime = copy.getMessageExpirationTime();
         builder.blocked = copy.isBlocked();
@@ -57,7 +65,26 @@ public class Contact {
     }
 
     public String getName() {
-        return name;
+        final var noGivenName = Util.isEmpty(givenName);
+        final var noFamilyName = Util.isEmpty(familyName);
+
+        if (noGivenName && noFamilyName) {
+            return "";
+        } else if (noGivenName) {
+            return familyName;
+        } else if (noFamilyName) {
+            return givenName;
+        }
+
+        return givenName + " " + familyName;
+    }
+
+    public String getGivenName() {
+        return givenName;
+    }
+
+    public String getFamilyName() {
+        return familyName;
     }
 
     public String getColor() {
@@ -89,18 +116,26 @@ public class Contact {
                 && blocked == contact.blocked
                 && archived == contact.archived
                 && profileSharingEnabled == contact.profileSharingEnabled
-                && Objects.equals(name, contact.name)
+                && Objects.equals(givenName, contact.givenName)
+                && Objects.equals(familyName, contact.familyName)
                 && Objects.equals(color, contact.color);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(name, color, messageExpirationTime, blocked, archived, profileSharingEnabled);
+        return Objects.hash(givenName,
+                familyName,
+                color,
+                messageExpirationTime,
+                blocked,
+                archived,
+                profileSharingEnabled);
     }
 
     public static final class Builder {
 
-        private String name;
+        private String givenName;
+        private String familyName;
         private String color;
         private int messageExpirationTime;
         private boolean blocked;
@@ -110,8 +145,13 @@ public class Contact {
         private Builder() {
         }
 
-        public Builder withName(final String val) {
-            name = val;
+        public Builder withGivenName(final String val) {
+            givenName = val;
+            return this;
+        }
+
+        public Builder withFamilyName(final String val) {
+            familyName = val;
             return this;
         }
 
index d2cc94d6a6a9a0a997c67c25d5cea7174f9a4e73..9011ae37421fcbd346c933e5a22e459d68e10d8b 100644 (file)
@@ -73,6 +73,7 @@ public class RecipientStore implements RecipientResolver, RecipientTrustedResolv
                 Contact contact = null;
                 if (r.contact != null) {
                     contact = new Contact(r.contact.name,
+                            null,
                             r.contact.color,
                             r.contact.messageExpirationTime,
                             r.contact.blocked,
index 320a8533f8a63ff5b9b285e32bb147cbcf5ce401..c960b34d3539ecf2bf8d34affc82523be5fb9283 100644 (file)
@@ -574,7 +574,7 @@ public class DbusManagerImpl implements Manager {
             }
             return Recipient.newBuilder()
                     .withAddress(new RecipientAddress(null, n))
-                    .withContact(new Contact(contactName, null, 0, contactBlocked, false, false))
+                    .withContact(new Contact(contactName, null, null, 0, contactBlocked, false, false))
                     .build();
         }).filter(Objects::nonNull).toList();
     }