From ee2848db23530ffb5b12b5469fa3522b4f5f9a90 Mon Sep 17 00:00:00 2001 From: david-harley Date: Wed, 23 Dec 2020 14:20:53 +1030 Subject: [PATCH] Fixed issues and added mentions in quotes --- .../asamk/signal/ReceiveMessageHandler.java | 31 +++++++++++++------ .../asamk/signal/json/JsonDataMessage.java | 4 +-- .../org/asamk/signal/json/JsonGroupInfo.java | 1 - .../org/asamk/signal/json/JsonMention.java | 12 ++++--- .../signal/json/JsonMessageEnvelope.java | 4 +-- .../java/org/asamk/signal/json/JsonQuote.java | 29 ++++++++--------- .../signal/json/JsonQuotedAttachment.java | 21 +++++++++++++ 7 files changed, 68 insertions(+), 34 deletions(-) create mode 100644 src/main/java/org/asamk/signal/json/JsonQuotedAttachment.java diff --git a/src/main/java/org/asamk/signal/ReceiveMessageHandler.java b/src/main/java/org/asamk/signal/ReceiveMessageHandler.java index 5925b2b8..1fbf1761 100644 --- a/src/main/java/org/asamk/signal/ReceiveMessageHandler.java +++ b/src/main/java/org/asamk/signal/ReceiveMessageHandler.java @@ -447,8 +447,14 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { if (message.getQuote().isPresent()) { SignalServiceDataMessage.Quote quote = message.getQuote().get(); System.out.println("Quote: (" + quote.getId() + ")"); - System.out.println(" Author: " + quote.getAuthor().getLegacyIdentifier()); + System.out.println(" Author: " + m.resolveSignalServiceAddress(quote.getAuthor()).getLegacyIdentifier()); System.out.println(" Text: " + quote.getText()); + if (quote.getMentions().size() > 0) { + System.out.println(" Mentions: "); + for (SignalServiceDataMessage.Mention mention : quote.getMentions()) { + printMention(mention, m); + } + } if (quote.getAttachments().size() > 0) { System.out.println(" Attachments: "); for (SignalServiceDataMessage.Quote.QuotedAttachment attachment : quote.getAttachments()) { @@ -467,16 +473,9 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { System.out.println("Remote delete message: timestamp = " + remoteDelete.getTargetSentTimestamp()); } if (message.getMentions().isPresent()) { - final List mentions = message.getMentions().get(); System.out.println("Mentions: "); - for (SignalServiceDataMessage.Mention mention : mentions) { - System.out.println("- " - + mention.getUuid() - + ": " - + mention.getStart() - + " (length: " - + mention.getLength() - + ")"); + for (SignalServiceDataMessage.Mention mention : message.getMentions().get()) { + printMention(mention, m); } } @@ -488,6 +487,18 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler { } } + private void printMention(SignalServiceDataMessage.Mention mention, Manager m) { + System.out.println("- " + + m.resolveSignalServiceAddress( + new SignalServiceAddress(mention.getUuid(), null) + ).getLegacyIdentifier() + + ": " + + mention.getStart() + + " (length: " + + mention.getLength() + + ")"); + } + private void printAttachment(SignalServiceAttachment attachment) { System.out.println("- " + attachment.getContentType() + " (" + (attachment.isPointer() ? "Pointer" : "") + ( attachment.isStream() ? "Stream" : "" diff --git a/src/main/java/org/asamk/signal/json/JsonDataMessage.java b/src/main/java/org/asamk/signal/json/JsonDataMessage.java index 2c9372a6..957e3a79 100644 --- a/src/main/java/org/asamk/signal/json/JsonDataMessage.java +++ b/src/main/java/org/asamk/signal/json/JsonDataMessage.java @@ -42,12 +42,12 @@ class JsonDataMessage { this.reaction = new JsonReaction(dataMessage.getReaction().get(), m); } if (dataMessage.getQuote().isPresent()) { - this.quote = new JsonQuote(dataMessage.getQuote().get()); + this.quote = new JsonQuote(dataMessage.getQuote().get(), m); } if (dataMessage.getMentions().isPresent()) { this.mentions = new ArrayList<>(dataMessage.getMentions().get().size()); for (SignalServiceDataMessage.Mention mention : dataMessage.getMentions().get()) { - this.mentions.add(new JsonMention(mention)); + this.mentions.add(new JsonMention(mention, m)); } } else { this.mentions = new ArrayList<>(); diff --git a/src/main/java/org/asamk/signal/json/JsonGroupInfo.java b/src/main/java/org/asamk/signal/json/JsonGroupInfo.java index 1659a863..970cde52 100644 --- a/src/main/java/org/asamk/signal/json/JsonGroupInfo.java +++ b/src/main/java/org/asamk/signal/json/JsonGroupInfo.java @@ -32,7 +32,6 @@ class JsonGroupInfo { JsonGroupInfo(SignalServiceGroupV2 groupInfo) { this.groupId = Base64.encodeBytes(GroupUtils.getGroupId(groupInfo.getMasterKey())); - // TODO populate members and name fields this.type = groupInfo.hasSignedGroupChange() ? "UPDATE" : "DELIVER"; } diff --git a/src/main/java/org/asamk/signal/json/JsonMention.java b/src/main/java/org/asamk/signal/json/JsonMention.java index 0095a8a1..80683842 100644 --- a/src/main/java/org/asamk/signal/json/JsonMention.java +++ b/src/main/java/org/asamk/signal/json/JsonMention.java @@ -1,18 +1,22 @@ package org.asamk.signal.json; -import java.util.UUID; +import org.asamk.signal.manager.Manager; import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; +import org.whispersystems.signalservice.api.push.SignalServiceAddress; public class JsonMention { - UUID uuid; + String name; int start; int length; - JsonMention(SignalServiceDataMessage.Mention mention) { - this.uuid = mention.getUuid(); + JsonMention(SignalServiceDataMessage.Mention mention, Manager m) { + this.name = m.resolveSignalServiceAddress( + new SignalServiceAddress(mention.getUuid(), null) + ).getLegacyIdentifier(); this.start = mention.getStart(); this.length = mention.getLength(); + } } diff --git a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java index 4c1a1539..787f62e2 100644 --- a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java +++ b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java @@ -19,9 +19,7 @@ public class JsonMessageEnvelope { JsonCallMessage callMessage; JsonReceiptMessage receiptMessage; - public JsonMessageEnvelope( - SignalServiceEnvelope envelope, SignalServiceContent content, Manager m - ) { + public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content, Manager m) { if (!envelope.isUnidentifiedSender() && envelope.hasSource()) { SignalServiceAddress source = envelope.getSourceAddress(); this.source = source.getLegacyIdentifier(); diff --git a/src/main/java/org/asamk/signal/json/JsonQuote.java b/src/main/java/org/asamk/signal/json/JsonQuote.java index 5cc48522..9a740582 100644 --- a/src/main/java/org/asamk/signal/json/JsonQuote.java +++ b/src/main/java/org/asamk/signal/json/JsonQuote.java @@ -1,6 +1,6 @@ package org.asamk.signal.json; -import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer; +import org.asamk.signal.manager.Manager; import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; import java.util.ArrayList; @@ -11,27 +11,28 @@ public class JsonQuote { long id; String author; String text; - List attachments; - JsonQuote(SignalServiceDataMessage.Quote quote) { + List mentions; + List attachments; + + JsonQuote(SignalServiceDataMessage.Quote quote, Manager m) { this.id = quote.getId(); - this.author = quote.getAuthor().getLegacyIdentifier(); + this.author = m.resolveSignalServiceAddress(quote.getAuthor()).getLegacyIdentifier(); this.text = quote.getText(); + if (quote.getMentions().size() > 0) { + this.mentions = new ArrayList<>(quote.getMentions().size()); + + for (SignalServiceDataMessage.Mention quotedMention: quote.getMentions()){ + this.mentions.add(new JsonMention(quotedMention, m)); + } + } + if (quote.getAttachments().size() > 0) { this.attachments = new ArrayList<>(quote.getAttachments().size()); - SignalServiceAttachmentPointer attachmentPointer; for (SignalServiceDataMessage.Quote.QuotedAttachment quotedAttachment : quote.getAttachments()) { - JsonAttachment recentAttachment = new JsonAttachment(quotedAttachment.getThumbnail()); - - // Its possible the name might be missing, if it is then we'll use the other one - attachmentPointer = quotedAttachment.getThumbnail().asPointer(); - if (!attachmentPointer.getFileName().isPresent()) { - recentAttachment.filename = quotedAttachment.getFileName(); - } - - this.attachments.add(recentAttachment); + this.attachments.add(new JsonQuotedAttachment(quotedAttachment)); } } else { this.attachments = new ArrayList<>(); diff --git a/src/main/java/org/asamk/signal/json/JsonQuotedAttachment.java b/src/main/java/org/asamk/signal/json/JsonQuotedAttachment.java new file mode 100644 index 00000000..b89e5156 --- /dev/null +++ b/src/main/java/org/asamk/signal/json/JsonQuotedAttachment.java @@ -0,0 +1,21 @@ +package org.asamk.signal.json; + +import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; + +public class JsonQuotedAttachment { + + String contextType; + String filename; + JsonAttachment thumbnail; + + JsonQuotedAttachment(SignalServiceDataMessage.Quote.QuotedAttachment quotedAttachment) { + contextType = quotedAttachment.getContentType(); + filename = quotedAttachment.getFileName(); + if (quotedAttachment.getThumbnail() != null) { + thumbnail = new JsonAttachment(quotedAttachment.getThumbnail()); + } + else { + thumbnail = null; + } + } +}