1 package org
.asamk
.signal
.commands
;
3 import net
.sourceforge
.argparse4j
.impl
.Arguments
;
4 import net
.sourceforge
.argparse4j
.inf
.Namespace
;
5 import net
.sourceforge
.argparse4j
.inf
.Subparser
;
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
;
13 import java
.util
.List
;
15 import java
.util
.stream
.Collectors
;
17 public class ListGroupsCommand
implements LocalCommand
{
19 private static void printGroup(Manager m
, GroupInfo group
, boolean detailed
) {
21 Set
<String
> members
= group
.getMembers()
23 .map(m
::resolveSignalServiceAddress
)
24 .map(SignalServiceAddress
::getLegacyIdentifier
)
25 .collect(Collectors
.toSet());
27 Set
<String
> pendingMembers
= group
.getPendingMembers()
29 .map(m
::resolveSignalServiceAddress
)
30 .map(SignalServiceAddress
::getLegacyIdentifier
)
31 .collect(Collectors
.toSet());
33 Set
<String
> requestingMembers
= group
.getRequestingMembers()
35 .map(m
::resolveSignalServiceAddress
)
36 .map(SignalServiceAddress
::getLegacyIdentifier
)
37 .collect(Collectors
.toSet());
39 final GroupInviteLinkUrl groupInviteLink
= group
.getGroupInviteLink();
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
),
45 group
.isMember(m
.getSelfAddress()),
50 groupInviteLink
== null ?
'-' : groupInviteLink
.getUrl()));
52 System
.out
.println(String
.format("Id: %s Name: %s Active: %s Blocked: %b",
53 Base64
.encodeBytes(group
.groupId
),
55 group
.isMember(m
.getSelfAddress()),
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");
67 public int handleCommand(final Namespace ns
, final Manager m
) {
68 if (!m
.isRegistered()) {
69 System
.err
.println("User is not registered.");
73 List
<GroupInfo
> groups
= m
.getGroups();
74 boolean detailed
= ns
.getBoolean("detailed");
76 for (GroupInfo group
: groups
) {
77 printGroup(m
, group
, detailed
);