]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/ListContactsCommand.java
Extract AccountHelper
[signal-cli] / src / main / java / org / asamk / signal / commands / ListContactsCommand.java
1 package org.asamk.signal.commands;
2
3 import net.sourceforge.argparse4j.inf.Namespace;
4 import net.sourceforge.argparse4j.inf.Subparser;
5
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;
10
11 import java.util.UUID;
12
13 public class ListContactsCommand implements JsonRpcLocalCommand {
14
15 @Override
16 public String getName() {
17 return "listContacts";
18 }
19
20 @Override
21 public void attachToSubparser(final Subparser subparser) {
22 subparser.help("Show a list of known contacts with names.");
23 }
24
25 @Override
26 public void handleCommand(final Namespace ns, final Manager m, final OutputWriter outputWriter) {
27 var contacts = m.getContacts();
28
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(),
34 contact.getName(),
35 contact.isBlocked(),
36 contact.getMessageExpirationTime() == 0
37 ? "disabled"
38 : contact.getMessageExpirationTime() + "s");
39 }
40 } else {
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),
47 contact.getName(),
48 contact.isBlocked(),
49 contact.getMessageExpirationTime());
50 }).toList();
51
52 writer.write(jsonContacts);
53 }
54 }
55
56 private record JsonContact(String number, String uuid, String name, boolean isBlocked, int messageExpirationTime) {}
57 }