]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/GetUserStatusCommand.java
Implement jsonRpc command
[signal-cli] / src / main / java / org / asamk / signal / commands / GetUserStatusCommand.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.commands.exceptions.CommandException;
10 import org.asamk.signal.commands.exceptions.IOErrorException;
11 import org.asamk.signal.manager.Manager;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14
15 import java.io.IOException;
16 import java.util.HashSet;
17 import java.util.Map;
18 import java.util.stream.Collectors;
19
20 public class GetUserStatusCommand implements JsonRpcLocalCommand {
21
22 private final static Logger logger = LoggerFactory.getLogger(GetUserStatusCommand.class);
23 private final OutputWriter outputWriter;
24
25 public static void attachToSubparser(final Subparser subparser) {
26 subparser.help("Check if the specified phone number/s have been registered");
27 subparser.addArgument("number").help("Phone number").nargs("+");
28 }
29
30 public GetUserStatusCommand(final OutputWriter outputWriter) {
31 this.outputWriter = outputWriter;
32 }
33
34 @Override
35 public void handleCommand(final Namespace ns, final Manager m) throws CommandException {
36 // Get a map of registration statuses
37 Map<String, Boolean> registered;
38 try {
39 registered = m.areUsersRegistered(new HashSet<>(ns.getList("number")));
40 } catch (IOException e) {
41 logger.debug("Failed to check registered users", e);
42 throw new IOErrorException("Unable to check if users are registered");
43 }
44
45 // Output
46 if (outputWriter instanceof JsonWriter) {
47 final var jsonWriter = (JsonWriter) outputWriter;
48
49 var jsonUserStatuses = registered.entrySet()
50 .stream()
51 .map(entry -> new JsonUserStatus(entry.getKey(), entry.getValue()))
52 .collect(Collectors.toList());
53
54 jsonWriter.write(jsonUserStatuses);
55 } else {
56 final var writer = (PlainTextWriter) outputWriter;
57
58 for (var entry : registered.entrySet()) {
59 writer.println("{}: {}", entry.getKey(), entry.getValue());
60 }
61 }
62 }
63
64 private static final class JsonUserStatus {
65
66 public String name;
67
68 public boolean isRegistered;
69
70 public JsonUserStatus(String name, boolean isRegistered) {
71 this.name = name;
72 this.isRegistered = isRegistered;
73 }
74 }
75 }