]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonCallMessage.java
Refactor receive api
[signal-cli] / src / main / java / org / asamk / signal / json / JsonCallMessage.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.Base64;
8 import java.util.List;
9 import java.util.stream.Collectors;
10
11 record JsonCallMessage(
12 @JsonInclude(JsonInclude.Include.NON_NULL) Offer offerMessage,
13 @JsonInclude(JsonInclude.Include.NON_NULL) Answer answerMessage,
14 @JsonInclude(JsonInclude.Include.NON_NULL) Busy busyMessage,
15 @JsonInclude(JsonInclude.Include.NON_NULL) Hangup hangupMessage,
16 @JsonInclude(JsonInclude.Include.NON_EMPTY) List<IceUpdate> iceUpdateMessages
17 ) {
18
19 static JsonCallMessage from(MessageEnvelope.Call callMessage) {
20 return new JsonCallMessage(callMessage.offer().map(Offer::from).orElse(null),
21 callMessage.answer().map(Answer::from).orElse(null),
22 callMessage.busy().map(Busy::from).orElse(null),
23 callMessage.hangup().map(Hangup::from).orElse(null),
24 callMessage.iceUpdate().stream().map(IceUpdate::from).collect(Collectors.toList()));
25 }
26
27 record Offer(long id, String sdp, String type, String opaque) {
28
29 public static Offer from(final MessageEnvelope.Call.Offer offer) {
30 return new Offer(offer.id(),
31 offer.sdp(),
32 offer.type().name(),
33 Base64.getEncoder().encodeToString(offer.opaque()));
34 }
35 }
36
37 public record Answer(long id, String sdp, String opaque) {
38
39 public static Answer from(final MessageEnvelope.Call.Answer answer) {
40 return new Answer(answer.id(), answer.sdp(), Base64.getEncoder().encodeToString(answer.opaque()));
41 }
42 }
43
44 public record Busy(long id) {
45
46 public static Busy from(final MessageEnvelope.Call.Busy busy) {
47 return new Busy(busy.id());
48 }
49 }
50
51 public record Hangup(long id, String type, int deviceId, boolean isLegacy) {
52
53 public static Hangup from(final MessageEnvelope.Call.Hangup hangup) {
54 return new Hangup(hangup.id(), hangup.type().name(), hangup.deviceId(), hangup.isLegacy());
55 }
56 }
57
58 public record IceUpdate(long id, String sdp, String opaque) {
59
60 public static IceUpdate from(final MessageEnvelope.Call.IceUpdate iceUpdate) {
61 return new IceUpdate(iceUpdate.id(),
62 iceUpdate.sdp(),
63 Base64.getEncoder().encodeToString(iceUpdate.opaque()));
64 }
65 }
66 }