diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index 2bf5e0cf..00000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123c..00000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/build.gradle b/build.gradle index 13fd298e..2eec9728 100644 --- a/build.gradle +++ b/build.gradle @@ -2,8 +2,8 @@ apply plugin: 'java' apply plugin: 'application' apply plugin: 'eclipse' -sourceCompatibility = JavaVersion.VERSION_1_7 -targetCompatibility = JavaVersion.VERSION_1_7 +sourceCompatibility = JavaVersion.VERSION_1_8 +targetCompatibility = JavaVersion.VERSION_1_8 mainClassName = 'org.asamk.signal.Main' diff --git a/src/main/java/org/asamk/signal/JsonSendableMessage.java b/src/main/java/org/asamk/signal/JsonSendableMessage.java new file mode 100644 index 00000000..43f2f553 --- /dev/null +++ b/src/main/java/org/asamk/signal/JsonSendableMessage.java @@ -0,0 +1,30 @@ +package org.asamk.signal; + +import java.util.Base64; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +public class JsonSendableMessage { + public String getMessage() { + return message; + } + + public List getAttachments() { + return attachments; + } + + String message; + + public void setAttachments(List attachments) { + if ( attachments == null ) { + return; + } + + this.attachments = attachments.stream() + .map(i -> new String(Base64.getDecoder().decode(i))) + .collect(Collectors.toList()); + } + + List attachments; +} diff --git a/src/main/java/org/asamk/signal/commands/SendCommand.java b/src/main/java/org/asamk/signal/commands/SendCommand.java index 176c2d92..e226e9fc 100644 --- a/src/main/java/org/asamk/signal/commands/SendCommand.java +++ b/src/main/java/org/asamk/signal/commands/SendCommand.java @@ -1,13 +1,12 @@ package org.asamk.signal.commands; +import com.fasterxml.jackson.databind.ObjectMapper; import net.sourceforge.argparse4j.impl.Arguments; import net.sourceforge.argparse4j.inf.Namespace; import net.sourceforge.argparse4j.inf.Subparser; +import netscape.javascript.JSException; import org.asamk.Signal; -import org.asamk.signal.AttachmentInvalidException; -import org.asamk.signal.GroupIdFormatException; -import org.asamk.signal.GroupNotFoundException; -import org.asamk.signal.NotAGroupMemberException; +import org.asamk.signal.*; import org.asamk.signal.util.IOUtils; import org.asamk.signal.util.Util; import org.freedesktop.dbus.exceptions.DBusExecutionException; @@ -16,6 +15,7 @@ import org.whispersystems.signalservice.api.push.exceptions.EncapsulatedExceptio import java.io.IOException; import java.nio.charset.Charset; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import static org.asamk.signal.util.ErrorUtils.*; @@ -87,6 +87,15 @@ public class SendCommand implements DbusCommand { if (attachments == null) { attachments = new ArrayList<>(); } + + // check to see if message is a JSON + // { "messageText": "string", "attachments": [ "base64" ] } + if (messageText.startsWith("{")) { + JsonSendableMessage result = new ObjectMapper().readValue(messageText, JsonSendableMessage.class); + messageText = result.getMessage(); + attachments = result.getAttachments(); + } + if (ns.getString("group") != null) { byte[] groupId = Util.decodeGroupId(ns.getString("group")); signal.sendGroupMessage(messageText, attachments, groupId); @@ -119,6 +128,10 @@ public class SendCommand implements DbusCommand { } catch (GroupIdFormatException e) { handleGroupIdFormatException(e); return 1; + } catch (JSException e) { + // not sure how to deal with this. + e.printStackTrace(); + return 3; } } }