From badbb55ef2151d7396c23be5a827c40712cd645a Mon Sep 17 00:00:00 2001 From: AsamK Date: Sun, 29 May 2022 22:21:24 +0200 Subject: [PATCH] Split given/family name in updateContact command --- .../java/org/asamk/signal/manager/Manager.java | 2 +- .../org/asamk/signal/manager/ManagerImpl.java | 5 +++-- .../signal/manager/helper/ContactHelper.java | 10 ++++++++-- man/signal-cli.1.adoc | 7 +++++-- .../signal/commands/UpdateContactCommand.java | 15 ++++++++++++--- .../org/asamk/signal/dbus/DbusManagerImpl.java | 4 ++-- .../org/asamk/signal/dbus/DbusSignalImpl.java | 2 +- 7 files changed, 32 insertions(+), 13 deletions(-) diff --git a/lib/src/main/java/org/asamk/signal/manager/Manager.java b/lib/src/main/java/org/asamk/signal/manager/Manager.java index e69826aa..4bc4019c 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -149,7 +149,7 @@ public interface Manager extends Closeable { void deleteContact(RecipientIdentifier.Single recipient); void setContactName( - RecipientIdentifier.Single recipient, String name + RecipientIdentifier.Single recipient, String givenName, final String familyName ) throws NotPrimaryDeviceException, IOException, UnregisteredRecipientException; void setContactsBlocked( diff --git a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java index daff69e0..dc7e743e 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java @@ -705,12 +705,13 @@ class ManagerImpl implements Manager { @Override public void setContactName( - RecipientIdentifier.Single recipient, String name + RecipientIdentifier.Single recipient, String givenName, final String familyName ) throws NotPrimaryDeviceException, UnregisteredRecipientException { if (!account.isPrimaryDevice()) { throw new NotPrimaryDeviceException(); } - context.getContactHelper().setContactName(context.getRecipientHelper().resolveRecipient(recipient), name); + context.getContactHelper() + .setContactName(context.getRecipientHelper().resolveRecipient(recipient), givenName, familyName); } @Override 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 a10436e8..f43d083c 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 @@ -17,10 +17,16 @@ public class ContactHelper { return sourceContact != null && sourceContact.isBlocked(); } - public void setContactName(final RecipientId recipientId, final String name) { + public void setContactName(final RecipientId recipientId, final String givenName, final String familyName) { var contact = account.getContactStore().getContact(recipientId); final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact); - account.getContactStore().storeContact(recipientId, builder.withGivenName(name).build()); + if (givenName != null) { + builder.withGivenName(givenName); + } + if (familyName != null) { + builder.withFamilyName(familyName); + } + account.getContactStore().storeContact(recipientId, builder.build()); } public void setExpirationTimer(RecipientId recipientId, int messageExpirationTimer) { diff --git a/man/signal-cli.1.adoc b/man/signal-cli.1.adoc index 4d32ea5f..6258243a 100644 --- a/man/signal-cli.1.adoc +++ b/man/signal-cli.1.adoc @@ -522,8 +522,11 @@ If the contact doesn't exist yet, it will be added. NUMBER:: Specify the contact phone number. -*-n*, *--name*:: -Specify the new name for this contact. +*--given-name* NAME, *--name* NAME:: +New (given) name. + +*--family-name* FAMILY_NAME:: +New family name. *-e*, *--expiration* EXPIRATION_SECONDS:: Set expiration time of messages (seconds). diff --git a/src/main/java/org/asamk/signal/commands/UpdateContactCommand.java b/src/main/java/org/asamk/signal/commands/UpdateContactCommand.java index c5305f30..7ff91e9b 100644 --- a/src/main/java/org/asamk/signal/commands/UpdateContactCommand.java +++ b/src/main/java/org/asamk/signal/commands/UpdateContactCommand.java @@ -26,6 +26,8 @@ public class UpdateContactCommand implements JsonRpcLocalCommand { subparser.help("Update the details of a given contact"); subparser.addArgument("recipient").help("Contact number"); subparser.addArgument("-n", "--name").help("New contact name"); + subparser.addArgument("--given-name").help("New contact given name"); + subparser.addArgument("--family-name").help("New contact family name"); subparser.addArgument("-e", "--expiration").type(int.class).help("Set expiration time of messages (seconds)"); } @@ -42,9 +44,16 @@ public class UpdateContactCommand implements JsonRpcLocalCommand { m.setExpirationTimer(recipient, expiration); } - var name = ns.getString("name"); - if (name != null) { - m.setContactName(recipient, name); + var givenName = ns.getString("given-name"); + var familyName = ns.getString("family-name"); + if (givenName == null) { + givenName = ns.getString("name"); + if (givenName != null && familyName == null) { + familyName = ""; + } + } + if (givenName != null || familyName != null) { + m.setContactName(recipient, givenName, familyName); } } catch (IOException e) { throw new IOErrorException("Update contact error: " + e.getMessage(), e); diff --git a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java index 822bb14b..9ffb0795 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java @@ -409,9 +409,9 @@ public class DbusManagerImpl implements Manager { @Override public void setContactName( - final RecipientIdentifier.Single recipient, final String name + final RecipientIdentifier.Single recipient, final String givenName, final String familyName ) throws NotPrimaryDeviceException { - signal.setContactName(recipient.getIdentifier(), name); + signal.setContactName(recipient.getIdentifier(), givenName); } @Override diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index ce35ef14..d2ac27a9 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -492,7 +492,7 @@ public class DbusSignalImpl implements Signal { @Override public void setContactName(final String number, final String name) { try { - m.setContactName(getSingleRecipientIdentifier(number, m.getSelfNumber()), name); + m.setContactName(getSingleRecipientIdentifier(number, m.getSelfNumber()), name, ""); } catch (NotPrimaryDeviceException e) { throw new Error.Failure("This command doesn't work on linked devices."); } catch (IOException e) { -- 2.50.1