]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java
Add removeContact command
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / api / RecipientIdentifier.java
1 package org.asamk.signal.manager.api;
2
3 import org.asamk.signal.manager.groups.GroupId;
4 import org.asamk.signal.manager.storage.recipients.RecipientAddress;
5 import org.slf4j.Logger;
6 import org.slf4j.LoggerFactory;
7 import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
8 import org.whispersystems.signalservice.api.util.UuidUtil;
9
10 import java.util.UUID;
11
12 public sealed interface RecipientIdentifier {
13
14 record NoteToSelf() implements RecipientIdentifier {
15
16 public static NoteToSelf INSTANCE = new NoteToSelf();
17 }
18
19 sealed interface Single extends RecipientIdentifier {
20
21 static Single fromString(String identifier, String localNumber) throws InvalidNumberException {
22 try {
23 if (UuidUtil.isUuid(identifier)) {
24 return new Uuid(UUID.fromString(identifier));
25 }
26
27 final var normalizedNumber = PhoneNumberFormatter.formatNumber(identifier, localNumber);
28 if (!normalizedNumber.equals(identifier)) {
29 final Logger logger = LoggerFactory.getLogger(RecipientIdentifier.class);
30 logger.debug("Normalized number {} to {}.", identifier, normalizedNumber);
31 }
32 return new Number(normalizedNumber);
33 } catch (org.whispersystems.signalservice.api.util.InvalidNumberException e) {
34 throw new InvalidNumberException(e.getMessage(), e);
35 }
36 }
37
38 static Single fromAddress(RecipientAddress address) {
39 if (address.getNumber().isPresent()) {
40 return new Number(address.getNumber().get());
41 } else if (address.getUuid().isPresent()) {
42 return new Uuid(address.getUuid().get());
43 }
44 throw new AssertionError("RecipientAddress without identifier");
45 }
46
47 String getIdentifier();
48 }
49
50 record Uuid(UUID uuid) implements Single {
51
52 @Override
53 public String getIdentifier() {
54 return uuid.toString();
55 }
56 }
57
58 record Number(String number) implements Single {
59
60 @Override
61 public String getIdentifier() {
62 return number;
63 }
64 }
65
66 record Group(GroupId groupId) implements RecipientIdentifier {}
67 }