package org.asamk.signal.json;
-import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonUnwrapped;
-import org.asamk.Signal;
import org.asamk.signal.manager.Manager;
-import org.whispersystems.signalservice.api.messages.multidevice.SentTranscriptMessage;
-
-import static org.asamk.signal.util.Util.getLegacyIdentifier;
-
-class JsonSyncDataMessage extends JsonDataMessage {
-
- @JsonProperty
- @Deprecated
- final String destination;
-
- @JsonProperty
- final String destinationNumber;
-
- @JsonProperty
- final String destinationUuid;
-
- JsonSyncDataMessage(SentTranscriptMessage transcriptMessage, Manager m) {
- super(transcriptMessage.getMessage(), m);
-
- if (transcriptMessage.getDestination().isPresent()) {
- final var address = transcriptMessage.getDestination().get();
- this.destination = getLegacyIdentifier(address);
- this.destinationNumber = address.getNumber().orNull();
- this.destinationUuid = address.getUuid().toString();
- } else {
- this.destination = null;
- this.destinationNumber = null;
- this.destinationUuid = null;
- }
- }
-
- JsonSyncDataMessage(Signal.SyncMessageReceived messageReceived) {
- super(messageReceived);
- this.destination = messageReceived.getDestination();
- this.destinationNumber = null;
- this.destinationUuid = null;
+import org.asamk.signal.manager.api.MessageEnvelope;
+import org.asamk.signal.manager.api.RecipientAddress;
+
+import java.util.UUID;
+
+record JsonSyncDataMessage(
+ @Deprecated String destination,
+ String destinationNumber,
+ String destinationUuid,
+ @JsonInclude(JsonInclude.Include.NON_NULL) JsonEditMessage editMessage,
+ @JsonUnwrapped JsonDataMessage dataMessage
+) {
+
+ static JsonSyncDataMessage from(MessageEnvelope.Sync.Sent transcriptMessage, Manager m) {
+ return new JsonSyncDataMessage(transcriptMessage.destination()
+ .map(RecipientAddress::getLegacyIdentifier)
+ .orElse(null),
+ transcriptMessage.destination().flatMap(RecipientAddress::number).orElse(null),
+ transcriptMessage.destination().flatMap(address -> address.uuid().map(UUID::toString)).orElse(null),
+ transcriptMessage.editMessage()
+ .map(data -> JsonEditMessage.from(data, m))
+ .orElse(null),
+ transcriptMessage.message()
+ .map(data -> JsonDataMessage.from(data, m))
+ .orElse(null));
}
}