]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/ListGroupsCommand.java
Implement join group via invitation link
[signal-cli] / src / main / java / org / asamk / signal / commands / ListGroupsCommand.java
1 package org.asamk.signal.commands;
2
3 import net.sourceforge.argparse4j.impl.Arguments;
4 import net.sourceforge.argparse4j.inf.Namespace;
5 import net.sourceforge.argparse4j.inf.Subparser;
6
7 import org.asamk.signal.manager.GroupInviteLinkUrl;
8 import org.asamk.signal.manager.Manager;
9 import org.asamk.signal.storage.groups.GroupInfo;
10 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
11 import org.whispersystems.util.Base64;
12
13 import java.util.List;
14 import java.util.Set;
15 import java.util.stream.Collectors;
16
17 public class ListGroupsCommand implements LocalCommand {
18
19 private static void printGroup(Manager m, GroupInfo group, boolean detailed) {
20 if (detailed) {
21 Set<String> members = group.getMembers()
22 .stream()
23 .map(m::resolveSignalServiceAddress)
24 .map(SignalServiceAddress::getLegacyIdentifier)
25 .collect(Collectors.toSet());
26
27 Set<String> pendingMembers = group.getPendingMembers()
28 .stream()
29 .map(m::resolveSignalServiceAddress)
30 .map(SignalServiceAddress::getLegacyIdentifier)
31 .collect(Collectors.toSet());
32
33 Set<String> requestingMembers = group.getRequestingMembers()
34 .stream()
35 .map(m::resolveSignalServiceAddress)
36 .map(SignalServiceAddress::getLegacyIdentifier)
37 .collect(Collectors.toSet());
38
39 final GroupInviteLinkUrl groupInviteLink = group.getGroupInviteLink();
40
41 System.out.println(String.format(
42 "Id: %s Name: %s Active: %s Blocked: %b Members: %s Pending members: %s Requesting members: %s Link: %s",
43 Base64.encodeBytes(group.groupId),
44 group.getTitle(),
45 group.isMember(m.getSelfAddress()),
46 group.isBlocked(),
47 members,
48 pendingMembers,
49 requestingMembers,
50 groupInviteLink == null ? '-' : groupInviteLink.getUrl()));
51 } else {
52 System.out.println(String.format("Id: %s Name: %s Active: %s Blocked: %b",
53 Base64.encodeBytes(group.groupId),
54 group.getTitle(),
55 group.isMember(m.getSelfAddress()),
56 group.isBlocked()));
57 }
58 }
59
60 @Override
61 public void attachToSubparser(final Subparser subparser) {
62 subparser.addArgument("-d", "--detailed").action(Arguments.storeTrue()).help("List members of each group");
63 subparser.help("List group name and ids");
64 }
65
66 @Override
67 public int handleCommand(final Namespace ns, final Manager m) {
68 if (!m.isRegistered()) {
69 System.err.println("User is not registered.");
70 return 1;
71 }
72
73 List<GroupInfo> groups = m.getGroups();
74 boolean detailed = ns.getBoolean("detailed");
75
76 for (GroupInfo group : groups) {
77 printGroup(m, group, detailed);
78 }
79 return 0;
80 }
81 }