+ @Override
+ public void handleCommand(
+ final Namespace ns, final Manager m, final OutputWriter outputWriter
+ ) throws CommandException {
+ var givenName = ns.getString("given-name");
+ var familyName = ns.getString("family-name");
+ var about = ns.getString("about");
+ var aboutEmoji = ns.getString("about-emoji");
+ var mobileCoinAddressString = ns.getString("mobile-coin-address");
+ var mobileCoinAddress = mobileCoinAddressString == null
+ ? null
+ : Base64.getDecoder().decode(mobileCoinAddressString);
+
+ var avatarPath = ns.getString("avatar");
+ boolean removeAvatar = Boolean.TRUE.equals(ns.getBoolean("remove-avatar"));
+ String avatarFile = removeAvatar || avatarPath == null ? null : avatarPath;
+
+ try {
+ m.updateProfile(UpdateProfile.newBuilder()
+ .withGivenName(givenName)
+ .withFamilyName(familyName)
+ .withAbout(about)
+ .withAboutEmoji(aboutEmoji)
+ .withMobileCoinAddress(mobileCoinAddress)
+ .withAvatar(avatarFile)
+ .withDeleteAvatar(removeAvatar)
+ .build());
+ } catch (IOException e) {
+ throw new IOErrorException("Update profile error: " + e.getMessage(), e);