]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonDataMessage.java
74c07cd707d63d3a451d24a2e64e1cc53885459b
[signal-cli] / src / main / java / org / asamk / signal / json / JsonDataMessage.java
1 package org.asamk.signal.json;
2
3 import com.fasterxml.jackson.annotation.JsonInclude;
4
5 import org.asamk.signal.manager.api.MessageEnvelope;
6
7 import java.util.List;
8
9 record JsonDataMessage(
10 long timestamp,
11 String message,
12 Integer expiresInSeconds,
13 @JsonInclude(JsonInclude.Include.NON_NULL) Boolean viewOnce,
14 @JsonInclude(JsonInclude.Include.NON_NULL) JsonReaction reaction,
15 @JsonInclude(JsonInclude.Include.NON_NULL) JsonQuote quote,
16 @JsonInclude(JsonInclude.Include.NON_NULL) JsonPayment payment,
17 @JsonInclude(JsonInclude.Include.NON_NULL) List<JsonMention> mentions,
18 @JsonInclude(JsonInclude.Include.NON_NULL) List<JsonPreview> previews,
19 @JsonInclude(JsonInclude.Include.NON_NULL) List<JsonAttachment> attachments,
20 @JsonInclude(JsonInclude.Include.NON_NULL) JsonSticker sticker,
21 @JsonInclude(JsonInclude.Include.NON_NULL) JsonRemoteDelete remoteDelete,
22 @JsonInclude(JsonInclude.Include.NON_NULL) List<JsonSharedContact> contacts,
23 @JsonInclude(JsonInclude.Include.NON_NULL) JsonGroupInfo groupInfo
24 ) {
25
26 static JsonDataMessage from(MessageEnvelope.Data dataMessage) {
27 final var timestamp = dataMessage.timestamp();
28 final var groupInfo = dataMessage.groupContext().isPresent() ? JsonGroupInfo.from(dataMessage.groupContext()
29 .get()) : null;
30 final var message = dataMessage.body().orElse(null);
31 final var expiresInSeconds = dataMessage.expiresInSeconds();
32 final var viewOnce = dataMessage.isViewOnce();
33 final var reaction = dataMessage.reaction().map(JsonReaction::from).orElse(null);
34 final var quote = dataMessage.quote().isPresent() ? JsonQuote.from(dataMessage.quote().get()) : null;
35 final var payment = dataMessage.payment().isPresent() ? JsonPayment.from(dataMessage.payment().get()) : null;
36 final var mentions = dataMessage.mentions().size() > 0 ? dataMessage.mentions()
37 .stream()
38 .map(JsonMention::from)
39 .toList() : null;
40 final var previews = dataMessage.previews().size() > 0 ? dataMessage.previews()
41 .stream()
42 .map(JsonPreview::from)
43 .toList() : null;
44 final var remoteDelete = dataMessage.remoteDeleteId().isPresent()
45 ? new JsonRemoteDelete(dataMessage.remoteDeleteId().get())
46 : null;
47 final var attachments = dataMessage.attachments().size() > 0 ? dataMessage.attachments()
48 .stream()
49 .map(JsonAttachment::from)
50 .toList() : null;
51 final var sticker = dataMessage.sticker().isPresent() ? JsonSticker.from(dataMessage.sticker().get()) : null;
52
53 final var contacts = dataMessage.sharedContacts().size() > 0 ? dataMessage.sharedContacts()
54 .stream()
55 .map(JsonSharedContact::from)
56 .toList() : null;
57 return new JsonDataMessage(timestamp,
58 message,
59 expiresInSeconds,
60 viewOnce,
61 reaction,
62 quote,
63 payment,
64 mentions,
65 previews,
66 attachments,
67 sticker,
68 remoteDelete,
69 contacts,
70 groupInfo);
71 }
72 }