]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/ListGroupsCommand.java
9e13685e8b2abe5e9311ae4b7d538081dca31f8a
[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 System.out.println(String.format("Id: %s Name: %s Active: %s Blocked: %b Members: %s",
26 Base64.encodeBytes(group.groupId), group.getTitle(), group.isMember(m.getSelfAddress()), group.isBlocked(), members));
27 } else {
28 System.out.println(String.format("Id: %s Name: %s Active: %s Blocked: %b",
29 Base64.encodeBytes(group.groupId), group.getTitle(), group.isMember(m.getSelfAddress()), group.isBlocked()));
30 }
31 }
32
33 @Override
34 public void attachToSubparser(final Subparser subparser) {
35 subparser.addArgument("-d", "--detailed").action(Arguments.storeTrue())
36 .help("List members of each group");
37 subparser.help("List group name and ids");
38 }
39
40 @Override
41 public int handleCommand(final Namespace ns, final Manager m) {
42 if (!m.isRegistered()) {
43 System.err.println("User is not registered.");
44 return 1;
45 }
46
47 List<GroupInfo> groups = m.getGroups();
48 boolean detailed = ns.getBoolean("detailed");
49
50 for (GroupInfo group : groups) {
51 printGroup(m, group, detailed);
52 }
53 return 0;
54 }
55 }