+ var groupName = ns.getString("name");
+ var groupDescription = ns.getString("description");
+ var groupMembers = CommandUtil.getSingleRecipientIdentifiers(ns.getList("member"), localNumber);
+ var groupRemoveMembers = CommandUtil.getSingleRecipientIdentifiers(ns.getList("remove-member"), localNumber);
+ var groupAdmins = CommandUtil.getSingleRecipientIdentifiers(ns.getList("admin"), localNumber);
+ var groupRemoveAdmins = CommandUtil.getSingleRecipientIdentifiers(ns.getList("remove-admin"), localNumber);
+ var groupAvatar = ns.getString("avatar");
+ var groupResetLink = ns.getBoolean("reset-link");
+ var groupLinkState = getGroupLinkState(ns.getString("link"));
+ var groupExpiration = ns.getInt("expiration");
+ var groupAddMemberPermission = getGroupPermission(ns.getString("set-permission-add-member"));
+ var groupEditDetailsPermission = getGroupPermission(ns.getString("set-permission-edit-details"));
+ var groupSendMessagesPermission = getGroupPermission(ns.getString("set-permission-send-messages"));
+
+ try {
+ boolean isNewGroup = false;
+ Long timestamp = null;
+ if (groupId == null) {
+ isNewGroup = true;
+ var results = m.createGroup(groupName,
+ groupMembers,
+ groupAvatar == null ? null : new File(groupAvatar));
+ timestamp = results.second().getTimestamp();
+ ErrorUtils.handleSendMessageResults(results.second().getResults());
+ groupId = results.first();
+ groupName = null;
+ groupMembers = null;
+ groupAvatar = null;
+ }
+
+ var results = m.updateGroup(groupId,
+ groupName,
+ groupDescription,
+ groupMembers,
+ groupRemoveMembers,
+ groupAdmins,
+ groupRemoveAdmins,
+ groupResetLink,
+ groupLinkState,
+ groupAddMemberPermission,
+ groupEditDetailsPermission,
+ groupAvatar == null ? null : new File(groupAvatar),
+ groupExpiration,
+ groupSendMessagesPermission == null
+ ? null
+ : groupSendMessagesPermission == GroupPermission.ONLY_ADMINS);
+ if (results != null) {
+ timestamp = results.getTimestamp();
+ ErrorUtils.handleSendMessageResults(results.getResults());
+ }
+ outputResult(outputWriter, timestamp, isNewGroup ? groupId : null);
+ } catch (AttachmentInvalidException e) {
+ throw new UserErrorException("Failed to add avatar attachment for group\": " + e.getMessage());
+ } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
+ throw new UserErrorException(e.getMessage());
+ } catch (IOException e) {
+ throw new UnexpectedErrorException("Failed to send message: " + e.getMessage());
+ }
+ }
+
+ @Override
+ public void handleCommand(
+ final Namespace ns, final Signal signal, final OutputWriter outputWriter
+ ) throws CommandException {
+ var groupId = CommandUtil.getGroupId(ns.getString("group-id"));
+
+ var groupName = ns.getString("name");