+ 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() + " (" + e.getClass()
+ .getSimpleName() + ")", e);
+ }
+ }
+
+ private void outputResult(final OutputWriter outputWriter, final Long timestamp, final GroupId groupId) {
+ if (outputWriter instanceof PlainTextWriter) {
+ final var writer = (PlainTextWriter) outputWriter;
+ if (groupId != null) {
+ writer.println("Created new group: \"{}\"", groupId.toBase64());
+ }
+ if (timestamp != null) {
+ writer.println("{}", timestamp);
+ }
+ } else {
+ final var writer = (JsonWriter) outputWriter;
+ final var result = new HashMap<>();
+ if (timestamp != null) {
+ result.put("timestamp", timestamp);
+ }
+ if (groupId != null) {
+ result.put("groupId", groupId.toBase64());