Added AsamK's suggestions

This commit is contained in:
david-harley 2021-01-11 10:57:24 +10:30
parent 06ea285d14
commit ac31901f31
5 changed files with 40 additions and 98 deletions

View file

@ -283,6 +283,9 @@ public class Main {
mut.addArgument("--dbus").help("Make request via user dbus.").action(Arguments.storeTrue());
mut.addArgument("--dbus-system").help("Make request via system dbus.").action(Arguments.storeTrue());
parser.addArgument("-o", "--output").help("Choose to output in plain text or JSON")
.choices("plain-text", "json").setDefault("plain-text");
Subparsers subparsers = parser.addSubparsers()
.title("subcommands")
.dest("command")

View file

@ -21,9 +21,6 @@ public class GetUserStatusCommand implements LocalCommand {
public void attachToSubparser(final Subparser subparser) {
subparser.addArgument("number").help("Phone number").nargs("+");
subparser.help("Check if the specified phone number/s have been registered");
subparser.addArgument("-j", "--json")
.help("Output received messages in json format, one json object per line.")
.action(Arguments.storeTrue());
}
@Override
@ -47,7 +44,7 @@ public class GetUserStatusCommand implements LocalCommand {
}
// Output
if (ns.getBoolean("json")) {
if (ns.getString("output").equals("json")) {
List<JsonIsRegistered> objects = registered.entrySet()
.stream()
.map(entry -> new JsonIsRegistered(entry.getKey(), entry.getValue()))

View file

@ -16,36 +16,14 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class ListGroupsCommand implements LocalCommand {
private enum MembersType {
MEMBERS,
PENDING_MEMBERS,
REQUESTING_MEMBERS,
}
private static Set<String> getMembersSet(Manager m, GroupInfo group, MembersType type) {
Set<SignalServiceAddress> members;
switch (type) {
case MEMBERS:
members = group.getMembers();
break;
case PENDING_MEMBERS:
members = group.getPendingMembers();
break;
case REQUESTING_MEMBERS:
members = group.getRequestingMembers();
break;
default:
return Collections.emptySet();
}
return members.stream().map(m::resolveSignalServiceAddress)
private static Set<String> resolveMembers(Manager m, Set<SignalServiceAddress> addresses) {
return addresses.stream().map(m::resolveSignalServiceAddress)
.map(SignalServiceAddress::getLegacyIdentifier)
.collect(Collectors.toSet());
}
@ -72,9 +50,9 @@ public class ListGroupsCommand implements LocalCommand {
group.getTitle(),
group.isMember(m.getSelfAddress()),
group.isBlocked(),
getMembersSet(m, group, MembersType.MEMBERS),
getMembersSet(m, group, MembersType.PENDING_MEMBERS),
getMembersSet(m, group, MembersType.REQUESTING_MEMBERS),
resolveMembers(m, group.getMembers()),
resolveMembers(m, group.getPendingMembers()),
resolveMembers(m, group.getRequestingMembers()),
groupInviteLink == null ? '-' : groupInviteLink.getUrl()));
} else {
System.out.println(String.format("Id: %s Name: %s Active: %s Blocked: %b",
@ -87,11 +65,10 @@ public class ListGroupsCommand implements LocalCommand {
@Override
public void attachToSubparser(final Subparser subparser) {
subparser.addArgument("-d", "--detailed").action(Arguments.storeTrue()).help("List members of each group");
subparser.help("List group name and ids");
subparser.addArgument("-j", "--json")
.help("Output received messages in json format, one json object per line.")
.action(Arguments.storeTrue());
subparser.addArgument("-d", "--detailed").action(Arguments.storeTrue())
.help("List the members and group invite links of each group");
subparser.help("List group information including names, ids, active status, blocked status and members");
}
@Override
@ -101,42 +78,29 @@ public class ListGroupsCommand implements LocalCommand {
return 1;
}
List<GroupInfo> groups = m.getGroups();
boolean detailed = ns.getBoolean("detailed");
if (ns.getBoolean("json")) {
if (ns.getString("output").equals("json")) {
final ObjectMapper jsonProcessor = new ObjectMapper();
jsonProcessor.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
jsonProcessor.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
if (detailed) {
List<JsonGroupDetailed> objects = new ArrayList<>();
for (GroupInfo group : groups) {
final GroupInviteLinkUrl groupInviteLink = group.getGroupInviteLink();
List<JsonGroup> objects = new ArrayList<>();
for (GroupInfo group : m.getGroups()) {
final GroupInviteLinkUrl groupInviteLink = group.getGroupInviteLink();
objects.add(new JsonGroupDetailed(group.getGroupId().toBase64(),
group.getTitle(),
group.isMember(m.getSelfAddress()),
group.isBlocked(),
getMembersSet(m, group, MembersType.MEMBERS),
getMembersSet(m, group, MembersType.PENDING_MEMBERS),
getMembersSet(m, group, MembersType.REQUESTING_MEMBERS),
groupInviteLink == null ? null : groupInviteLink.getUrl()));
}
return printGroupsJson(jsonProcessor, objects);
} else {
List<JsonGroup> objects = groups.stream().map(
group -> new JsonGroup(group.getGroupId().toBase64(),
group.getTitle(),
group.isMember(m.getSelfAddress()),
group.isBlocked()))
.collect(Collectors.toList());
return printGroupsJson(jsonProcessor, objects);
objects.add(new JsonGroup(group.getGroupId().toBase64(),
group.getTitle(),
group.isMember(m.getSelfAddress()),
group.isBlocked(),
resolveMembers(m, group.getMembers()),
resolveMembers(m, group.getPendingMembers()),
resolveMembers(m, group.getRequestingMembers()),
groupInviteLink == null ? null : groupInviteLink.getUrl()));
}
return printGroupsJson(jsonProcessor, objects);
} else {
for (GroupInfo group : groups) {
boolean detailed = ns.getBoolean("detailed");
for (GroupInfo group : m.getGroups()) {
printGroupPlainText(m, group, detailed);
}
}
@ -151,29 +115,14 @@ public class ListGroupsCommand implements LocalCommand {
public boolean isMember;
public boolean isBlocked;
public JsonGroup(String id, String name, boolean isMember, boolean isBlocked) {
this.id = id;
this.name = name;
this.isMember = isMember;
this.isBlocked = isBlocked;
}
}
private static final class JsonGroupDetailed {
public String id;
public String name;
public boolean isMember;
public boolean isBlocked;
public Set<String> members;
public Set<String> pendingMembers;
public Set<String> requestingMembers;
public String groupInviteLink;
public JsonGroupDetailed(String id, String name, boolean isMember, boolean isBlocked,
Set<String> members, Set<String> pendingMembers,
Set<String> requestingMembers, String groupInviteLink)
public JsonGroup(String id, String name, boolean isMember, boolean isBlocked,
Set<String> members, Set<String> pendingMembers,
Set<String> requestingMembers, String groupInviteLink)
{
this.id = id;
this.name = name;

View file

@ -35,14 +35,11 @@ public class ReceiveCommand implements ExtendedDbusCommand, LocalCommand {
subparser.addArgument("--ignore-attachments")
.help("Dont download attachments of received messages.")
.action(Arguments.storeTrue());
subparser.addArgument("-j", "--json")
.help("Output received messages in json format, one json object per line.")
.action(Arguments.storeTrue());
}
public int handleCommand(final Namespace ns, final Signal signal, DBusConnection dbusconnection) {
final ObjectMapper jsonProcessor;
if (ns.getBoolean("json")) {
if (ns.getString("output").equals("json")) {
jsonProcessor = new ObjectMapper();
jsonProcessor.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
jsonProcessor.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
@ -161,7 +158,7 @@ public class ReceiveCommand implements ExtendedDbusCommand, LocalCommand {
}
boolean ignoreAttachments = ns.getBoolean("ignore_attachments");
try {
final Manager.ReceiveMessageHandler handler = ns.getBoolean("json")
final Manager.ReceiveMessageHandler handler = ns.getString("output").equals("json")
? new JsonReceiveMessageHandler(m)
: new ReceiveMessageHandler(m);
m.receiveMessages((long) (timeout * 1000),