]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java
Improve identites listing
[signal-cli] / src / main / java / org / asamk / signal / dbus / DbusSignalImpl.java
index f6ea4eef1072dc350212f2038e20fb451a1e78de..608ed581978d6f9f6be7358fd0f7933b6f851aac 100644 (file)
@@ -185,6 +185,8 @@ public class DbusSignalImpl implements Signal {
             m.addDeviceLink(deviceLinkUrl);
         } catch (IOException | InvalidDeviceLinkException e) {
             throw new Error.Failure(e.getClass().getSimpleName() + " Add device link failed. " + e.getMessage());
+        } catch (NotPrimaryDeviceException e) {
+            throw new Error.Failure("This command doesn't work on linked devices.");
         } catch (URISyntaxException e) {
             throw new Error.InvalidUri(e.getClass().getSimpleName()
                     + " Device link uri has invalid format: "
@@ -1030,7 +1032,7 @@ public class DbusSignalImpl implements Signal {
             connection.exportObject(object);
             logger.debug("Exported dbus object: " + object.getObjectPath());
         } catch (DBusException e) {
-            e.printStackTrace();
+            logger.warn("Failed to export dbus object (" + object.getObjectPath() + "): " + e.getMessage());
         }
     }
 
@@ -1044,8 +1046,8 @@ public class DbusSignalImpl implements Signal {
             final var object = new DbusSignalIdentityImpl(i);
             exportObject(object);
             this.identities.add(new StructIdentity(new DBusPath(object.getObjectPath()),
-                    emptyIfNull(i.recipient().getIdentifier()),
-                    i.recipient().getLegacyIdentifier()));
+                    i.recipient().uuid().map(UUID::toString).orElse(""),
+                    i.recipient().number().orElse("")));
         });
     }
 
@@ -1063,11 +1065,12 @@ public class DbusSignalImpl implements Signal {
 
     @Override
     public DBusPath getIdentity(String number) throws Error.Failure {
-
-        final var found = identities.stream().filter(identity -> identity.getName().equals(number)).findFirst();
+        final var found = identities.stream()
+                .filter(identity -> identity.getNumber().equals(number) || identity.getUuid().equals(number))
+                .findFirst();
 
         if (found.isEmpty()) {
-            throw new Error.Failure("Identity for " + number + " unkown");
+            throw new Error.Failure("Identity for " + number + " unknown");
         }
         return found.get().getObjectPath();
     }
@@ -1088,7 +1091,7 @@ public class DbusSignalImpl implements Signal {
                     List.of(new DbusProperty<>("Number", () -> identity.recipient().number().orElse("")),
                             new DbusProperty<>("Uuid",
                                     () -> identity.recipient().uuid().map(UUID::toString).orElse("")),
-                            new DbusProperty<>("Fingerprint", () -> identity.getFingerprint()),
+                            new DbusProperty<>("Fingerprint", identity::getFingerprint),
                             new DbusProperty<>("SafetyNumber", identity::safetyNumber),
                             new DbusProperty<>("ScannableSafetyNumber", identity::scannableSafetyNumber),
                             new DbusProperty<>("TrustLevel", identity::trustLevel),
@@ -1097,7 +1100,8 @@ public class DbusSignalImpl implements Signal {
 
         @Override
         public String getObjectPath() {
-            return getIdentityObjectPath(objectPath, identity.recipient().getLegacyIdentifier());
+            return getIdentityObjectPath(objectPath,
+                    identity.recipient().getLegacyIdentifier() + "_" + identity.recipient().getIdentifier());
         }
 
         @Override
@@ -1108,6 +1112,7 @@ public class DbusSignalImpl implements Signal {
             } catch (UnregisteredRecipientException e) {
                 throw new Error.Failure("The user " + e.getSender().getIdentifier() + " is not registered.");
             }
+            updateIdentities();
         }
 
         @Override
@@ -1134,6 +1139,7 @@ public class DbusSignalImpl implements Signal {
             } catch (UnregisteredRecipientException e) {
                 throw new Error.Failure("The user " + e.getSender().getIdentifier() + " is not registered.");
             }
+            updateIdentities();
         }
     }
 
@@ -1181,8 +1187,7 @@ public class DbusSignalImpl implements Signal {
 
     public class DbusSignalConfigurationImpl extends DbusProperties implements Signal.Configuration {
 
-        public DbusSignalConfigurationImpl(
-        ) {
+        public DbusSignalConfigurationImpl() {
             super.addPropertiesHandler(new DbusInterfacePropertiesHandler("org.asamk.Signal.Configuration",
                     List.of(new DbusProperty<>("ReadReceipts", this::getReadReceipts, this::setReadReceipts),
                             new DbusProperty<>("UnidentifiedDeliveryIndicators",