X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/46a4c2c0d0a36b7f230fc2c2d47aa371a6e02d35..HEAD:/src/main/java/org/asamk/signal/json/JsonCallMessage.java diff --git a/src/main/java/org/asamk/signal/json/JsonCallMessage.java b/src/main/java/org/asamk/signal/json/JsonCallMessage.java index 885c38a4..1b1bc2ba 100644 --- a/src/main/java/org/asamk/signal/json/JsonCallMessage.java +++ b/src/main/java/org/asamk/signal/json/JsonCallMessage.java @@ -1,44 +1,60 @@ package org.asamk.signal.json; import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import org.whispersystems.signalservice.api.messages.calls.AnswerMessage; -import org.whispersystems.signalservice.api.messages.calls.BusyMessage; -import org.whispersystems.signalservice.api.messages.calls.HangupMessage; -import org.whispersystems.signalservice.api.messages.calls.IceUpdateMessage; -import org.whispersystems.signalservice.api.messages.calls.OfferMessage; -import org.whispersystems.signalservice.api.messages.calls.SignalServiceCallMessage; +import org.asamk.signal.manager.api.MessageEnvelope; +import java.util.Base64; import java.util.List; -class JsonCallMessage { +record JsonCallMessage( + @JsonInclude(JsonInclude.Include.NON_NULL) Offer offerMessage, + @JsonInclude(JsonInclude.Include.NON_NULL) Answer answerMessage, + @JsonInclude(JsonInclude.Include.NON_NULL) Busy busyMessage, + @JsonInclude(JsonInclude.Include.NON_NULL) Hangup hangupMessage, + @JsonInclude(JsonInclude.Include.NON_EMPTY) List iceUpdateMessages +) { + + static JsonCallMessage from(MessageEnvelope.Call callMessage) { + return new JsonCallMessage(callMessage.offer().map(Offer::from).orElse(null), + callMessage.answer().map(Answer::from).orElse(null), + callMessage.busy().map(Busy::from).orElse(null), + callMessage.hangup().map(Hangup::from).orElse(null), + callMessage.iceUpdate().stream().map(IceUpdate::from).toList()); + } + + record Offer(long id, String type, String opaque) { - @JsonProperty - @JsonInclude(JsonInclude.Include.NON_NULL) - final OfferMessage offerMessage; + public static Offer from(final MessageEnvelope.Call.Offer offer) { + return new Offer(offer.id(), offer.type().name(), Base64.getEncoder().encodeToString(offer.opaque())); + } + } - @JsonProperty - @JsonInclude(JsonInclude.Include.NON_NULL) - final AnswerMessage answerMessage; + public record Answer(long id, String opaque) { + + public static Answer from(final MessageEnvelope.Call.Answer answer) { + return new Answer(answer.id(), Base64.getEncoder().encodeToString(answer.opaque())); + } + } - @JsonProperty - @JsonInclude(JsonInclude.Include.NON_NULL) - final BusyMessage busyMessage; + public record Busy(long id) { - @JsonProperty - @JsonInclude(JsonInclude.Include.NON_NULL) - final HangupMessage hangupMessage; + public static Busy from(final MessageEnvelope.Call.Busy busy) { + return new Busy(busy.id()); + } + } + + public record Hangup(long id, String type, int deviceId) { + + public static Hangup from(final MessageEnvelope.Call.Hangup hangup) { + return new Hangup(hangup.id(), hangup.type().name(), hangup.deviceId()); + } + } - @JsonProperty - @JsonInclude(JsonInclude.Include.NON_NULL) - final List iceUpdateMessages; + public record IceUpdate(long id, String opaque) { - JsonCallMessage(SignalServiceCallMessage callMessage) { - this.offerMessage = callMessage.getOfferMessage().orNull(); - this.answerMessage = callMessage.getAnswerMessage().orNull(); - this.busyMessage = callMessage.getBusyMessage().orNull(); - this.hangupMessage = callMessage.getHangupMessage().orNull(); - this.iceUpdateMessages = callMessage.getIceUpdateMessages().orNull(); + public static IceUpdate from(final MessageEnvelope.Call.IceUpdate iceUpdate) { + return new IceUpdate(iceUpdate.id(), Base64.getEncoder().encodeToString(iceUpdate.opaque())); + } } }