]> 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.
 
-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
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("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 (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 {
-        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 {