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
.stream
.Collectors
;
13 import static org
.asamk
.signal
.util
.Util
.getLegacyIdentifier
;
15 public class ListContactsCommand
implements JsonRpcLocalCommand
{
18 public String
getName() {
19 return "listContacts";
23 public void attachToSubparser(final Subparser subparser
) {
24 subparser
.help("Show a list of known contacts with names.");
28 public void handleCommand(final Namespace ns
, final Manager m
, final OutputWriter outputWriter
) {
29 var contacts
= m
.getContacts();
31 if (outputWriter
instanceof PlainTextWriter
) {
32 final var writer
= (PlainTextWriter
) outputWriter
;
33 for (var c
: contacts
) {
34 final var contact
= c
.second();
35 writer
.println("Number: {} Name: {} Blocked: {} Message expiration: {}",
36 getLegacyIdentifier(m
.resolveSignalServiceAddress(c
.first())),
39 contact
.getMessageExpirationTime() == 0
41 : contact
.getMessageExpirationTime() + "s");
44 final var writer
= (JsonWriter
) outputWriter
;
45 final var jsonContacts
= contacts
.stream().map(contactPair
-> {
46 final var address
= m
.resolveSignalServiceAddress(contactPair
.first());
47 final var contact
= contactPair
.second();
48 return new JsonContact(address
.getNumber().orNull(),
49 address
.getUuid().toString(),
52 contact
.getMessageExpirationTime());
53 }).collect(Collectors
.toList());
55 writer
.write(jsonContacts
);
59 private static final class JsonContact
{
61 public final String number
;
62 public final String uuid
;
63 public final String name
;
64 public final boolean isBlocked
;
65 public final int messageExpirationTime
;
71 final boolean isBlocked
,
72 final int messageExpirationTime
77 this.isBlocked
= isBlocked
;
78 this.messageExpirationTime
= messageExpirationTime
;