]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/GetUserStatusCommand.java
Allow calling signal-cli without -u flag
[signal-cli] / src / main / java / org / asamk / signal / commands / GetUserStatusCommand.java
1 package org.asamk.signal.commands;
2
3 import com.fasterxml.jackson.core.JsonGenerator;
4 import com.fasterxml.jackson.databind.ObjectMapper;
5
6 import net.sourceforge.argparse4j.impl.Arguments;
7 import net.sourceforge.argparse4j.inf.Namespace;
8 import net.sourceforge.argparse4j.inf.Subparser;
9
10 import org.asamk.signal.manager.Manager;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
13
14 import java.io.IOException;
15 import java.util.HashSet;
16 import java.util.List;
17 import java.util.Map;
18 import java.util.stream.Collectors;
19
20 public class GetUserStatusCommand implements LocalCommand {
21
22 // TODO delete later when "json" variable is removed
23 private final static Logger logger = LoggerFactory.getLogger(GetUserStatusCommand.class);
24
25 @Override
26 public void attachToSubparser(final Subparser subparser) {
27 subparser.addArgument("number").help("Phone number").nargs("+");
28 subparser.help("Check if the specified phone number/s have been registered");
29 subparser.addArgument("--json")
30 .help("WARNING: This parameter is now deprecated! Please use the global \"--output=json\" option instead.\n\nOutput received messages in json format, one json object per line.")
31 .action(Arguments.storeTrue());
32 }
33
34 @Override
35 public int handleCommand(final Namespace ns, final Manager m) {
36 // Setup the json object mapper
37 ObjectMapper jsonProcessor = new ObjectMapper();
38 jsonProcessor.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
39
40 boolean inJson = ns.getString("output").equals("json") || ns.getBoolean("json");
41
42 // TODO delete later when "json" variable is removed
43 if (ns.getBoolean("json")) {
44 logger.warn("\"--json\" option has been deprecated, please use the global \"--output=json\" instead.");
45 }
46
47 // Get a map of registration statuses
48 Map<String, Boolean> registered;
49 try {
50 registered = m.areUsersRegistered(new HashSet<>(ns.getList("number")));
51 } catch (IOException e) {
52 System.err.println("Unable to check if users are registered");
53 return 3;
54 }
55
56 // Output
57 if (inJson) {
58 List<JsonIsRegistered> objects = registered.entrySet()
59 .stream()
60 .map(entry -> new JsonIsRegistered(entry.getKey(), entry.getValue()))
61 .collect(Collectors.toList());
62
63 try {
64 jsonProcessor.writeValue(System.out, objects);
65 System.out.println();
66 } catch (IOException e) {
67 System.err.println(e.getMessage());
68 }
69 } else {
70 for (Map.Entry<String, Boolean> entry : registered.entrySet()) {
71 System.out.println(entry.getKey() + ": " + entry.getValue());
72 }
73 }
74
75 return 0;
76 }
77
78 private static final class JsonIsRegistered {
79
80 public String name;
81
82 public boolean isRegistered;
83
84 public JsonIsRegistered(String name, boolean isRegistered) {
85 this.name = name;
86 this.isRegistered = isRegistered;
87 }
88 }
89 }