]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/Main.java
Update libsignal-service-java to 2.9.0
[signal-cli] / src / main / java / org / asamk / signal / Main.java
index 3b2fbadbb1fb6efc447bb2e3f946eee5815e2a0a..7fc520b9f8ea31149209071a0ed2e87cbcce075f 100644 (file)
@@ -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