]> nmode's Git Repositories - signal-cli/commitdiff
Handle all possible identifiers of a RecipientAddress
authorAsamK <asamk@gmx.de>
Fri, 17 May 2024 16:02:05 +0000 (18:02 +0200)
committerAsamK <asamk@gmx.de>
Fri, 17 May 2024 16:02:05 +0000 (18:02 +0200)
Fixes #1516

lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java
lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java
lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java

index 823881c79c98900c5ff98e0b492bad383a06383c..794672a4b053368824d8a4b552a59b8df9a6a55a 100644 (file)
@@ -49,6 +49,8 @@ public sealed interface RecipientIdentifier {
                 return new Number(address.number().get());
             } else if (address.aci().isPresent()) {
                 return new Uuid(UUID.fromString(address.aci().get()));
+            } else if (address.pni().isPresent()) {
+                return new Pni(address.pni().get());
             } else if (address.username().isPresent()) {
                 return new Username(address.username().get());
             }
@@ -71,6 +73,19 @@ public sealed interface RecipientIdentifier {
         }
     }
 
+    record Pni(String pni) implements Single {
+
+        @Override
+        public String getIdentifier() {
+            return pni;
+        }
+
+        @Override
+        public RecipientAddress toPartialRecipientAddress() {
+            return new RecipientAddress(null, pni, null, null);
+        }
+    }
+
     record Number(String number) implements Single {
 
         @Override
index 092cff6f46b2ba39de9fc0706b2dbd45932535ef..bdd192a63807083c8918cf17900ffeae6f2f9499 100644 (file)
@@ -77,6 +77,8 @@ public class RecipientHelper {
     public RecipientId resolveRecipient(final RecipientIdentifier.Single recipient) throws UnregisteredRecipientException {
         if (recipient instanceof RecipientIdentifier.Uuid uuidRecipient) {
             return account.getRecipientResolver().resolveRecipient(ACI.from(uuidRecipient.uuid()));
+        } else if (recipient instanceof RecipientIdentifier.Pni pniRecipient) {
+            return account.getRecipientResolver().resolveRecipient(PNI.parseOrThrow(pniRecipient.pni()));
         } else if (recipient instanceof RecipientIdentifier.Number numberRecipient) {
             final var number = numberRecipient.number();
             return account.getRecipientStore().resolveRecipientByNumber(number, () -> {
index ef2e52e312ce3b754172ea684660282877666479..42bce3c63a4689da3389e2996a117636589ef6b8 100644 (file)
@@ -98,6 +98,7 @@ import org.whispersystems.signalservice.api.messages.SignalServiceReceiptMessage
 import org.whispersystems.signalservice.api.messages.SignalServiceTypingMessage;
 import org.whispersystems.signalservice.api.push.ServiceId;
 import org.whispersystems.signalservice.api.push.ServiceId.ACI;
+import org.whispersystems.signalservice.api.push.ServiceId.PNI;
 import org.whispersystems.signalservice.api.push.ServiceIdType;
 import org.whispersystems.signalservice.api.push.exceptions.CdsiResourceExhaustedException;
 import org.whispersystems.signalservice.api.util.DeviceNameUtil;
@@ -836,6 +837,9 @@ public class ManagerImpl implements Manager {
             if (recipient instanceof RecipientIdentifier.Uuid u) {
                 account.getMessageSendLogStore()
                         .deleteEntryForRecipientNonGroup(targetSentTimestamp, ACI.from(u.uuid()));
+            } else if (recipient instanceof RecipientIdentifier.Pni pni) {
+                account.getMessageSendLogStore()
+                        .deleteEntryForRecipientNonGroup(targetSentTimestamp, PNI.parseOrThrow(pni.pni()));
             } else if (recipient instanceof RecipientIdentifier.Single r) {
                 try {
                     final var recipientId = context.getRecipientHelper().resolveRecipient(r);