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;
}
}
}