import com.fasterxml.jackson.annotation.JsonInclude;
-import org.asamk.Signal;
import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.UntrustedIdentityException;
import org.asamk.signal.manager.api.MessageEnvelope;
import org.asamk.signal.manager.api.RecipientIdentifier;
-import org.whispersystems.signalservice.api.util.InvalidNumberException;
+import org.asamk.signal.manager.api.UntrustedIdentityException;
+import org.asamk.signal.manager.storage.recipients.RecipientAddress;
-import java.util.List;
import java.util.UUID;
public record JsonMessageEnvelope(
Integer sourceDevice,
long timestamp,
@JsonInclude(JsonInclude.Include.NON_NULL) JsonDataMessage dataMessage,
+ @JsonInclude(JsonInclude.Include.NON_NULL) JsonStoryMessage storyMessage,
@JsonInclude(JsonInclude.Include.NON_NULL) JsonSyncMessage syncMessage,
@JsonInclude(JsonInclude.Include.NON_NULL) JsonCallMessage callMessage,
@JsonInclude(JsonInclude.Include.NON_NULL) JsonReceiptMessage receiptMessage,
public static JsonMessageEnvelope from(
MessageEnvelope envelope, Throwable exception, Manager m
) {
- final String source;
- final String sourceNumber;
- final String sourceUuid;
+ final RecipientAddress sourceAddress;
final Integer sourceDevice;
if (envelope.sourceAddress().isPresent()) {
- final var sourceAddress = envelope.sourceAddress().get();
- source = sourceAddress.getLegacyIdentifier();
- sourceNumber = sourceAddress.getNumber().orElse(null);
- sourceUuid = sourceAddress.getUuid().map(UUID::toString).orElse(null);
+ sourceAddress = envelope.sourceAddress().get();
sourceDevice = envelope.sourceDevice();
} else if (exception instanceof UntrustedIdentityException e) {
- final var sender = e.getSender();
- source = sender.getLegacyIdentifier();
- sourceNumber = sender.getNumber().orElse(null);
- sourceUuid = sender.getUuid().map(UUID::toString).orElse(null);
+ sourceAddress = e.getSender();
sourceDevice = e.getSenderDevice();
+ } else {
+ sourceAddress = null;
+ sourceDevice = null;
+ }
+
+ final String source;
+ final String sourceNumber;
+ final String sourceUuid;
+ final String sourceName;
+ if (sourceAddress != null) {
+ source = sourceAddress.getLegacyIdentifier();
+ sourceNumber = sourceAddress.number().orElse(null);
+ sourceUuid = sourceAddress.uuid().map(UUID::toString).orElse(null);
+ sourceName = m.getContactOrProfileName(RecipientIdentifier.Single.fromAddress(sourceAddress));
} else {
source = null;
sourceNumber = null;
sourceUuid = null;
- sourceDevice = null;
+ sourceName = null;
}
- String name;
- try {
- name = m.getContactOrProfileName(RecipientIdentifier.Single.fromString(source, m.getSelfNumber()));
- } catch (InvalidNumberException | NullPointerException e) {
- name = null;
- }
- final var sourceName = name;
final var timestamp = envelope.timestamp();
final var receiptMessage = envelope.receipt().map(JsonReceiptMessage::from).orElse(null);
final var typingMessage = envelope.typing().map(JsonTypingMessage::from).orElse(null);
final var dataMessage = envelope.data().map(JsonDataMessage::from).orElse(null);
+ final var storyMessage = envelope.story().map(JsonStoryMessage::from).orElse(null);
final var syncMessage = envelope.sync().map(JsonSyncMessage::from).orElse(null);
final var callMessage = envelope.call().map(JsonCallMessage::from).orElse(null);
sourceDevice,
timestamp,
dataMessage,
+ storyMessage,
syncMessage,
callMessage,
receiptMessage,
typingMessage);
}
-
- public static JsonMessageEnvelope from(Signal.MessageReceived messageReceived) {
- return new JsonMessageEnvelope(messageReceived.getSource(),
- null,
- null,
- null,
- null,
- messageReceived.getTimestamp(),
- JsonDataMessage.from(messageReceived),
- null,
- null,
- null,
- null);
- }
-
- public static JsonMessageEnvelope from(Signal.ReceiptReceived receiptReceived) {
- return new JsonMessageEnvelope(receiptReceived.getSender(),
- null,
- null,
- null,
- null,
- receiptReceived.getTimestamp(),
- null,
- null,
- null,
- JsonReceiptMessage.deliveryReceipt(receiptReceived.getTimestamp(),
- List.of(receiptReceived.getTimestamp())),
- null);
- }
-
- public static JsonMessageEnvelope from(Signal.SyncMessageReceived messageReceived) {
- return new JsonMessageEnvelope(messageReceived.getSource(),
- null,
- null,
- null,
- null,
- messageReceived.getTimestamp(),
- null,
- JsonSyncMessage.from(messageReceived),
- null,
- null,
- null);
- }
}