From: AsamK Date: Wed, 16 Oct 2019 16:28:55 +0000 (+0200) Subject: Merge profile commands to a single UpdateProfileCommand X-Git-Tag: v0.6.4~6 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/958d10fcd1c92e92dc6f1a0493150c9cbfda190d?ds=sidebyside Merge profile commands to a single UpdateProfileCommand --- diff --git a/man/signal-cli.1.adoc b/man/signal-cli.1.adoc index e72c3d02..c338bb63 100644 --- a/man/signal-cli.1.adoc +++ b/man/signal-cli.1.adoc @@ -208,20 +208,21 @@ number:: Specify the safety number or fingerprint of the key, only use this option if you have verified the fingerprint. -setProfileName +updateProfile -------------- -Update the name visible by message recipients for the current users. +Update the name and/or avatar image visible by message recipients for the current users. +The profile is stored encrypted on the Signal servers. The decryption key is sent +with every outgoing messages (excluding group messages). -name:: +*--name*:: New name visible by message recipients. -setProfileAvatar ----------------- -Update the avatar visible by message recipients for the current users. - -avatar:: +*--avatar*:: Path to the new avatar visible by message recipients. +*--remove-avatar*:: + Remove the avatar visible by message recipients. + daemon ~~~~~~ signal-cli can run in daemon mode and provides an experimental dbus interface. For diff --git a/src/main/java/org/asamk/signal/commands/Commands.java b/src/main/java/org/asamk/signal/commands/Commands.java index aef34d86..75efaef2 100644 --- a/src/main/java/org/asamk/signal/commands/Commands.java +++ b/src/main/java/org/asamk/signal/commands/Commands.java @@ -20,13 +20,12 @@ public class Commands { addCommand("removeDevice", new RemoveDeviceCommand()); addCommand("removePin", new RemovePinCommand()); addCommand("send", new SendCommand()); - addCommand("setProfileAvatar", new SetProfileAvatarCommand()); - addCommand("setProfileName", new SetProfileNameCommand()); addCommand("setPin", new SetPinCommand()); addCommand("trust", new TrustCommand()); addCommand("unregister", new UnregisterCommand()); addCommand("updateAccount", new UpdateAccountCommand()); addCommand("updateGroup", new UpdateGroupCommand()); + addCommand("updateProfile", new UpdateProfileCommand()); addCommand("verify", new VerifyCommand()); } diff --git a/src/main/java/org/asamk/signal/commands/SetProfileAvatarCommand.java b/src/main/java/org/asamk/signal/commands/SetProfileAvatarCommand.java deleted file mode 100644 index fae66e36..00000000 --- a/src/main/java/org/asamk/signal/commands/SetProfileAvatarCommand.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.asamk.signal.commands; - -import java.io.IOException; -import java.io.File; - -import net.sourceforge.argparse4j.impl.Arguments; -import net.sourceforge.argparse4j.inf.Namespace; -import net.sourceforge.argparse4j.inf.Subparser; -import org.asamk.signal.manager.Manager; - -public class SetProfileAvatarCommand implements LocalCommand { - - @Override - public void attachToSubparser(final Subparser subparser) { - subparser.addArgument("avatar") - .help("Path to new profile avatar"); - subparser.help("Set the avatar for this profile"); - } - - @Override - public int handleCommand(final Namespace ns, final Manager m) { - if (!m.isRegistered()) { - System.err.println("User is not registered."); - return 1; - } - - String avatarPath = ns.getString("avatar"); - File avatarFile = new File(avatarPath); - - try { - m.setProfileAvatar(avatarFile); - } catch (IOException e) { - System.err.println("UpdateAccount error: " + e.getMessage()); - return 3; - } - - return 0; - } - -} diff --git a/src/main/java/org/asamk/signal/commands/SetProfileNameCommand.java b/src/main/java/org/asamk/signal/commands/SetProfileNameCommand.java deleted file mode 100644 index 761261b9..00000000 --- a/src/main/java/org/asamk/signal/commands/SetProfileNameCommand.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.asamk.signal.commands; - -import java.io.IOException; - -import net.sourceforge.argparse4j.impl.Arguments; -import net.sourceforge.argparse4j.inf.Namespace; -import net.sourceforge.argparse4j.inf.Subparser; -import org.asamk.signal.manager.Manager; - -public class SetProfileNameCommand implements LocalCommand { - - @Override - public void attachToSubparser(final Subparser subparser) { - subparser.addArgument("name") - .help("New profile name"); - subparser.help("Set a new name for this profile"); - } - - @Override - public int handleCommand(final Namespace ns, final Manager m) { - if (!m.isRegistered()) { - System.err.println("User is not registered."); - return 1; - } - - String name = ns.getString("name"); - - try { - m.setProfileName(name); - } catch (IOException e) { - System.err.println("UpdateAccount error: " + e.getMessage()); - return 3; - } - - return 0; - } - -} diff --git a/src/main/java/org/asamk/signal/commands/UpdateProfileCommand.java b/src/main/java/org/asamk/signal/commands/UpdateProfileCommand.java new file mode 100644 index 00000000..b4040d48 --- /dev/null +++ b/src/main/java/org/asamk/signal/commands/UpdateProfileCommand.java @@ -0,0 +1,72 @@ +package org.asamk.signal.commands; + +import java.io.IOException; +import java.io.File; + +import net.sourceforge.argparse4j.impl.Arguments; +import net.sourceforge.argparse4j.inf.MutuallyExclusiveGroup; +import net.sourceforge.argparse4j.inf.Namespace; +import net.sourceforge.argparse4j.inf.Subparser; +import org.asamk.signal.manager.Manager; + +public class UpdateProfileCommand implements LocalCommand { + + @Override + public void attachToSubparser(final Subparser subparser) { + final MutuallyExclusiveGroup avatarOptions = subparser.addMutuallyExclusiveGroup(); + avatarOptions.addArgument("--avatar") + .help("Path to new profile avatar"); + avatarOptions.addArgument("--remove-avatar") + .action(Arguments.storeTrue()); + + subparser.addArgument("--name") + .help("New profile name"); + + subparser.help("Set a name and/or avatar image for the user profile"); + } + + @Override + public int handleCommand(final Namespace ns, final Manager m) { + if (!m.isRegistered()) { + System.err.println("User is not registered."); + return 1; + } + + String name = ns.getString("name"); + + if (name != null) { + try { + m.setProfileName(name); + } catch (IOException e) { + System.err.println("UpdateAccount error: " + e.getMessage()); + return 3; + } + } + + String avatarPath = ns.getString("avatar"); + + if (avatarPath != null) { + File avatarFile = new File(avatarPath); + + try { + m.setProfileAvatar(avatarFile); + } catch (IOException e) { + System.err.println("UpdateAccount error: " + e.getMessage()); + return 3; + } + } + + boolean removeAvatar = ns.getBoolean("remove_avatar"); + + if (removeAvatar) { + try { + m.removeProfileAvatar(); + } catch (IOException e) { + System.err.println("UpdateAccount error: " + e.getMessage()); + return 3; + } + } + + return 0; + } +} diff --git a/src/main/java/org/asamk/signal/manager/Manager.java b/src/main/java/org/asamk/signal/manager/Manager.java index 5a26ff56..c0c4a18f 100644 --- a/src/main/java/org/asamk/signal/manager/Manager.java +++ b/src/main/java/org/asamk/signal/manager/Manager.java @@ -210,7 +210,13 @@ public class Manager implements Signal { } public void setProfileAvatar(File avatar) throws IOException { - accountManager.setProfileAvatar(account.getProfileKey(), Utils.createStreamDetailsFromFile(avatar)); + final StreamDetails streamDetails = Utils.createStreamDetailsFromFile(avatar); + accountManager.setProfileAvatar(account.getProfileKey(), streamDetails); + streamDetails.getStream().close(); + } + + public void removeProfileAvatar() throws IOException { + accountManager.setProfileAvatar(account.getProfileKey(), null); } public void unregister() throws IOException {