]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/util/SendMessageResultUtils.java
Improve exit code for message sending
[signal-cli] / src / main / java / org / asamk / signal / util / SendMessageResultUtils.java
index 0e13a20091cddab85f9739f005d36f9706caf19a..74f49534f164747008564d95a1a3ebe4a1971bb4 100644 (file)
@@ -1,5 +1,8 @@
 package org.asamk.signal.util;
 
+import org.asamk.signal.commands.exceptions.CommandException;
+import org.asamk.signal.commands.exceptions.UntrustedKeyErrorException;
+import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.json.JsonSendMessageResult;
 import org.asamk.signal.manager.api.ProofRequiredException;
 import org.asamk.signal.manager.api.RecipientIdentifier;
@@ -33,7 +36,9 @@ public class SendMessageResultUtils {
         }
     }
 
-    public static void outputResult(final OutputWriter outputWriter, final SendMessageResults sendMessageResults) {
+    public static void outputResult(
+            final OutputWriter outputWriter, final SendMessageResults sendMessageResults
+    ) throws CommandException {
         if (outputWriter instanceof PlainTextWriter writer) {
             var errors = getErrorMessagesFromSendMessageResults(sendMessageResults.results());
             printSendMessageResultErrors(writer, errors);
@@ -43,6 +48,13 @@ public class SendMessageResultUtils {
             var results = getJsonSendMessageResults(sendMessageResults.results());
             writer.write(Map.of("timestamp", sendMessageResults.timestamp(), "results", results));
         }
+        if (!sendMessageResults.hasSuccess()) {
+            if (sendMessageResults.hasOnlyUntrustedIdentity()) {
+                throw new UntrustedKeyErrorException("Failed to send message due to untrusted identities");
+            } else {
+                throw new UserErrorException("Failed to send message");
+            }
+        }
     }
 
     public static List<String> getErrorMessagesFromSendMessageResults(final Map<RecipientIdentifier, List<SendMessageResult>> mapResults) {
@@ -53,14 +65,14 @@ public class SendMessageResultUtils {
                         .map(SendMessageResultUtils::getErrorMessageFromSendMessageResult)
                         .filter(Objects::nonNull)
                         .map(error -> entry.getKey().getIdentifier() + ": " + error))
-                .collect(Collectors.toList());
+                .toList();
     }
 
     public static List<String> getErrorMessagesFromSendMessageResults(Collection<SendMessageResult> results) {
         return results.stream()
                 .map(SendMessageResultUtils::getErrorMessageFromSendMessageResult)
                 .filter(Objects::nonNull)
-                .collect(Collectors.toList());
+                .toList();
     }
 
     public static String getErrorMessageFromSendMessageResult(SendMessageResult result) {
@@ -106,14 +118,14 @@ public class SendMessageResultUtils {
         }
     }
 
-    public static List<JsonSendMessageResult> getJsonSendMessageResults(final Map<RecipientIdentifier, List<SendMessageResult>> mapResults) {
+    private static List<JsonSendMessageResult> getJsonSendMessageResults(final Map<RecipientIdentifier, List<SendMessageResult>> mapResults) {
         return mapResults.entrySet().stream().flatMap(entry -> {
             final var groupId = entry.getKey() instanceof RecipientIdentifier.Group g ? g.groupId() : null;
             return entry.getValue().stream().map(r -> JsonSendMessageResult.from(r, groupId));
-        }).collect(Collectors.toList());
+        }).toList();
     }
 
     public static List<JsonSendMessageResult> getJsonSendMessageResults(Collection<SendMessageResult> results) {
-        return results.stream().map(JsonSendMessageResult::from).collect(Collectors.toList());
+        return results.stream().map(JsonSendMessageResult::from).toList();
     }
 }