]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/commands/ListIdentitiesCommand.java
Implement dbus support for listIdentities
[signal-cli] / src / main / java / org / asamk / signal / commands / ListIdentitiesCommand.java
index d7646ebbfa3bea4789255171e4e7625c7899dea8..6b49a81207bf3371bf9ea1022d874c49ffc4cce7 100644 (file)
@@ -3,41 +3,39 @@ package org.asamk.signal.commands;
 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.Identity;
+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.asamk.signal.util.DateUtils;
 import org.asamk.signal.util.Hex;
 import org.asamk.signal.util.Util;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.whispersystems.signalservice.api.push.SignalServiceAddress;
 
 import java.util.Base64;
 import java.util.List;
-import java.util.stream.Collectors;
+import java.util.UUID;
 
 public class ListIdentitiesCommand implements JsonRpcLocalCommand {
 
-    private final static Logger logger = LoggerFactory.getLogger(ListIdentitiesCommand.class);
+    private static final Logger logger = LoggerFactory.getLogger(ListIdentitiesCommand.class);
 
     @Override
     public String getName() {
         return "listIdentities";
     }
 
-    private static void printIdentityFingerprint(PlainTextWriter writer, Manager m, Identity theirId) {
-        final SignalServiceAddress address = theirId.getRecipient().toSignalServiceAddress();
-        var digits = Util.formatSafetyNumber(theirId.getSafetyNumber());
+    private static void printIdentityFingerprint(PlainTextWriter writer, Identity theirId) {
         writer.println("{}: {} Added: {} Fingerprint: {} Safety Number: {}",
-                address.getNumber().orNull(),
-                theirId.getTrustLevel(),
-                theirId.getDateAdded(),
-                Hex.toString(theirId.getFingerprint()),
-                digits);
+                theirId.recipient().getLegacyIdentifier(),
+                theirId.trustLevel(),
+                DateUtils.formatTimestamp(theirId.dateAddedTimestamp()),
+                Hex.toString(theirId.fingerprint()),
+                Util.formatSafetyNumber(theirId.safetyNumber()));
     }
 
     @Override
@@ -59,57 +57,39 @@ public class ListIdentitiesCommand implements JsonRpcLocalCommand {
             identities = m.getIdentities(CommandUtil.getSingleRecipientIdentifier(number, m.getSelfNumber()));
         }
 
-        if (outputWriter instanceof PlainTextWriter writer) {
-            for (var id : identities) {
-                printIdentityFingerprint(writer, m, id);
+        switch (outputWriter) {
+            case PlainTextWriter writer -> {
+                for (var id : identities) {
+                    printIdentityFingerprint(writer, id);
+                }
+            }
+            case JsonWriter writer -> {
+                final var jsonIdentities = identities.stream().map(id -> {
+                    final var address = id.recipient();
+                    var safetyNumber = Util.formatSafetyNumber(id.safetyNumber());
+                    var scannableSafetyNumber = id.scannableSafetyNumber();
+                    return new JsonIdentity(address.number().orElse(null),
+                            address.uuid().map(UUID::toString).orElse(null),
+                            Hex.toString(id.fingerprint()),
+                            safetyNumber,
+                            scannableSafetyNumber == null
+                                    ? null
+                                    : Base64.getEncoder().encodeToString(scannableSafetyNumber),
+                            id.trustLevel().name(),
+                            id.dateAddedTimestamp());
+                }).toList();
+                writer.write(jsonIdentities);
             }
-        } else {
-            final var writer = (JsonWriter) outputWriter;
-            final var jsonIdentities = identities.stream().map(id -> {
-                final var address = id.getRecipient().toSignalServiceAddress();
-                var safetyNumber = Util.formatSafetyNumber(id.getSafetyNumber());
-                var scannableSafetyNumber = id.getScannableSafetyNumber();
-                return new JsonIdentity(address.getNumber().orNull(),
-                        address.getUuid().toString(),
-                        Hex.toString(id.getFingerprint()),
-                        safetyNumber,
-                        scannableSafetyNumber == null
-                                ? null
-                                : Base64.getEncoder().encodeToString(scannableSafetyNumber),
-                        id.getTrustLevel().name(),
-                        id.getDateAdded().getTime());
-            }).collect(Collectors.toList());
-
-            writer.write(jsonIdentities);
         }
     }
 
-    private static final class JsonIdentity {
-
-        public final String number;
-        public final String uuid;
-        public final String fingerprint;
-        public final String safetyNumber;
-        public final String scannableSafetyNumber;
-        public final String trustLevel;
-        public final long addedTimestamp;
-
-        private JsonIdentity(
-                final String number,
-                final String uuid,
-                final String fingerprint,
-                final String safetyNumber,
-                final String scannableSafetyNumber,
-                final String trustLevel,
-                final long addedTimestamp
-        ) {
-            this.number = number;
-            this.uuid = uuid;
-            this.fingerprint = fingerprint;
-            this.safetyNumber = safetyNumber;
-            this.scannableSafetyNumber = scannableSafetyNumber;
-            this.trustLevel = trustLevel;
-            this.addedTimestamp = addedTimestamp;
-        }
-    }
+    private record JsonIdentity(
+            String number,
+            String uuid,
+            String fingerprint,
+            String safetyNumber,
+            String scannableSafetyNumber,
+            String trustLevel,
+            long addedTimestamp
+    ) {}
 }