From: AsamK Date: Fri, 17 May 2024 16:02:05 +0000 (+0200) Subject: Handle all possible identifiers of a RecipientAddress X-Git-Tag: v0.13.4~14 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/53d7e0f08b3322eeedba328236e3df8ccac54d48?ds=inline Handle all possible identifiers of a RecipientAddress Fixes #1516 --- diff --git a/lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java b/lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java index 823881c7..794672a4 100644 --- a/lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java +++ b/lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java @@ -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 diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java index 092cff6f..bdd192a6 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java @@ -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, () -> { diff --git a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java index ef2e52e3..42bce3c6 100644 --- a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java @@ -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);