X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/a44034a79e6a98e7d77bbde0af1483d8c30a22c6..35c00f1b2a7376a28714bd191a27fe75454d59aa:/src/main/java/org/asamk/signal/Main.java?ds=sidebyside diff --git a/src/main/java/org/asamk/signal/Main.java b/src/main/java/org/asamk/signal/Main.java index 3b2fbadb..7fc520b9 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; @@ -1182,7 +1182,9 @@ public class Main { System.out.println(" Filename: " + attachment.getFileName()); System.out.println(" Type: " + attachment.getContentType()); System.out.println(" Thumbnail:"); - printAttachment(attachment.getThumbnail()); + if (attachment.getThumbnail() != null) { + printAttachment(attachment.getThumbnail()); + } } } } @@ -1224,6 +1226,57 @@ public class Main { public void handleMessage(SignalServiceEnvelope envelope, SignalServiceContent content, Throwable exception) { super.handleMessage(envelope, content, exception); + JsonDbusReceiveMessageHandler.sendReceivedMessageToDbus(envelope, content, conn, m); + } + } + + private static class JsonReceiveMessageHandler implements Manager.ReceiveMessageHandler { + final Manager m; + final ObjectMapper jsonProcessor; + + public JsonReceiveMessageHandler(Manager m) { + this.m = m; + this.jsonProcessor = new ObjectMapper(); + jsonProcessor.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); // disable autodetect + jsonProcessor.enable(SerializationFeature.WRITE_NULL_MAP_VALUES); + jsonProcessor.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + jsonProcessor.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET); + } + + @Override + public void handleMessage(SignalServiceEnvelope envelope, SignalServiceContent content, Throwable exception) { + ObjectNode result = jsonProcessor.createObjectNode(); + if (exception != null) { + result.putPOJO("error", new JsonError(exception)); + } + if (envelope != null) { + result.putPOJO("envelope", new JsonMessageEnvelope(envelope, content)); + } + try { + jsonProcessor.writeValue(System.out, result); + System.out.println(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + 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); + + sendReceivedMessageToDbus(envelope, content, conn, m); + } + + private static void sendReceivedMessageToDbus(SignalServiceEnvelope envelope, SignalServiceContent content, DBusConnection conn, Manager m) { if (envelope.isReceipt()) { try { conn.sendSignal(new Signal.ReceiptReceived( @@ -1265,37 +1318,6 @@ public class Main { } } - private static class JsonReceiveMessageHandler implements Manager.ReceiveMessageHandler { - final Manager m; - final ObjectMapper jsonProcessor; - - public JsonReceiveMessageHandler(Manager m) { - this.m = m; - this.jsonProcessor = new ObjectMapper(); - jsonProcessor.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); // disable autodetect - jsonProcessor.enable(SerializationFeature.WRITE_NULL_MAP_VALUES); - jsonProcessor.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); - jsonProcessor.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET); - } - - @Override - public void handleMessage(SignalServiceEnvelope envelope, SignalServiceContent content, Throwable exception) { - ObjectNode result = jsonProcessor.createObjectNode(); - if (exception != null) { - result.putPOJO("error", new JsonError(exception)); - } - if (envelope != null) { - result.putPOJO("envelope", new JsonMessageEnvelope(envelope, content)); - } - try { - jsonProcessor.writeValue(System.out, result); - System.out.println(); - } catch (IOException 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