]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java
Refactor receive api
[signal-cli] / src / main / java / org / asamk / signal / json / JsonMessageEnvelope.java
1 package org.asamk.signal.json;
2
3 import com.fasterxml.jackson.annotation.JsonInclude;
4
5 import org.asamk.Signal;
6 import org.asamk.signal.manager.Manager;
7 import org.asamk.signal.manager.UntrustedIdentityException;
8 import org.asamk.signal.manager.api.MessageEnvelope;
9 import org.asamk.signal.manager.api.RecipientIdentifier;
10 import org.whispersystems.signalservice.api.util.InvalidNumberException;
11
12 import java.util.List;
13 import java.util.UUID;
14
15 public record JsonMessageEnvelope(
16 @Deprecated String source,
17 String sourceNumber,
18 String sourceUuid,
19 String sourceName,
20 Integer sourceDevice,
21 long timestamp,
22 @JsonInclude(JsonInclude.Include.NON_NULL) JsonDataMessage dataMessage,
23 @JsonInclude(JsonInclude.Include.NON_NULL) JsonSyncMessage syncMessage,
24 @JsonInclude(JsonInclude.Include.NON_NULL) JsonCallMessage callMessage,
25 @JsonInclude(JsonInclude.Include.NON_NULL) JsonReceiptMessage receiptMessage,
26 @JsonInclude(JsonInclude.Include.NON_NULL) JsonTypingMessage typingMessage
27 ) {
28
29 public static JsonMessageEnvelope from(
30 MessageEnvelope envelope, Throwable exception, Manager m
31 ) {
32 final String source;
33 final String sourceNumber;
34 final String sourceUuid;
35 final Integer sourceDevice;
36 if (envelope.sourceAddress().isPresent()) {
37 final var sourceAddress = envelope.sourceAddress().get();
38 source = sourceAddress.getLegacyIdentifier();
39 sourceNumber = sourceAddress.getNumber().orElse(null);
40 sourceUuid = sourceAddress.getUuid().map(UUID::toString).orElse(null);
41 sourceDevice = envelope.sourceDevice();
42 } else if (exception instanceof UntrustedIdentityException e) {
43 final var sender = e.getSender();
44 source = sender.getLegacyIdentifier();
45 sourceNumber = sender.getNumber().orElse(null);
46 sourceUuid = sender.getUuid().map(UUID::toString).orElse(null);
47 sourceDevice = e.getSenderDevice();
48 } else {
49 source = null;
50 sourceNumber = null;
51 sourceUuid = null;
52 sourceDevice = null;
53 }
54 String name;
55 try {
56 name = m.getContactOrProfileName(RecipientIdentifier.Single.fromString(source, m.getSelfNumber()));
57 } catch (InvalidNumberException | NullPointerException e) {
58 name = null;
59 }
60 final var sourceName = name;
61 final var timestamp = envelope.timestamp();
62 final var receiptMessage = envelope.receipt().map(JsonReceiptMessage::from).orElse(null);
63 final var typingMessage = envelope.typing().map(JsonTypingMessage::from).orElse(null);
64
65 final var dataMessage = envelope.data().map(JsonDataMessage::from).orElse(null);
66 final var syncMessage = envelope.sync().map(JsonSyncMessage::from).orElse(null);
67 final var callMessage = envelope.call().map(JsonCallMessage::from).orElse(null);
68
69 return new JsonMessageEnvelope(source,
70 sourceNumber,
71 sourceUuid,
72 sourceName,
73 sourceDevice,
74 timestamp,
75 dataMessage,
76 syncMessage,
77 callMessage,
78 receiptMessage,
79 typingMessage);
80 }
81
82 public static JsonMessageEnvelope from(Signal.MessageReceived messageReceived) {
83 return new JsonMessageEnvelope(messageReceived.getSource(),
84 null,
85 null,
86 null,
87 null,
88 messageReceived.getTimestamp(),
89 JsonDataMessage.from(messageReceived),
90 null,
91 null,
92 null,
93 null);
94 }
95
96 public static JsonMessageEnvelope from(Signal.ReceiptReceived receiptReceived) {
97 return new JsonMessageEnvelope(receiptReceived.getSender(),
98 null,
99 null,
100 null,
101 null,
102 receiptReceived.getTimestamp(),
103 null,
104 null,
105 null,
106 JsonReceiptMessage.deliveryReceipt(receiptReceived.getTimestamp(),
107 List.of(receiptReceived.getTimestamp())),
108 null);
109 }
110
111 public static JsonMessageEnvelope from(Signal.SyncMessageReceived messageReceived) {
112 return new JsonMessageEnvelope(messageReceived.getSource(),
113 null,
114 null,
115 null,
116 null,
117 messageReceived.getTimestamp(),
118 null,
119 JsonSyncMessage.from(messageReceived),
120 null,
121 null,
122 null);
123 }
124 }