From: Riamse Date: Sun, 6 May 2018 18:38:15 +0000 (-0400) Subject: Duct tape solution to make daemon actually output JSON X-Git-Tag: v0.6.1~26 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/fbbd194e40d0051989431b01dfe7c38ddd50203e?ds=inline Duct tape solution to make daemon actually output JSON --- diff --git a/src/main/java/org/asamk/signal/Main.java b/src/main/java/org/asamk/signal/Main.java index 3b2fbadb..d50b4395 100644 --- a/src/main/java/org/asamk/signal/Main.java +++ b/src/main/java/org/asamk/signal/Main.java @@ -683,7 +683,7 @@ public class Main { } ignoreAttachments = ns.getBoolean("ignore_attachments"); try { - m.receiveMessages(1, TimeUnit.HOURS, false, ignoreAttachments, new DbusReceiveMessageHandler(m, conn)); + m.receiveMessages(1, TimeUnit.HOURS, false, ignoreAttachments, ns.getBoolean("json") ? new JsonDbusReceiveMessageHandler(m, conn) : new DbusReceiveMessageHandler(m, conn)); } catch (IOException e) { System.err.println("Error while receiving messages: " + e.getMessage()); return 3; @@ -1296,6 +1296,59 @@ public class Main { } } + private static class JsonDbusReceiveMessageHandler extends JsonReceiveMessageHandler { + final DBusConnection conn; + + public JsonDbusReceiveMessageHandler(Manager m, DBusConnection conn) { + super(m); + this.conn = conn; + } + + @Override + public void handleMessage(SignalServiceEnvelope envelope, SignalServiceContent content, Throwable exception) { + super.handleMessage(envelope, content, exception); + + if (envelope.isReceipt()) { + try { + conn.sendSignal(new Signal.ReceiptReceived( + SIGNAL_OBJECTPATH, + envelope.getTimestamp(), + envelope.getSource() + )); + } catch (DBusException e) { + e.printStackTrace(); + } + } else if (content != null && content.getDataMessage().isPresent()) { + SignalServiceDataMessage message = content.getDataMessage().get(); + + if (!message.isEndSession() && + !(message.getGroupInfo().isPresent() && + message.getGroupInfo().get().getType() != SignalServiceGroup.Type.DELIVER)) { + List attachments = new ArrayList<>(); + if (message.getAttachments().isPresent()) { + for (SignalServiceAttachment attachment : message.getAttachments().get()) { + if (attachment.isPointer()) { + attachments.add(m.getAttachmentFile(attachment.asPointer().getId()).getAbsolutePath()); + } + } + } + + try { + conn.sendSignal(new Signal.MessageReceived( + SIGNAL_OBJECTPATH, + message.getTimestamp(), + envelope.getSource(), + message.getGroupInfo().isPresent() ? message.getGroupInfo().get().getGroupId() : new byte[0], + message.getBody().isPresent() ? message.getBody().get() : "", + attachments)); + } catch (DBusException e) { + e.printStackTrace(); + } + } + } + } + } + private static String formatTimestamp(long timestamp) { Date date = new Date(timestamp); final DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); // Quoted "Z" to indicate UTC, no timezone offset