]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/ListContactsCommand.java
Trust an identity with its scannable safety numbers from the other device
[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.JsonWriter;
7 import org.asamk.signal.OutputWriter;
8 import org.asamk.signal.PlainTextWriter;
9 import org.asamk.signal.manager.Manager;
10
11 import java.util.UUID;
12 import java.util.stream.Collectors;
13
14 import static org.asamk.signal.util.Util.getLegacyIdentifier;
15
16 public class ListContactsCommand implements JsonRpcLocalCommand {
17
18 @Override
19 public String getName() {
20 return "listContacts";
21 }
22
23 @Override
24 public void attachToSubparser(final Subparser subparser) {
25 subparser.help("Show a list of known contacts with names.");
26 }
27
28 @Override
29 public void handleCommand(final Namespace ns, final Manager m, final OutputWriter outputWriter) {
30 var contacts = m.getContacts();
31
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())),
38 contact.getName(),
39 contact.isBlocked(),
40 contact.getMessageExpirationTime() == 0
41 ? "disabled"
42 : contact.getMessageExpirationTime() + "s");
43 }
44 } else {
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(),
51 contact.getName(),
52 contact.isBlocked(),
53 contact.getMessageExpirationTime());
54 }).collect(Collectors.toList());
55
56 writer.write(jsonContacts);
57 }
58 }
59
60 private static final class JsonContact {
61
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;
67
68 private JsonContact(
69 final String number,
70 final String uuid,
71 final String name,
72 final boolean isBlocked,
73 final int messageExpirationTime
74 ) {
75 this.number = number;
76 this.uuid = uuid;
77 this.name = name;
78 this.isBlocked = isBlocked;
79 this.messageExpirationTime = messageExpirationTime;
80 }
81 }
82 }