X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/610e32aa52ffd71ce66ee313b559e5ab57fd12fa..c9f5550d1821ee99879c75db124baf46642fd846:/src/main/java/org/asamk/signal/commands/UpdateGroupCommand.java diff --git a/src/main/java/org/asamk/signal/commands/UpdateGroupCommand.java b/src/main/java/org/asamk/signal/commands/UpdateGroupCommand.java index 00da38d4..68bce2d2 100644 --- a/src/main/java/org/asamk/signal/commands/UpdateGroupCommand.java +++ b/src/main/java/org/asamk/signal/commands/UpdateGroupCommand.java @@ -4,7 +4,6 @@ import net.sourceforge.argparse4j.impl.Arguments; import net.sourceforge.argparse4j.inf.Namespace; import net.sourceforge.argparse4j.inf.Subparser; -import org.asamk.Signal; import org.asamk.signal.JsonWriter; import org.asamk.signal.OutputWriter; import org.asamk.signal.PlainTextWriter; @@ -14,25 +13,21 @@ import org.asamk.signal.commands.exceptions.UserErrorException; import org.asamk.signal.manager.AttachmentInvalidException; import org.asamk.signal.manager.Manager; import org.asamk.signal.manager.groups.GroupId; -import org.asamk.signal.manager.groups.GroupIdFormatException; import org.asamk.signal.manager.groups.GroupLinkState; import org.asamk.signal.manager.groups.GroupNotFoundException; import org.asamk.signal.manager.groups.GroupPermission; +import org.asamk.signal.manager.groups.GroupSendingNotAllowedException; import org.asamk.signal.manager.groups.NotAGroupMemberException; +import org.asamk.signal.util.CommandUtil; import org.asamk.signal.util.ErrorUtils; -import org.asamk.signal.util.Util; -import org.freedesktop.dbus.exceptions.DBusExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.whispersystems.signalservice.api.util.InvalidNumberException; import java.io.File; import java.io.IOException; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; -public class UpdateGroupCommand implements DbusCommand, JsonRpcLocalCommand { +public class UpdateGroupCommand implements JsonRpcLocalCommand { private final static Logger logger = LoggerFactory.getLogger(UpdateGroupCommand.class); @@ -114,24 +109,19 @@ public class UpdateGroupCommand implements DbusCommand, JsonRpcLocalCommand { public void handleCommand( final Namespace ns, final Manager m, final OutputWriter outputWriter ) throws CommandException { - GroupId groupId = null; final var groupIdString = ns.getString("group-id"); - if (groupIdString != null) { - try { - groupId = Util.decodeGroupId(groupIdString); - } catch (GroupIdFormatException e) { - throw new UserErrorException("Invalid group id: " + e.getMessage()); - } - } + var groupId = CommandUtil.getGroupId(groupIdString); + + final var localNumber = m.getSelfNumber(); var groupName = ns.getString("name"); var groupDescription = ns.getString("description"); - var groupMembers = ns.getList("member"); - var groupRemoveMembers = ns.getList("remove-member"); - var groupAdmins = ns.getList("admin"); - var groupRemoveAdmins = ns.getList("remove-admin"); + 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 groupResetLink = Boolean.TRUE.equals(ns.getBoolean("reset-link")); var groupLinkState = getGroupLinkState(ns.getString("link")); var groupExpiration = ns.getInt("expiration"); var groupAddMemberPermission = getGroupPermission(ns.getString("set-permission-add-member")); @@ -140,12 +130,14 @@ public class UpdateGroupCommand implements DbusCommand, JsonRpcLocalCommand { try { boolean isNewGroup = false; + Long timestamp = null; if (groupId == null) { isNewGroup = true; var results = m.createGroup(groupName, groupMembers, groupAvatar == null ? null : new File(groupAvatar)); - ErrorUtils.handleSendMessageResults(results.second()); + timestamp = results.second().getTimestamp(); + ErrorUtils.handleSendMessageResults(results.second().getResults()); groupId = results.first(); groupName = null; groupMembers = null; @@ -168,65 +160,18 @@ public class UpdateGroupCommand implements DbusCommand, JsonRpcLocalCommand { groupSendMessagesPermission == null ? null : groupSendMessagesPermission == GroupPermission.ONLY_ADMINS); - Long timestamp = null; if (results != null) { - timestamp = results.first(); - ErrorUtils.handleSendMessageResults(results.second()); + 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 e) { - logger.warn("Unknown group id: {}", groupIdString); - } catch (NotAGroupMemberException e) { - logger.warn("You're not a group member"); - } catch (InvalidNumberException e) { - throw new UserErrorException("Failed to parse member number: " + 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 { - 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 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()); + throw new UnexpectedErrorException("Failed to send message: " + e.getMessage() + " (" + e.getClass() + .getSimpleName() + ")", e); } }