]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/commands/ListGroupsCommand.java
Reformat files
[signal-cli] / src / main / java / org / asamk / signal / commands / ListGroupsCommand.java
index ef5fd452e6c41a95b47c336e83e9792ac26a4dde..62bb4f14510db227b935c28445aa71aaec67446d 100644 (file)
@@ -4,13 +4,14 @@ import net.sourceforge.argparse4j.impl.Arguments;
 import net.sourceforge.argparse4j.inf.Namespace;
 import net.sourceforge.argparse4j.inf.Subparser;
 
-import org.asamk.signal.JsonWriter;
-import org.asamk.signal.OutputWriter;
-import org.asamk.signal.PlainTextWriter;
 import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.api.Group;
-import org.asamk.signal.manager.storage.recipients.RecipientAddress;
+import org.asamk.signal.manager.api.RecipientAddress;
+import org.asamk.signal.output.JsonWriter;
+import org.asamk.signal.output.OutputWriter;
+import org.asamk.signal.output.PlainTextWriter;
+import org.asamk.signal.util.CommandUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -20,7 +21,7 @@ import java.util.stream.Collectors;
 
 public class ListGroupsCommand implements JsonRpcLocalCommand {
 
-    private final static Logger logger = LoggerFactory.getLogger(ListGroupsCommand.class);
+    private static final Logger logger = LoggerFactory.getLogger(ListGroupsCommand.class);
 
     @Override
     public String getName() {
@@ -33,6 +34,7 @@ public class ListGroupsCommand implements JsonRpcLocalCommand {
         subparser.addArgument("-d", "--detailed")
                 .action(Arguments.storeTrue())
                 .help("List the members and group invite links of each group. If output=json, then this is always set");
+        subparser.addArgument("-g", "--group-id").help("Specify one or more group IDs to show.").nargs("*");
     }
 
     private static Set<String> resolveMembers(Set<RecipientAddress> addresses) {
@@ -41,19 +43,17 @@ public class ListGroupsCommand implements JsonRpcLocalCommand {
 
     private static Set<JsonGroupMember> resolveJsonMembers(Set<RecipientAddress> addresses) {
         return addresses.stream()
-                .map(address -> new JsonGroupMember(address.getNumber().orElse(null),
-                        address.getUuid().map(UUID::toString).orElse(null)))
+                .map(address -> new JsonGroupMember(address.number().orElse(null),
+                        address.uuid().map(UUID::toString).orElse(null)))
                 .collect(Collectors.toSet());
     }
 
-    private static void printGroupPlainText(
-            PlainTextWriter writer, Group group, boolean detailed
-    ) {
+    private static void printGroupPlainText(PlainTextWriter writer, Group group, boolean detailed) {
         if (detailed) {
             final var groupInviteLink = group.groupInviteLinkUrl();
 
             writer.println(
-                    "Id: {} Name: {} Description: {} Active: {} Blocked: {} Members: {} Pending members: {} Requesting members: {} Admins: {} Message expiration: {} Link: {}",
+                    "Id: {} Name: {} Description: {} Active: {} Blocked: {} Members: {} Pending members: {} Requesting members: {} Admins: {} Banned: {} Message expiration: {} Link: {}",
                     group.groupId().toBase64(),
                     group.title(),
                     group.description(),
@@ -63,6 +63,7 @@ public class ListGroupsCommand implements JsonRpcLocalCommand {
                     resolveMembers(group.pendingMembers()),
                     resolveMembers(group.requestingMembers()),
                     resolveMembers(group.adminMembers()),
+                    resolveMembers(group.bannedMembers()),
                     group.messageExpirationTimer() == 0 ? "disabled" : group.messageExpirationTimer() + "s",
                     groupInviteLink == null ? '-' : groupInviteLink.getUrl());
         } else {
@@ -76,37 +77,46 @@ public class ListGroupsCommand implements JsonRpcLocalCommand {
 
     @Override
     public void handleCommand(
-            final Namespace ns, final Manager m, final OutputWriter outputWriter
+            final Namespace ns,
+            final Manager m,
+            final OutputWriter outputWriter
     ) throws CommandException {
-        final var groups = m.getGroups();
-
-        if (outputWriter instanceof JsonWriter jsonWriter) {
-
-            var jsonGroups = groups.stream().map(group -> {
-                final var groupInviteLink = group.groupInviteLinkUrl();
-
-                return new JsonGroup(group.groupId().toBase64(),
-                        group.title(),
-                        group.description(),
-                        group.isMember(),
-                        group.isBlocked(),
-                        group.messageExpirationTimer(),
-                        resolveJsonMembers(group.members()),
-                        resolveJsonMembers(group.pendingMembers()),
-                        resolveJsonMembers(group.requestingMembers()),
-                        resolveJsonMembers(group.adminMembers()),
-                        group.permissionAddMember().name(),
-                        group.permissionEditDetails().name(),
-                        group.permissionSendMessage().name(),
-                        groupInviteLink == null ? null : groupInviteLink.getUrl());
-            }).collect(Collectors.toList());
-
-            jsonWriter.write(jsonGroups);
-        } else {
-            final var writer = (PlainTextWriter) outputWriter;
-            boolean detailed = Boolean.TRUE.equals(ns.getBoolean("detailed"));
-            for (var group : groups) {
-                printGroupPlainText(writer, group, detailed);
+        var groups = m.getGroups();
+
+        final var groupIdStrings = ns.<String>getList("group-id");
+        final var groupIds = CommandUtil.getGroupIds(groupIdStrings);
+        if (!groupIds.isEmpty()) {
+            groups = groups.stream().filter(g -> groupIds.contains(g.groupId())).toList();
+        }
+
+        switch (outputWriter) {
+            case JsonWriter jsonWriter -> {
+                var jsonGroups = groups.stream().map(group -> {
+                    final var groupInviteLink = group.groupInviteLinkUrl();
+
+                    return new JsonGroup(group.groupId().toBase64(),
+                            group.title(),
+                            group.description(),
+                            group.isMember(),
+                            group.isBlocked(),
+                            group.messageExpirationTimer(),
+                            resolveJsonMembers(group.members()),
+                            resolveJsonMembers(group.pendingMembers()),
+                            resolveJsonMembers(group.requestingMembers()),
+                            resolveJsonMembers(group.adminMembers()),
+                            resolveJsonMembers(group.bannedMembers()),
+                            group.permissionAddMember().name(),
+                            group.permissionEditDetails().name(),
+                            group.permissionSendMessage().name(),
+                            groupInviteLink == null ? null : groupInviteLink.getUrl());
+                }).toList();
+                jsonWriter.write(jsonGroups);
+            }
+            case PlainTextWriter writer -> {
+                boolean detailed = Boolean.TRUE.equals(ns.getBoolean("detailed"));
+                for (var group : groups) {
+                    printGroupPlainText(writer, group, detailed);
+                }
             }
         }
     }
@@ -122,6 +132,7 @@ public class ListGroupsCommand implements JsonRpcLocalCommand {
             Set<JsonGroupMember> pendingMembers,
             Set<JsonGroupMember> requestingMembers,
             Set<JsonGroupMember> admins,
+            Set<JsonGroupMember> banned,
             String permissionAddMember,
             String permissionEditDetails,
             String permissionSendMessage,