]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/JoinGroupCommand.java
bfe46650c8d006853c607174aacd0aa89fdec348
[signal-cli] / src / main / java / org / asamk / signal / commands / JoinGroupCommand.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.manager.Manager;
7 import org.asamk.signal.manager.groups.GroupId;
8 import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
9 import org.freedesktop.dbus.exceptions.DBusExecutionException;
10 import org.whispersystems.libsignal.util.Pair;
11 import org.whispersystems.signalservice.api.groupsv2.GroupLinkNotActiveException;
12 import org.whispersystems.signalservice.api.messages.SendMessageResult;
13 import org.whispersystems.signalservice.internal.push.exceptions.GroupPatchNotAcceptedException;
14
15 import java.io.IOException;
16 import java.util.List;
17
18 import static org.asamk.signal.util.ErrorUtils.handleAssertionError;
19 import static org.asamk.signal.util.ErrorUtils.handleIOException;
20 import static org.asamk.signal.util.ErrorUtils.handleTimestampAndSendMessageResults;
21
22 public class JoinGroupCommand implements LocalCommand {
23
24 @Override
25 public void attachToSubparser(final Subparser subparser) {
26 subparser.addArgument("--uri").required(true).help("Specify the uri with the group invitation link.");
27 }
28
29 @Override
30 public int handleCommand(final Namespace ns, final Manager m) {
31 final GroupInviteLinkUrl linkUrl;
32 String uri = ns.getString("uri");
33 try {
34 linkUrl = GroupInviteLinkUrl.fromUri(uri);
35 } catch (GroupInviteLinkUrl.InvalidGroupLinkException e) {
36 System.err.println("Group link is invalid: " + e.getMessage());
37 return 1;
38 } catch (GroupInviteLinkUrl.UnknownGroupLinkVersionException e) {
39 System.err.println("Group link was created with an incompatible version: " + e.getMessage());
40 return 1;
41 }
42
43 if (linkUrl == null) {
44 System.err.println("Link is not a signal group invitation link");
45 return 1;
46 }
47
48 try {
49 final Pair<GroupId, List<SendMessageResult>> results = m.joinGroup(linkUrl);
50 GroupId newGroupId = results.first();
51 if (!m.getGroup(newGroupId).isMember(m.getSelfAddress())) {
52 System.out.println("Requested to join group \"" + newGroupId.toBase64() + "\"");
53 } else {
54 System.out.println("Joined group \"" + newGroupId.toBase64() + "\"");
55 }
56 return handleTimestampAndSendMessageResults(0, results.second());
57 } catch (AssertionError e) {
58 handleAssertionError(e);
59 return 1;
60 } catch (GroupPatchNotAcceptedException e) {
61 System.err.println("Failed to join group, maybe already a member");
62 return 1;
63 } catch (IOException e) {
64 e.printStackTrace();
65 handleIOException(e);
66 return 3;
67 } catch (DBusExecutionException e) {
68 System.err.println("Failed to send message: " + e.getMessage());
69 return 2;
70 } catch (GroupLinkNotActiveException e) {
71 System.err.println("Group link is not valid: " + e.getMessage());
72 return 1;
73 }
74 }
75 }