]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java
Paralellize profile fetching
[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 String getIdentifier();
15
16 record NoteToSelf() implements RecipientIdentifier {
17
18 public static NoteToSelf INSTANCE = new NoteToSelf();
19
20 @Override
21 public String getIdentifier() {
22 return "Note-To-Self";
23 }
24 }
25
26 sealed interface Single extends RecipientIdentifier {
27
28 static Single fromString(String identifier, String localNumber) throws InvalidNumberException {
29 try {
30 if (UuidUtil.isUuid(identifier)) {
31 return new Uuid(UUID.fromString(identifier));
32 }
33
34 final var normalizedNumber = PhoneNumberFormatter.formatNumber(identifier, localNumber);
35 if (!normalizedNumber.equals(identifier)) {
36 final Logger logger = LoggerFactory.getLogger(RecipientIdentifier.class);
37 logger.debug("Normalized number {} to {}.", identifier, normalizedNumber);
38 }
39 return new Number(normalizedNumber);
40 } catch (org.whispersystems.signalservice.api.util.InvalidNumberException e) {
41 throw new InvalidNumberException(e.getMessage(), e);
42 }
43 }
44
45 static Single fromAddress(RecipientAddress address) {
46 if (address.number().isPresent()) {
47 return new Number(address.number().get());
48 } else if (address.uuid().isPresent()) {
49 return new Uuid(address.uuid().get());
50 }
51 throw new AssertionError("RecipientAddress without identifier");
52 }
53 }
54
55 record Uuid(UUID uuid) implements Single {
56
57 @Override
58 public String getIdentifier() {
59 return uuid.toString();
60 }
61 }
62
63 record Number(String number) implements Single {
64
65 @Override
66 public String getIdentifier() {
67 return number;
68 }
69 }
70
71 record Group(GroupId groupId) implements RecipientIdentifier {
72
73 @Override
74 public String getIdentifier() {
75 return groupId.toBase64();
76 }
77 }
78 }