]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/util/SendMessageResultUtils.java
Use pattern matching switch cases
[signal-cli] / src / main / java / org / asamk / signal / util / SendMessageResultUtils.java
index cf2b282fabd33d8f150c0f43eb94ee66205e0e40..108142e32b9990c6978b2fa97cab36ffca9ac7b2 100644 (file)
@@ -1,10 +1,12 @@
 package org.asamk.signal.util;
 
 import org.asamk.signal.commands.exceptions.CommandException;
+import org.asamk.signal.commands.exceptions.RateLimitErrorException;
 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.RateLimitException;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
 import org.asamk.signal.manager.api.SendMessageResult;
@@ -25,32 +27,39 @@ public class SendMessageResultUtils {
     }
 
     public static void outputResult(final OutputWriter outputWriter, final SendGroupMessageResults sendMessageResults) {
-        if (outputWriter instanceof PlainTextWriter writer) {
-            var errors = getErrorMessagesFromSendMessageResults(sendMessageResults.results());
-            printSendMessageResultErrors(writer, errors);
-            writer.println("{}", sendMessageResults.timestamp());
-        } else {
-            final var writer = (JsonWriter) outputWriter;
-            var results = getJsonSendMessageResults(sendMessageResults.results());
-            writer.write(Map.of("timestamp", sendMessageResults.timestamp(), "results", results));
+        switch (outputWriter) {
+            case PlainTextWriter writer -> {
+                var errors = getErrorMessagesFromSendMessageResults(sendMessageResults.results());
+                printSendMessageResultErrors(writer, errors);
+                writer.println("{}", sendMessageResults.timestamp());
+            }
+            case JsonWriter writer -> {
+                var results = getJsonSendMessageResults(sendMessageResults.results());
+                writer.write(Map.of("timestamp", sendMessageResults.timestamp(), "results", results));
+            }
         }
     }
 
     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);
-            writer.println("{}", sendMessageResults.timestamp());
-        } else {
-            final var writer = (JsonWriter) outputWriter;
-            var results = getJsonSendMessageResults(sendMessageResults.results());
-            writer.write(Map.of("timestamp", sendMessageResults.timestamp(), "results", results));
+        switch (outputWriter) {
+            case PlainTextWriter writer -> {
+                var errors = getErrorMessagesFromSendMessageResults(sendMessageResults.results());
+                printSendMessageResultErrors(writer, errors);
+                writer.println("{}", sendMessageResults.timestamp());
+            }
+            case JsonWriter writer -> {
+                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 if (sendMessageResults.hasOnlyRateLimitFailure()) {
+                throw new RateLimitErrorException("Failed to send message due to rate limiting",
+                        new RateLimitException(0));
             } else {
                 throw new UserErrorException("Failed to send message");
             }
@@ -85,8 +94,7 @@ public class SendMessageResultUtils {
                             failure.getOptions().contains(ProofRequiredException.Option.RECAPTCHA)
                                     ? """
                                       To get the captcha token, go to https://signalcaptchas.org/challenge/generate.html
-                                      Check the developer tools (F12) console for a failed redirect to signalcaptcha://
-                                      Everything after signalcaptcha:// is the captcha token.
+                                      After solving the captcha, right-click on the "Open Signal" link and copy the link.
                                       Use the following command to submit the captcha token:
                                       signal-cli submitRateLimitChallenge --challenge CHALLENGE_TOKEN --captcha CAPTCHA_TOKEN"""
                                     : ""
@@ -111,7 +119,7 @@ public class SendMessageResultUtils {
     }
 
     public static void printSendMessageResultErrors(PlainTextWriter writer, List<String> errors) {
-        if (errors.size() == 0) {
+        if (errors.isEmpty()) {
             return;
         }
         writer.println("Failed to send (some) messages:");