]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java
Cleanup manager package
[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.manager.Manager;
6 import org.asamk.signal.manager.api.UntrustedIdentityException;
7 import org.asamk.signal.manager.api.MessageEnvelope;
8 import org.asamk.signal.manager.api.RecipientIdentifier;
9 import org.asamk.signal.manager.storage.recipients.RecipientAddress;
10
11 import java.util.UUID;
12
13 public record JsonMessageEnvelope(
14 @Deprecated String source,
15 String sourceNumber,
16 String sourceUuid,
17 String sourceName,
18 Integer sourceDevice,
19 long timestamp,
20 @JsonInclude(JsonInclude.Include.NON_NULL) JsonDataMessage dataMessage,
21 @JsonInclude(JsonInclude.Include.NON_NULL) JsonSyncMessage syncMessage,
22 @JsonInclude(JsonInclude.Include.NON_NULL) JsonCallMessage callMessage,
23 @JsonInclude(JsonInclude.Include.NON_NULL) JsonReceiptMessage receiptMessage,
24 @JsonInclude(JsonInclude.Include.NON_NULL) JsonTypingMessage typingMessage
25 ) {
26
27 public static JsonMessageEnvelope from(
28 MessageEnvelope envelope, Throwable exception, Manager m
29 ) {
30 final RecipientAddress sourceAddress;
31 final Integer sourceDevice;
32 if (envelope.sourceAddress().isPresent()) {
33 sourceAddress = envelope.sourceAddress().get();
34 sourceDevice = envelope.sourceDevice();
35 } else if (exception instanceof UntrustedIdentityException e) {
36 sourceAddress = e.getSender();
37 sourceDevice = e.getSenderDevice();
38 } else {
39 sourceAddress = null;
40 sourceDevice = null;
41 }
42
43 final String source;
44 final String sourceNumber;
45 final String sourceUuid;
46 final String sourceName;
47 if (sourceAddress != null) {
48 source = sourceAddress.getLegacyIdentifier();
49 sourceNumber = sourceAddress.number().orElse(null);
50 sourceUuid = sourceAddress.uuid().map(UUID::toString).orElse(null);
51 sourceName = m.getContactOrProfileName(RecipientIdentifier.Single.fromAddress(envelope.sourceAddress()
52 .get()));
53 } else {
54 source = null;
55 sourceNumber = null;
56 sourceUuid = null;
57 sourceName = null;
58 }
59 final var timestamp = envelope.timestamp();
60 final var receiptMessage = envelope.receipt().map(JsonReceiptMessage::from).orElse(null);
61 final var typingMessage = envelope.typing().map(JsonTypingMessage::from).orElse(null);
62
63 final var dataMessage = envelope.data().map(JsonDataMessage::from).orElse(null);
64 final var syncMessage = envelope.sync().map(JsonSyncMessage::from).orElse(null);
65 final var callMessage = envelope.call().map(JsonCallMessage::from).orElse(null);
66
67 return new JsonMessageEnvelope(source,
68 sourceNumber,
69 sourceUuid,
70 sourceName,
71 sourceDevice,
72 timestamp,
73 dataMessage,
74 syncMessage,
75 callMessage,
76 receiptMessage,
77 typingMessage);
78 }
79 }