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