]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/ListContactsCommand.java
b6dfc3ce229c92d2320ae579754dbb0035e6b42d
[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 public class ListContactsCommand implements JsonRpcLocalCommand {
15
16 @Override
17 public String getName() {
18 return "listContacts";
19 }
20
21 @Override
22 public void attachToSubparser(final Subparser subparser) {
23 subparser.help("Show a list of known contacts with names.");
24 }
25
26 @Override
27 public void handleCommand(final Namespace ns, final Manager m, final OutputWriter outputWriter) {
28 var contacts = m.getContacts();
29
30 if (outputWriter instanceof PlainTextWriter) {
31 final var writer = (PlainTextWriter) outputWriter;
32 for (var c : contacts) {
33 final var contact = c.second();
34 writer.println("Number: {} Name: {} Blocked: {} Message expiration: {}",
35 c.first().getLegacyIdentifier(),
36 contact.getName(),
37 contact.isBlocked(),
38 contact.getMessageExpirationTime() == 0
39 ? "disabled"
40 : contact.getMessageExpirationTime() + "s");
41 }
42 } else {
43 final var writer = (JsonWriter) outputWriter;
44 final var jsonContacts = contacts.stream().map(contactPair -> {
45 final var address = contactPair.first();
46 final var contact = contactPair.second();
47 return new JsonContact(address.getNumber().orElse(null),
48 address.getUuid().map(UUID::toString).orElse(null),
49 contact.getName(),
50 contact.isBlocked(),
51 contact.getMessageExpirationTime());
52 }).collect(Collectors.toList());
53
54 writer.write(jsonContacts);
55 }
56 }
57
58 private static final class JsonContact {
59
60 public final String number;
61 public final String uuid;
62 public final String name;
63 public final boolean isBlocked;
64 public final int messageExpirationTime;
65
66 private JsonContact(
67 final String number,
68 final String uuid,
69 final String name,
70 final boolean isBlocked,
71 final int messageExpirationTime
72 ) {
73 this.number = number;
74 this.uuid = uuid;
75 this.name = name;
76 this.isBlocked = isBlocked;
77 this.messageExpirationTime = messageExpirationTime;
78 }
79 }
80 }