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
;
13 import java
.io
.IOException
;
14 import java
.util
.Base64
;
16 public class UpdateProfileCommand
implements JsonRpcLocalCommand
{
19 public String
getName() {
20 return "updateProfile";
24 public void attachToSubparser(final Subparser subparser
) {
25 subparser
.help("Set a name, about and avatar image for the user profile");
26 subparser
.addArgument("--given-name", "--name").help("New profile (given) name");
27 subparser
.addArgument("--family-name").help("New profile family name (optional)");
28 subparser
.addArgument("--about").help("New profile about text");
29 subparser
.addArgument("--about-emoji").help("New profile about emoji");
30 subparser
.addArgument("--mobile-coin-address").help("New MobileCoin address (Base64 encoded public address)");
32 final var avatarOptions
= subparser
.addMutuallyExclusiveGroup();
33 avatarOptions
.addArgument("--avatar").help("Path to new profile avatar");
34 avatarOptions
.addArgument("--remove-avatar").action(Arguments
.storeTrue());
38 public void handleCommand(
39 final Namespace ns
, final Manager m
, final OutputWriter outputWriter
40 ) throws CommandException
{
41 var givenName
= ns
.getString("given-name");
42 var familyName
= ns
.getString("family-name");
43 var about
= ns
.getString("about");
44 var aboutEmoji
= ns
.getString("about-emoji");
45 var mobileCoinAddressString
= ns
.getString("mobile-coin-address");
46 var mobileCoinAddress
= mobileCoinAddressString
== null
48 : Base64
.getDecoder().decode(mobileCoinAddressString
);
50 var avatarPath
= ns
.getString("avatar");
51 boolean removeAvatar
= Boolean
.TRUE
.equals(ns
.getBoolean("remove-avatar"));
52 String avatarFile
= removeAvatar
|| avatarPath
== null ?
null : avatarPath
;
55 m
.updateProfile(UpdateProfile
.newBuilder()
56 .withGivenName(givenName
)
57 .withFamilyName(familyName
)
59 .withAboutEmoji(aboutEmoji
)
60 .withMobileCoinAddress(mobileCoinAddress
)
61 .withAvatar(avatarFile
)
62 .withDeleteAvatar(removeAvatar
)
64 } catch (IOException e
) {
65 throw new IOErrorException("Update profile error: " + e
.getMessage(), e
);