From: AsamK Date: Mon, 23 May 2022 14:42:38 +0000 (+0200) Subject: Split contact name field in given name and family name X-Git-Tag: v0.10.7~16 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/5b1c6c0d64202c60c8d736f383b17375acae6d6e Split contact name field in given name and family name --- diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/ContactHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/ContactHelper.java index 164fea76..a10436e8 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/ContactHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/ContactHelper.java @@ -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) { diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/StorageHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/StorageHelper.java index b1a653fd..ff8232e1 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/StorageHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/StorageHelper.java @@ -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); diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java index d98f9eef..035e5770 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java @@ -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()); diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java index 521e21d9..27e96016 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java @@ -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, diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/recipients/Contact.java b/lib/src/main/java/org/asamk/signal/manager/storage/recipients/Contact.java index 25d6151f..a1091b45 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/recipients/Contact.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/recipients/Contact.java @@ -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; } diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/recipients/RecipientStore.java b/lib/src/main/java/org/asamk/signal/manager/storage/recipients/RecipientStore.java index d2cc94d6..9011ae37 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/recipients/RecipientStore.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/recipients/RecipientStore.java @@ -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, diff --git a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java index 320a8533..c960b34d 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java @@ -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(); }