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 public class ListContactsCommand
implements JsonRpcLocalCommand
{
17 public String
getName() {
18 return "listContacts";
22 public void attachToSubparser(final Subparser subparser
) {
23 subparser
.help("Show a list of known contacts with names.");
27 public void handleCommand(final Namespace ns
, final Manager m
, final OutputWriter outputWriter
) {
28 var contacts
= m
.getContacts();
30 if (outputWriter
instanceof PlainTextWriter writer
) {
31 for (var c
: contacts
) {
32 final var contact
= c
.second();
33 writer
.println("Number: {} Name: {} Blocked: {} Message expiration: {}",
34 c
.first().getLegacyIdentifier(),
37 contact
.getMessageExpirationTime() == 0
39 : contact
.getMessageExpirationTime() + "s");
42 final var writer
= (JsonWriter
) outputWriter
;
43 final var jsonContacts
= contacts
.stream().map(contactPair
-> {
44 final var address
= contactPair
.first();
45 final var contact
= contactPair
.second();
46 return new JsonContact(address
.getNumber().orElse(null),
47 address
.getUuid().map(UUID
::toString
).orElse(null),
50 contact
.getMessageExpirationTime());
51 }).collect(Collectors
.toList());
53 writer
.write(jsonContacts
);
57 private static final class JsonContact
{
59 public final String number
;
60 public final String uuid
;
61 public final String name
;
62 public final boolean isBlocked
;
63 public final int messageExpirationTime
;
69 final boolean isBlocked
,
70 final int messageExpirationTime
75 this.isBlocked
= isBlocked
;
76 this.messageExpirationTime
= messageExpirationTime
;