]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java
Refactor ReceiveCommand in dbus mode and remove ExtendedDbusCommand
[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.UntrustedIdentityException;
7 import org.asamk.signal.manager.api.InvalidNumberException;
8 import org.asamk.signal.manager.api.MessageEnvelope;
9 import org.asamk.signal.manager.api.RecipientIdentifier;
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 String source;
31 final String sourceNumber;
32 final String sourceUuid;
33 final Integer sourceDevice;
34 if (envelope.sourceAddress().isPresent()) {
35 final var sourceAddress = envelope.sourceAddress().get();
36 source = sourceAddress.getLegacyIdentifier();
37 sourceNumber = sourceAddress.getNumber().orElse(null);
38 sourceUuid = sourceAddress.getUuid().map(UUID::toString).orElse(null);
39 sourceDevice = envelope.sourceDevice();
40 } else if (exception instanceof UntrustedIdentityException e) {
41 final var sender = e.getSender();
42 source = sender.getLegacyIdentifier();
43 sourceNumber = sender.getNumber().orElse(null);
44 sourceUuid = sender.getUuid().map(UUID::toString).orElse(null);
45 sourceDevice = e.getSenderDevice();
46 } else {
47 source = null;
48 sourceNumber = null;
49 sourceUuid = null;
50 sourceDevice = null;
51 }
52 String name;
53 try {
54 name = m.getContactOrProfileName(RecipientIdentifier.Single.fromString(source, m.getSelfNumber()));
55 } catch (InvalidNumberException | NullPointerException e) {
56 name = null;
57 }
58 final var sourceName = name;
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 }