]> nmode's Git Repositories - signal-cli/commitdiff
Merge profile commands to a single UpdateProfileCommand
authorAsamK <asamk@gmx.de>
Wed, 16 Oct 2019 16:28:55 +0000 (18:28 +0200)
committerAsamK <asamk@gmx.de>
Wed, 16 Oct 2019 17:27:42 +0000 (19:27 +0200)
man/signal-cli.1.adoc
src/main/java/org/asamk/signal/commands/Commands.java
src/main/java/org/asamk/signal/commands/SetProfileAvatarCommand.java [deleted file]
src/main/java/org/asamk/signal/commands/SetProfileNameCommand.java [deleted file]
src/main/java/org/asamk/signal/commands/UpdateProfileCommand.java [new file with mode: 0644]
src/main/java/org/asamk/signal/manager/Manager.java

index e72c3d022ccb83d328e7094f1276e9b9e0997aa6..c338bb6382ef4b0c5f0cd67f1bcbb3e1f73b0a31 100644 (file)
@@ -208,20 +208,21 @@ number::
        Specify the safety number or fingerprint of the key, only use this option if you have verified
        the fingerprint.
 
        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.
 
        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.
 
        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
 daemon
 ~~~~~~
 signal-cli can run in daemon mode and provides an experimental dbus interface. For
index aef34d8608e04bf67c1765c8949a7b16d9843f46..75efaef2d1a0f77070999a0cafb980fb194f2ac6 100644 (file)
@@ -20,13 +20,12 @@ public class Commands {
         addCommand("removeDevice", new RemoveDeviceCommand());
         addCommand("removePin", new RemovePinCommand());
         addCommand("send", new SendCommand());
         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("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());
     }
 
         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 (file)
index fae66e3..0000000
+++ /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 (file)
index 761261b..0000000
+++ /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 (file)
index 0000000..b4040d4
--- /dev/null
@@ -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;
+    }
+}
index 5a26ff56622bec74b45d543f249eb8b67a7981e3..c0c4a18f243474e368353271755b128219b88344 100644 (file)
@@ -210,7 +210,13 @@ public class Manager implements Signal {
     }
 
     public void setProfileAvatar(File avatar) throws IOException {
     }
 
     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 {
     }
 
     public void unregister() throws IOException {