]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/UpdateGroupCommand.java
Mark our own identity key as trusted initially
[signal-cli] / src / main / java / org / asamk / signal / commands / UpdateGroupCommand.java
1 package org.asamk.signal.commands;
2
3 import net.sourceforge.argparse4j.inf.Namespace;
4 import net.sourceforge.argparse4j.inf.Subparser;
5
6 import org.asamk.Signal;
7 import org.asamk.signal.AttachmentInvalidException;
8 import org.asamk.signal.GroupIdFormatException;
9 import org.asamk.signal.GroupNotFoundException;
10 import org.asamk.signal.NotAGroupMemberException;
11 import org.asamk.signal.util.Util;
12 import org.whispersystems.signalservice.api.push.exceptions.EncapsulatedExceptions;
13 import org.whispersystems.signalservice.api.util.InvalidNumberException;
14 import org.whispersystems.util.Base64;
15
16 import java.io.IOException;
17 import java.util.ArrayList;
18 import java.util.List;
19
20 import static org.asamk.signal.util.ErrorUtils.handleEncapsulatedExceptions;
21 import static org.asamk.signal.util.ErrorUtils.handleGroupIdFormatException;
22 import static org.asamk.signal.util.ErrorUtils.handleGroupNotFoundException;
23 import static org.asamk.signal.util.ErrorUtils.handleIOException;
24 import static org.asamk.signal.util.ErrorUtils.handleInvalidNumberException;
25 import static org.asamk.signal.util.ErrorUtils.handleNotAGroupMemberException;
26
27 public class UpdateGroupCommand implements DbusCommand {
28
29 @Override
30 public void attachToSubparser(final Subparser subparser) {
31 subparser.addArgument("-g", "--group")
32 .help("Specify the recipient group ID.");
33 subparser.addArgument("-n", "--name")
34 .help("Specify the new group name.");
35 subparser.addArgument("-a", "--avatar")
36 .help("Specify a new group avatar image file");
37 subparser.addArgument("-m", "--member")
38 .nargs("*")
39 .help("Specify one or more members to add to the group");
40 }
41
42 @Override
43 public int handleCommand(final Namespace ns, final Signal signal) {
44 if (!signal.isRegistered()) {
45 System.err.println("User is not registered.");
46 return 1;
47 }
48
49 try {
50 byte[] groupId = null;
51 if (ns.getString("group") != null) {
52 groupId = Util.decodeGroupId(ns.getString("group"));
53 }
54 if (groupId == null) {
55 groupId = new byte[0];
56 }
57 String groupName = ns.getString("name");
58 if (groupName == null) {
59 groupName = "";
60 }
61 List<String> groupMembers = ns.getList("member");
62 if (groupMembers == null) {
63 groupMembers = new ArrayList<>();
64 }
65 String groupAvatar = ns.getString("avatar");
66 if (groupAvatar == null) {
67 groupAvatar = "";
68 }
69 byte[] newGroupId = signal.updateGroup(groupId, groupName, groupMembers, groupAvatar);
70 if (groupId.length != newGroupId.length) {
71 System.out.println("Creating new group \"" + Base64.encodeBytes(newGroupId) + "\" …");
72 }
73 return 0;
74 } catch (IOException e) {
75 handleIOException(e);
76 return 3;
77 } catch (AttachmentInvalidException e) {
78 System.err.println("Failed to add avatar attachment for group\": " + e.getMessage());
79 System.err.println("Aborting sending.");
80 return 1;
81 } catch (GroupNotFoundException e) {
82 handleGroupNotFoundException(e);
83 return 1;
84 } catch (NotAGroupMemberException e) {
85 handleNotAGroupMemberException(e);
86 return 1;
87 } catch (EncapsulatedExceptions e) {
88 handleEncapsulatedExceptions(e);
89 return 3;
90 } catch (GroupIdFormatException e) {
91 handleGroupIdFormatException(e);
92 return 1;
93 } catch (InvalidNumberException e) {
94 handleInvalidNumberException(e);
95 return 1;
96 }
97 }
98 }