]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/api/MessageEnvelope.java
Reformat files
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / api / MessageEnvelope.java
index aba521796f47637a7e1ac0f171eb2d9dfc177a85..5598d438523503b74711a2fe3dc18849817dac18 100644 (file)
@@ -1,6 +1,5 @@
 package org.asamk.signal.manager.api;
 
-import org.asamk.signal.manager.groups.GroupId;
 import org.asamk.signal.manager.groups.GroupUtils;
 import org.asamk.signal.manager.helper.RecipientAddressResolver;
 import org.asamk.signal.manager.storage.recipients.RecipientResolver;
@@ -33,15 +32,15 @@ import org.whispersystems.signalservice.api.messages.multidevice.SentTranscriptM
 import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage;
 import org.whispersystems.signalservice.api.messages.multidevice.ViewOnceOpenMessage;
 import org.whispersystems.signalservice.api.messages.multidevice.ViewedMessage;
+import org.whispersystems.signalservice.api.push.ServiceId;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import static org.whispersystems.signalservice.internal.push.SignalServiceProtos.BodyRange;
-
 public record MessageEnvelope(
         Optional<RecipientAddress> sourceAddress,
         int sourceDevice,
@@ -142,7 +141,9 @@ public record MessageEnvelope(
                     dataMessage.isProfileKeyUpdate(),
                     dataMessage.getProfileKey().isPresent(),
                     dataMessage.getReaction().map(r -> Reaction.from(r, recipientResolver, addressResolver)),
-                    dataMessage.getQuote().map(q -> Quote.from(q, recipientResolver, addressResolver, fileProvider)),
+                    dataMessage.getQuote()
+                            .filter(q -> q.getAuthor() != null && q.getAuthor().isValid())
+                            .map(q -> Quote.from(q, recipientResolver, addressResolver, fileProvider)),
                     dataMessage.getPayment().map(p -> p.getPaymentNotification().isPresent() ? Payment.from(p) : null),
                     dataMessage.getAttachments()
                             .map(a -> a.stream().map(as -> Attachment.from(as, fileProvider)).toList())
@@ -161,7 +162,7 @@ public record MessageEnvelope(
                             .map(a -> a.stream().map(preview -> Preview.from(preview, fileProvider)).toList())
                             .orElse(List.of()),
                     dataMessage.getBodyRanges()
-                            .map(a -> a.stream().filter(BodyRange::hasStyle).map(TextStyle::from).toList())
+                            .map(a -> a.stream().filter(r -> r.style != null).map(TextStyle::from).toList())
                             .orElse(List.of()));
         }
 
@@ -237,7 +238,7 @@ public record MessageEnvelope(
                 return new Quote(quote.getId(),
                         addressResolver.resolveRecipientAddress(recipientResolver.resolveRecipient(quote.getAuthor()))
                                 .toApiRecipientAddress(),
-                        Optional.ofNullable(quote.getText()),
+                        Optional.of(quote.getText()),
                         quote.getMentions() == null
                                 ? List.of()
                                 : quote.getMentions()
@@ -251,7 +252,7 @@ public record MessageEnvelope(
                                 ? List.of()
                                 : quote.getBodyRanges()
                                         .stream()
-                                        .filter(BodyRange::hasStyle)
+                                        .filter(r -> r.style != null)
                                         .map(TextStyle::from)
                                         .toList());
             }
@@ -294,9 +295,9 @@ public record MessageEnvelope(
                 boolean isBorderless
         ) {
 
-            static Attachment from(SignalServiceAttachment attachment, AttachmentFileProvider fileProvider) {
-                if (attachment.isPointer()) {
-                    final var a = attachment.asPointer();
+            static Attachment from(SignalServiceAttachment signalAttachment, AttachmentFileProvider fileProvider) {
+                if (signalAttachment.isPointer()) {
+                    final var a = signalAttachment.asPointer();
                     final var attachmentFile = fileProvider.getFile(a);
                     return new Attachment(Optional.of(attachmentFile.getName()),
                             Optional.of(attachmentFile),
@@ -313,26 +314,32 @@ public record MessageEnvelope(
                             a.isGif(),
                             a.isBorderless());
                 } else {
-                    final var a = attachment.asStream();
-                    return new Attachment(Optional.empty(),
-                            Optional.empty(),
-                            a.getFileName(),
-                            a.getContentType(),
-                            a.getUploadTimestamp() == 0 ? Optional.empty() : Optional.of(a.getUploadTimestamp()),
-                            Optional.of(a.getLength()),
-                            a.getPreview(),
-                            Optional.empty(),
-                            a.getCaption(),
-                            a.getWidth() == 0 ? Optional.empty() : Optional.of(a.getWidth()),
-                            a.getHeight() == 0 ? Optional.empty() : Optional.of(a.getHeight()),
-                            a.getVoiceNote(),
-                            a.isGif(),
-                            a.isBorderless());
+                    Attachment attachment = null;
+                    try (final var a = signalAttachment.asStream()) {
+                        attachment = new Attachment(Optional.empty(),
+                                Optional.empty(),
+                                a.getFileName(),
+                                a.getContentType(),
+                                a.getUploadTimestamp() == 0 ? Optional.empty() : Optional.of(a.getUploadTimestamp()),
+                                Optional.of(a.getLength()),
+                                a.getPreview(),
+                                Optional.empty(),
+                                a.getCaption(),
+                                a.getWidth() == 0 ? Optional.empty() : Optional.of(a.getWidth()),
+                                a.getHeight() == 0 ? Optional.empty() : Optional.of(a.getHeight()),
+                                a.getVoiceNote(),
+                                a.isGif(),
+                                a.isBorderless());
+                        return attachment;
+                    } catch (IOException e) {
+                        return attachment;
+                    }
                 }
             }
 
             static Attachment from(
-                    SignalServiceDataMessage.Quote.QuotedAttachment a, final AttachmentFileProvider fileProvider
+                    SignalServiceDataMessage.Quote.QuotedAttachment a,
+                    final AttachmentFileProvider fileProvider
             ) {
                 return new Attachment(Optional.empty(),
                         Optional.empty(),
@@ -384,7 +391,7 @@ public record MessageEnvelope(
             }
 
             public record Name(
-                    Optional<String> display,
+                    Optional<String> nickname,
                     Optional<String> given,
                     Optional<String> family,
                     Optional<String> prefix,
@@ -393,7 +400,7 @@ public record MessageEnvelope(
             ) {
 
                 static Name from(org.whispersystems.signalservice.api.messages.shared.SharedContact.Name name) {
-                    return new Name(name.getDisplay(),
+                    return new Name(name.getNickname(),
                             name.getGiven(),
                             name.getFamily(),
                             name.getPrefix(),
@@ -475,15 +482,15 @@ public record MessageEnvelope(
             ) {
 
                 static Address from(org.whispersystems.signalservice.api.messages.shared.SharedContact.PostalAddress address) {
-                    return new Address(Address.Type.from(address.getType()),
-                            address.getLabel(),
-                            address.getLabel(),
-                            address.getLabel(),
-                            address.getLabel(),
+                    return new Address(Type.from(address.getType()),
                             address.getLabel(),
-                            address.getLabel(),
-                            address.getLabel(),
-                            address.getLabel());
+                            address.getStreet(),
+                            address.getPobox(),
+                            address.getNeighborhood(),
+                            address.getCity(),
+                            address.getRegion(),
+                            address.getPostcode(),
+                            address.getCountry());
                 }
 
                 public enum Type {
@@ -504,9 +511,7 @@ public record MessageEnvelope(
 
         public record Preview(String title, String description, long date, String url, Optional<Attachment> image) {
 
-            static Preview from(
-                    SignalServicePreview preview, final AttachmentFileProvider fileProvider
-            ) {
+            static Preview from(SignalServicePreview preview, final AttachmentFileProvider fileProvider) {
                 return new Preview(preview.getTitle(),
                         preview.getDescription(),
                         preview.getDate(),
@@ -684,7 +689,9 @@ public record MessageEnvelope(
                 DELETE,
                 BLOCK,
                 BLOCK_AND_DELETE,
-                UNBLOCK_AND_ACCEPT;
+                UNBLOCK_AND_ACCEPT,
+                SPAM,
+                BLOCK_AND_SPAM;
 
                 static Type from(MessageRequestResponseMessage.Type type) {
                     return switch (type) {
@@ -694,6 +701,8 @@ public record MessageEnvelope(
                         case BLOCK -> BLOCK;
                         case BLOCK_AND_DELETE -> BLOCK_AND_DELETE;
                         case UNBLOCK_AND_ACCEPT -> UNBLOCK_AND_ACCEPT;
+                        case SPAM -> SPAM;
+                        case BLOCK_AND_SPAM -> BLOCK_AND_SPAM;
                     };
                 }
             }
@@ -709,7 +718,8 @@ public record MessageEnvelope(
             Optional<Hangup> hangup,
             Optional<Busy> busy,
             List<IceUpdate> iceUpdate,
-            Optional<Opaque> opaque
+            Optional<Opaque> opaque,
+            boolean isUrgent
     ) {
 
         public static Call from(final SignalServiceCallMessage callMessage) {
@@ -723,16 +733,14 @@ public record MessageEnvelope(
                     callMessage.getIceUpdateMessages()
                             .map(m -> m.stream().map(IceUpdate::from).toList())
                             .orElse(List.of()),
-                    callMessage.getOpaqueMessage().map(Opaque::from));
+                    callMessage.getOpaqueMessage().map(Opaque::from),
+                    callMessage.isUrgent());
         }
 
-        public record Offer(long id, String sdp, Type type, byte[] opaque) {
+        public record Offer(long id, Type type, byte[] opaque) {
 
             static Offer from(OfferMessage offerMessage) {
-                return new Offer(offerMessage.getId(),
-                        offerMessage.getSdp(),
-                        Type.from(offerMessage.getType()),
-                        offerMessage.getOpaque());
+                return new Offer(offerMessage.getId(), Type.from(offerMessage.getType()), offerMessage.getOpaque());
             }
 
             public enum Type {
@@ -748,10 +756,10 @@ public record MessageEnvelope(
             }
         }
 
-        public record Answer(long id, String sdp, byte[] opaque) {
+        public record Answer(long id, byte[] opaque) {
 
             static Answer from(AnswerMessage answerMessage) {
-                return new Answer(answerMessage.getId(), answerMessage.getSdp(), answerMessage.getOpaque());
+                return new Answer(answerMessage.getId(), answerMessage.getOpaque());
             }
         }
 
@@ -762,13 +770,12 @@ public record MessageEnvelope(
             }
         }
 
-        public record Hangup(long id, Type type, int deviceId, boolean isLegacy) {
+        public record Hangup(long id, Type type, int deviceId) {
 
             static Hangup from(HangupMessage hangupMessage) {
                 return new Hangup(hangupMessage.getId(),
                         Type.from(hangupMessage.getType()),
-                        hangupMessage.getDeviceId(),
-                        hangupMessage.isLegacy());
+                        hangupMessage.getDeviceId());
             }
 
             public enum Type {
@@ -790,10 +797,10 @@ public record MessageEnvelope(
             }
         }
 
-        public record IceUpdate(long id, String sdp, byte[] opaque) {
+        public record IceUpdate(long id, byte[] opaque) {
 
             static IceUpdate from(IceUpdateMessage iceUpdateMessage) {
-                return new IceUpdate(iceUpdateMessage.getId(), iceUpdateMessage.getSdp(), iceUpdateMessage.getOpaque());
+                return new IceUpdate(iceUpdateMessage.getId(), iceUpdateMessage.getOpaque());
             }
         }
 
@@ -824,9 +831,7 @@ public record MessageEnvelope(
             Optional<TextAttachment> textAttachment
     ) {
 
-        public static Story from(
-                SignalServiceStoryMessage storyMessage, final AttachmentFileProvider fileProvider
-        ) {
+        public static Story from(SignalServiceStoryMessage storyMessage, final AttachmentFileProvider fileProvider) {
             return new Story(storyMessage.getAllowsReplies().orElse(false),
                     storyMessage.getGroupContext().map(c -> GroupUtils.getGroupIdV2(c.getMasterKey())),
                     storyMessage.getFileAttachment().map(f -> Data.Attachment.from(f, fileProvider)),
@@ -844,7 +849,8 @@ public record MessageEnvelope(
         ) {
 
             static TextAttachment from(
-                    SignalServiceTextAttachment textAttachment, final AttachmentFileProvider fileProvider
+                    SignalServiceTextAttachment textAttachment,
+                    final AttachmentFileProvider fileProvider
             ) {
                 return new TextAttachment(textAttachment.getText(),
                         textAttachment.getStyle().map(Style::from),
@@ -896,8 +902,9 @@ public record MessageEnvelope(
             final AttachmentFileProvider fileProvider,
             Exception exception
     ) {
-        final var source = !envelope.isUnidentifiedSender() && envelope.hasSourceUuid()
-                ? recipientResolver.resolveRecipient(envelope.getSourceAddress())
+        final var serviceId = envelope.getSourceServiceId().map(ServiceId::parseOrNull).orElse(null);
+        final var source = !envelope.isUnidentifiedSender() && serviceId != null
+                ? recipientResolver.resolveRecipient(serviceId)
                 : envelope.isUnidentifiedSender() && content != null
                         ? recipientResolver.resolveRecipient(content.getSender())
                         : exception instanceof ProtocolException e