1 package org
.asamk
.signal
.commands
;
3 import net
.sourceforge
.argparse4j
.inf
.Namespace
;
4 import net
.sourceforge
.argparse4j
.inf
.Subparser
;
6 import org
.asamk
.signal
.JsonWriter
;
7 import org
.asamk
.signal
.OutputWriter
;
8 import org
.asamk
.signal
.PlainTextWriter
;
9 import org
.asamk
.signal
.manager
.Manager
;
11 import java
.util
.UUID
;
12 import java
.util
.stream
.Collectors
;
14 import static org
.asamk
.signal
.util
.Util
.getLegacyIdentifier
;
16 public class ListContactsCommand
implements JsonRpcLocalCommand
{
19 public String
getName() {
20 return "listContacts";
24 public void attachToSubparser(final Subparser subparser
) {
25 subparser
.help("Show a list of known contacts with names.");
29 public void handleCommand(final Namespace ns
, final Manager m
, final OutputWriter outputWriter
) {
30 var contacts
= m
.getContacts();
32 if (outputWriter
instanceof PlainTextWriter
) {
33 final var writer
= (PlainTextWriter
) outputWriter
;
34 for (var c
: contacts
) {
35 final var contact
= c
.second();
36 writer
.println("Number: {} Name: {} Blocked: {} Message expiration: {}",
37 getLegacyIdentifier(m
.resolveSignalServiceAddress(c
.first())),
40 contact
.getMessageExpirationTime() == 0
42 : contact
.getMessageExpirationTime() + "s");
45 final var writer
= (JsonWriter
) outputWriter
;
46 final var jsonContacts
= contacts
.stream().map(contactPair
-> {
47 final var address
= m
.resolveSignalServiceAddress(contactPair
.first());
48 final var contact
= contactPair
.second();
49 return new JsonContact(address
.getNumber().orNull(),
50 address
.getUuid().transform(UUID
::toString
).orNull(),
53 contact
.getMessageExpirationTime());
54 }).collect(Collectors
.toList());
56 writer
.write(jsonContacts
);
60 private static final class JsonContact
{
62 public final String number
;
63 public final String uuid
;
64 public final String name
;
65 public final boolean isBlocked
;
66 public final int messageExpirationTime
;
72 final boolean isBlocked
,
73 final int messageExpirationTime
78 this.isBlocked
= isBlocked
;
79 this.messageExpirationTime
= messageExpirationTime
;