1 package org
.asamk
.signal
.commands
;
3 import net
.sourceforge
.argparse4j
.impl
.Arguments
;
4 import net
.sourceforge
.argparse4j
.inf
.Namespace
;
5 import net
.sourceforge
.argparse4j
.inf
.Subparser
;
7 import org
.asamk
.signal
.commands
.exceptions
.CommandException
;
8 import org
.asamk
.signal
.commands
.exceptions
.IOErrorException
;
9 import org
.asamk
.signal
.manager
.Manager
;
10 import org
.asamk
.signal
.manager
.api
.UpdateProfile
;
11 import org
.asamk
.signal
.output
.OutputWriter
;
14 import java
.io
.IOException
;
15 import java
.util
.Base64
;
17 public class UpdateProfileCommand
implements JsonRpcLocalCommand
{
20 public String
getName() {
21 return "updateProfile";
25 public void attachToSubparser(final Subparser subparser
) {
26 subparser
.help("Set a name, about and avatar image for the user profile");
27 subparser
.addArgument("--given-name", "--name").help("New profile (given) name");
28 subparser
.addArgument("--family-name").help("New profile family name (optional)");
29 subparser
.addArgument("--about").help("New profile about text");
30 subparser
.addArgument("--about-emoji").help("New profile about emoji");
31 subparser
.addArgument("--mobile-coin-address").help("New MobileCoin address (Base64 encoded public address)");
33 final var avatarOptions
= subparser
.addMutuallyExclusiveGroup();
34 avatarOptions
.addArgument("--avatar").help("Path to new profile avatar");
35 avatarOptions
.addArgument("--remove-avatar").action(Arguments
.storeTrue());
39 public void handleCommand(
40 final Namespace ns
, final Manager m
, final OutputWriter outputWriter
41 ) throws CommandException
{
42 var givenName
= ns
.getString("given-name");
43 var familyName
= ns
.getString("family-name");
44 var about
= ns
.getString("about");
45 var aboutEmoji
= ns
.getString("about-emoji");
46 var mobileCoinAddressString
= ns
.getString("mobile-coin-address");
47 var mobileCoinAddress
= mobileCoinAddressString
== null
49 : Base64
.getDecoder().decode(mobileCoinAddressString
);
51 var avatarPath
= ns
.getString("avatar");
52 boolean removeAvatar
= Boolean
.TRUE
.equals(ns
.getBoolean("remove-avatar"));
53 File avatarFile
= removeAvatar
|| avatarPath
== null ?
null : new File(avatarPath
);
56 m
.updateProfile(UpdateProfile
.newBuilder()
57 .withGivenName(givenName
)
58 .withFamilyName(familyName
)
60 .withAboutEmoji(aboutEmoji
)
61 .withMobileCoinAddress(mobileCoinAddress
)
62 .withAvatar(avatarFile
)
63 .withDeleteAvatar(removeAvatar
)
65 } catch (IOException e
) {
66 throw new IOErrorException("Update profile error: " + e
.getMessage(), e
);