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