]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonDataMessage.java
Implement textStyles for sending and receiving
[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) List<JsonTextStyle> textStyles,
24 @JsonInclude(JsonInclude.Include.NON_NULL) JsonGroupInfo groupInfo,
25 @JsonInclude(JsonInclude.Include.NON_NULL) JsonStoryContext storyContext
26 ) {
27
28 static JsonDataMessage from(MessageEnvelope.Data dataMessage) {
29 final var timestamp = dataMessage.timestamp();
30 final var groupInfo = dataMessage.groupContext().isPresent() ? JsonGroupInfo.from(dataMessage.groupContext()
31 .get()) : null;
32 final var storyContext = dataMessage.storyContext().isPresent()
33 ? JsonStoryContext.from(dataMessage.storyContext().get())
34 : null;
35 final var message = dataMessage.body().orElse(null);
36 final var expiresInSeconds = dataMessage.expiresInSeconds();
37 final var viewOnce = dataMessage.isViewOnce();
38 final var reaction = dataMessage.reaction().map(JsonReaction::from).orElse(null);
39 final var quote = dataMessage.quote().isPresent() ? JsonQuote.from(dataMessage.quote().get()) : null;
40 final var payment = dataMessage.payment().isPresent() ? JsonPayment.from(dataMessage.payment().get()) : null;
41 final var mentions = dataMessage.mentions().size() > 0 ? dataMessage.mentions()
42 .stream()
43 .map(JsonMention::from)
44 .toList() : null;
45 final var previews = dataMessage.previews().size() > 0 ? dataMessage.previews()
46 .stream()
47 .map(JsonPreview::from)
48 .toList() : null;
49 final var remoteDelete = dataMessage.remoteDeleteId().isPresent()
50 ? new JsonRemoteDelete(dataMessage.remoteDeleteId().get())
51 : null;
52 final var attachments = dataMessage.attachments().size() > 0 ? dataMessage.attachments()
53 .stream()
54 .map(JsonAttachment::from)
55 .toList() : null;
56 final var sticker = dataMessage.sticker().isPresent() ? JsonSticker.from(dataMessage.sticker().get()) : null;
57 final var contacts = dataMessage.sharedContacts().size() > 0 ? dataMessage.sharedContacts()
58 .stream()
59 .map(JsonSharedContact::from)
60 .toList() : null;
61 final var textStyles = dataMessage.textStyles().size() > 0 ? dataMessage.textStyles()
62 .stream()
63 .map(JsonTextStyle::from)
64 .toList() : null;
65
66 return new JsonDataMessage(timestamp,
67 message,
68 expiresInSeconds,
69 viewOnce,
70 reaction,
71 quote,
72 payment,
73 mentions,
74 previews,
75 attachments,
76 sticker,
77 remoteDelete,
78 contacts,
79 textStyles,
80 groupInfo,
81 storyContext);
82 }
83 }