]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/ListContactsCommand.java
Use Java 17
[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 writer) {
31 for (var c : contacts) {
32 final var contact = c.second();
33 writer.println("Number: {} Name: {} Blocked: {} Message expiration: {}",
34 c.first().getLegacyIdentifier(),
35 contact.getName(),
36 contact.isBlocked(),
37 contact.getMessageExpirationTime() == 0
38 ? "disabled"
39 : contact.getMessageExpirationTime() + "s");
40 }
41 } else {
42 final var writer = (JsonWriter) outputWriter;
43 final var jsonContacts = contacts.stream().map(contactPair -> {
44 final var address = contactPair.first();
45 final var contact = contactPair.second();
46 return new JsonContact(address.getNumber().orElse(null),
47 address.getUuid().map(UUID::toString).orElse(null),
48 contact.getName(),
49 contact.isBlocked(),
50 contact.getMessageExpirationTime());
51 }).collect(Collectors.toList());
52
53 writer.write(jsonContacts);
54 }
55 }
56
57 private static final class JsonContact {
58
59 public final String number;
60 public final String uuid;
61 public final String name;
62 public final boolean isBlocked;
63 public final int messageExpirationTime;
64
65 private JsonContact(
66 final String number,
67 final String uuid,
68 final String name,
69 final boolean isBlocked,
70 final int messageExpirationTime
71 ) {
72 this.number = number;
73 this.uuid = uuid;
74 this.name = name;
75 this.isBlocked = isBlocked;
76 this.messageExpirationTime = messageExpirationTime;
77 }
78 }
79 }