+ logger.warn("You're not a group member");
+ } catch (InvalidNumberException e) {
+ throw new UserErrorException("Failed to parse member number: " + 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 {
+ byte[] groupId = null;
+ if (ns.getString("group-id") != null) {
+ try {
+ groupId = Util.decodeGroupId(ns.getString("group-id")).serialize();
+ } catch (GroupIdFormatException e) {
+ throw new UserErrorException("Invalid group id: " + e.getMessage());
+ }
+ }
+ if (groupId == null) {
+ groupId = new byte[0];
+ }
+
+ var groupName = ns.getString("name");
+ if (groupName == null) {
+ groupName = "";
+ }
+
+ List<String> groupMembers = ns.getList("member");
+ if (groupMembers == null) {
+ groupMembers = new ArrayList<>();
+ }
+
+ var groupAvatar = ns.getString("avatar");
+ if (groupAvatar == null) {
+ groupAvatar = "";
+ }
+
+ try {
+ var newGroupId = signal.updateGroup(groupId, groupName, groupMembers, groupAvatar);
+ if (groupId.length != newGroupId.length) {
+ outputResult(outputWriter, null, GroupId.unknownVersion(newGroupId));
+ }
+ } catch (Signal.Error.AttachmentInvalid e) {
+ throw new UserErrorException("Failed to add avatar attachment for group\": " + e.getMessage());
+ } catch (DBusExecutionException e) {
+ throw new UnexpectedErrorException("Failed to send message: " + e.getMessage());
+ }
+ }
+
+ 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());
+ }
+ writer.write(result);