]> 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 a6a9a2f1a4daa964983870d2daf76bb1dbade095..62bb4f14510db227b935c28445aa71aaec67446d 100644 (file)
@@ -4,14 +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.storage.groups.GroupInfo;
-import org.asamk.signal.manager.storage.recipients.RecipientId;
-import org.asamk.signal.util.Util;
+import org.asamk.signal.manager.api.Group;
+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;
 
@@ -21,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() {
@@ -34,137 +34,110 @@ 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(Manager m, Set<RecipientId> addresses) {
-        return addresses.stream()
-                .map(m::resolveSignalServiceAddress)
-                .map(Util::getLegacyIdentifier)
-                .collect(Collectors.toSet());
+    private static Set<String> resolveMembers(Set<RecipientAddress> addresses) {
+        return addresses.stream().map(RecipientAddress::getLegacyIdentifier).collect(Collectors.toSet());
     }
 
-    private static Set<JsonGroupMember> resolveJsonMembers(Manager m, Set<RecipientId> addresses) {
+    private static Set<JsonGroupMember> resolveJsonMembers(Set<RecipientAddress> addresses) {
         return addresses.stream()
-                .map(m::resolveSignalServiceAddress)
-                .map(address -> new JsonGroupMember(address.getNumber().orNull(),
-                        address.getUuid().transform(UUID::toString).orNull()))
+                .map(address -> new JsonGroupMember(address.number().orElse(null),
+                        address.uuid().map(UUID::toString).orElse(null)))
                 .collect(Collectors.toSet());
     }
 
-    private static void printGroupPlainText(
-            PlainTextWriter writer, Manager m, GroupInfo group, boolean detailed
-    ) {
+    private static void printGroupPlainText(PlainTextWriter writer, Group group, boolean detailed) {
         if (detailed) {
-            final var groupInviteLink = group.getGroupInviteLink();
+            final var groupInviteLink = group.groupInviteLinkUrl();
 
             writer.println(
-                    "Id: {} Name: {} Description: {} Active: {} Blocked: {} Members: {} Pending members: {} Requesting members: {} Admins: {} Message expiration: {} Link: {}",
-                    group.getGroupId().toBase64(),
-                    group.getTitle(),
-                    group.getDescription(),
-                    group.isMember(m.getSelfRecipientId()),
+                    "Id: {} Name: {} Description: {} Active: {} Blocked: {} Members: {} Pending members: {} Requesting members: {} Admins: {} Banned: {} Message expiration: {} Link: {}",
+                    group.groupId().toBase64(),
+                    group.title(),
+                    group.description(),
+                    group.isMember(),
                     group.isBlocked(),
-                    resolveMembers(m, group.getMembers()),
-                    resolveMembers(m, group.getPendingMembers()),
-                    resolveMembers(m, group.getRequestingMembers()),
-                    resolveMembers(m, group.getAdminMembers()),
-                    group.getMessageExpirationTime() == 0 ? "disabled" : group.getMessageExpirationTime() + "s",
+                    resolveMembers(group.members()),
+                    resolveMembers(group.pendingMembers()),
+                    resolveMembers(group.requestingMembers()),
+                    resolveMembers(group.adminMembers()),
+                    resolveMembers(group.bannedMembers()),
+                    group.messageExpirationTimer() == 0 ? "disabled" : group.messageExpirationTimer() + "s",
                     groupInviteLink == null ? '-' : groupInviteLink.getUrl());
         } else {
             writer.println("Id: {} Name: {}  Active: {} Blocked: {}",
-                    group.getGroupId().toBase64(),
-                    group.getTitle(),
-                    group.isMember(m.getSelfRecipientId()),
+                    group.groupId().toBase64(),
+                    group.title(),
+                    group.isMember(),
                     group.isBlocked());
         }
     }
 
     @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) {
-            final var jsonWriter = (JsonWriter) outputWriter;
-
-            var jsonGroups = groups.stream().map(group -> {
-                final var groupInviteLink = group.getGroupInviteLink();
-
-                return new JsonGroup(group.getGroupId().toBase64(),
-                        group.getTitle(),
-                        group.getDescription(),
-                        group.isMember(m.getSelfRecipientId()),
-                        group.isBlocked(),
-                        group.getMessageExpirationTime(),
-                        resolveJsonMembers(m, group.getMembers()),
-                        resolveJsonMembers(m, group.getPendingMembers()),
-                        resolveJsonMembers(m, group.getRequestingMembers()),
-                        resolveJsonMembers(m, group.getAdminMembers()),
-                        groupInviteLink == null ? null : groupInviteLink.getUrl());
-            }).collect(Collectors.toList());
-
-            jsonWriter.write(jsonGroups);
-        } else {
-            final var writer = (PlainTextWriter) outputWriter;
-            boolean detailed = ns.getBoolean("detailed");
-            for (var group : groups) {
-                printGroupPlainText(writer, m, group, detailed);
-            }
-        }
-    }
+        var groups = m.getGroups();
 
-    private static final class JsonGroup {
-
-        public final String id;
-        public final String name;
-        public final String description;
-        public final boolean isMember;
-        public final boolean isBlocked;
-        public final int messageExpirationTime;
-
-        public final Set<JsonGroupMember> members;
-        public final Set<JsonGroupMember> pendingMembers;
-        public final Set<JsonGroupMember> requestingMembers;
-        public final Set<JsonGroupMember> admins;
-        public final String groupInviteLink;
-
-        public JsonGroup(
-                String id,
-                String name,
-                String description,
-                boolean isMember,
-                boolean isBlocked,
-                final int messageExpirationTime,
-                Set<JsonGroupMember> members,
-                Set<JsonGroupMember> pendingMembers,
-                Set<JsonGroupMember> requestingMembers,
-                Set<JsonGroupMember> admins,
-                String groupInviteLink
-        ) {
-            this.id = id;
-            this.name = name;
-            this.description = description;
-            this.isMember = isMember;
-            this.isBlocked = isBlocked;
-            this.messageExpirationTime = messageExpirationTime;
-
-            this.members = members;
-            this.pendingMembers = pendingMembers;
-            this.requestingMembers = requestingMembers;
-            this.admins = admins;
-            this.groupInviteLink = groupInviteLink;
+        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();
         }
-    }
-
-    private static final class JsonGroupMember {
-
-        public final String number;
-        public final String uuid;
 
-        private JsonGroupMember(final String number, final String uuid) {
-            this.number = number;
-            this.uuid = uuid;
+        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);
+                }
+            }
         }
     }
+
+    private record JsonGroup(
+            String id,
+            String name,
+            String description,
+            boolean isMember,
+            boolean isBlocked,
+            int messageExpirationTime,
+            Set<JsonGroupMember> members,
+            Set<JsonGroupMember> pendingMembers,
+            Set<JsonGroupMember> requestingMembers,
+            Set<JsonGroupMember> admins,
+            Set<JsonGroupMember> banned,
+            String permissionAddMember,
+            String permissionEditDetails,
+            String permissionSendMessage,
+            String groupInviteLink
+    ) {}
+
+    private record JsonGroupMember(String number, String uuid) {}
 }