package org.asamk.signal.manager.api;
-import org.asamk.signal.manager.groups.GroupId;
-import org.asamk.signal.manager.storage.recipients.RecipientAddress;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
public sealed interface RecipientIdentifier {
+ String getIdentifier();
+
record NoteToSelf() implements RecipientIdentifier {
- public static NoteToSelf INSTANCE = new NoteToSelf();
+ public static final NoteToSelf INSTANCE = new NoteToSelf();
+
+ @Override
+ public String getIdentifier() {
+ return "Note-To-Self";
+ }
}
sealed interface Single extends RecipientIdentifier {
return new Uuid(UUID.fromString(identifier));
}
+ if (identifier.startsWith("u:")) {
+ return new Username(identifier.substring(2));
+ }
+
final var normalizedNumber = PhoneNumberFormatter.formatNumber(identifier, localNumber);
if (!normalizedNumber.equals(identifier)) {
final Logger logger = LoggerFactory.getLogger(RecipientIdentifier.class);
static Single fromAddress(RecipientAddress address) {
if (address.number().isPresent()) {
return new Number(address.number().get());
- } else if (address.uuid().isPresent()) {
- return new Uuid(address.uuid().get());
+ } else if (address.aci().isPresent()) {
+ return new Uuid(UUID.fromString(address.aci().get()));
+ } else if (address.username().isPresent()) {
+ return new Username(address.username().get());
}
throw new AssertionError("RecipientAddress without identifier");
}
- String getIdentifier();
+ RecipientAddress toPartialRecipientAddress();
}
record Uuid(UUID uuid) implements Single {
public String getIdentifier() {
return uuid.toString();
}
+
+ @Override
+ public RecipientAddress toPartialRecipientAddress() {
+ return new RecipientAddress(uuid);
+ }
}
record Number(String number) implements Single {
public String getIdentifier() {
return number;
}
+
+ @Override
+ public RecipientAddress toPartialRecipientAddress() {
+ return new RecipientAddress(number);
+ }
}
- record Group(GroupId groupId) implements RecipientIdentifier {}
+ record Username(String username) implements Single {
+
+ @Override
+ public String getIdentifier() {
+ return "u:" + username;
+ }
+
+ @Override
+ public RecipientAddress toPartialRecipientAddress() {
+ return new RecipientAddress(null, null, null, username);
+ }
+ }
+
+ record Group(GroupId groupId) implements RecipientIdentifier {
+
+ @Override
+ public String getIdentifier() {
+ return groupId.toBase64();
+ }
+ }
}