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
.manager
.Manager
;
7 import org
.asamk
.signal
.output
.JsonWriter
;
8 import org
.asamk
.signal
.output
.OutputWriter
;
9 import org
.asamk
.signal
.output
.PlainTextWriter
;
11 import java
.util
.UUID
;
13 public class ListContactsCommand
implements JsonRpcLocalCommand
{
16 public String
getName() {
17 return "listContacts";
21 public void attachToSubparser(final Subparser subparser
) {
22 subparser
.help("Show a list of known contacts with names.");
26 public void handleCommand(final Namespace ns
, final Manager m
, final OutputWriter outputWriter
) {
27 var contacts
= m
.getContacts();
29 if (outputWriter
instanceof PlainTextWriter writer
) {
30 for (var c
: contacts
) {
31 final var contact
= c
.second();
32 writer
.println("Number: {} Name: {} Blocked: {} Message expiration: {}",
33 c
.first().getLegacyIdentifier(),
36 contact
.getMessageExpirationTime() == 0
38 : contact
.getMessageExpirationTime() + "s");
41 final var writer
= (JsonWriter
) outputWriter
;
42 final var jsonContacts
= contacts
.stream().map(contactPair
-> {
43 final var address
= contactPair
.first();
44 final var contact
= contactPair
.second();
45 return new JsonContact(address
.number().orElse(null),
46 address
.uuid().map(UUID
::toString
).orElse(null),
49 contact
.getMessageExpirationTime());
52 writer
.write(jsonContacts
);
56 private record JsonContact(String number
, String uuid
, String name
, boolean isBlocked
, int messageExpirationTime
) {}