]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java
Implement editing of previous messages
[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.MessageEnvelope;
7 import org.asamk.signal.manager.api.RecipientAddress;
8 import org.asamk.signal.manager.api.RecipientIdentifier;
9 import org.asamk.signal.manager.api.UntrustedIdentityException;
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) JsonEditMessage editMessage,
22 @JsonInclude(JsonInclude.Include.NON_NULL) JsonStoryMessage storyMessage,
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 RecipientAddress sourceAddress;
33 final Integer sourceDevice;
34 if (envelope.sourceAddress().isPresent()) {
35 sourceAddress = envelope.sourceAddress().get();
36 sourceDevice = envelope.sourceDevice();
37 } else if (exception instanceof UntrustedIdentityException e) {
38 sourceAddress = e.getSender();
39 sourceDevice = e.getSenderDevice();
40 } else {
41 sourceAddress = null;
42 sourceDevice = null;
43 }
44
45 final String source;
46 final String sourceNumber;
47 final String sourceUuid;
48 final String sourceName;
49 if (sourceAddress != null) {
50 source = sourceAddress.getLegacyIdentifier();
51 sourceNumber = sourceAddress.number().orElse(null);
52 sourceUuid = sourceAddress.uuid().map(UUID::toString).orElse(null);
53 sourceName = m.getContactOrProfileName(RecipientIdentifier.Single.fromAddress(sourceAddress));
54 } else {
55 source = null;
56 sourceNumber = null;
57 sourceUuid = null;
58 sourceName = null;
59 }
60 final var timestamp = envelope.timestamp();
61 final var receiptMessage = envelope.receipt().map(JsonReceiptMessage::from).orElse(null);
62 final var typingMessage = envelope.typing().map(JsonTypingMessage::from).orElse(null);
63
64 final var dataMessage = envelope.data().map(JsonDataMessage::from).orElse(null);
65 final var editMessage = envelope.edit().map(JsonEditMessage::from).orElse(null);
66 final var storyMessage = envelope.story().map(JsonStoryMessage::from).orElse(null);
67 final var syncMessage = envelope.sync().map(JsonSyncMessage::from).orElse(null);
68 final var callMessage = envelope.call().map(JsonCallMessage::from).orElse(null);
69
70 return new JsonMessageEnvelope(source,
71 sourceNumber,
72 sourceUuid,
73 sourceName,
74 sourceDevice,
75 timestamp,
76 dataMessage,
77 editMessage,
78 storyMessage,
79 syncMessage,
80 callMessage,
81 receiptMessage,
82 typingMessage);
83 }
84 }