]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/api/SendMessageResult.java
Remove libsignal-service from manager lib API
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / api / SendMessageResult.java
diff --git a/lib/src/main/java/org/asamk/signal/manager/api/SendMessageResult.java b/lib/src/main/java/org/asamk/signal/manager/api/SendMessageResult.java
new file mode 100644 (file)
index 0000000..c54e9f2
--- /dev/null
@@ -0,0 +1,56 @@
+package org.asamk.signal.manager.api;
+
+import org.asamk.signal.manager.helper.RecipientAddressResolver;
+import org.asamk.signal.manager.storage.recipients.RecipientAddress;
+import org.asamk.signal.manager.storage.recipients.RecipientResolver;
+import org.whispersystems.libsignal.IdentityKey;
+
+public record SendMessageResult(
+        RecipientAddress address,
+        boolean isSuccess,
+        boolean isNetworkFailure,
+        boolean isUnregisteredFailure,
+        boolean isIdentityFailure,
+        ProofRequiredException proofRequiredFailure
+) {
+
+    public static SendMessageResult success(RecipientAddress address) {
+        return new SendMessageResult(address, true, false, false, false, null);
+    }
+
+    public static SendMessageResult networkFailure(RecipientAddress address) {
+        return new SendMessageResult(address, false, true, false, false, null);
+    }
+
+    public static SendMessageResult unregisteredFailure(RecipientAddress address) {
+        return new SendMessageResult(address, false, false, true, false, null);
+    }
+
+    public static SendMessageResult identityFailure(RecipientAddress address, IdentityKey identityKey) {
+        return new SendMessageResult(address, false, false, false, true, null);
+    }
+
+    public static SendMessageResult proofRequiredFailure(
+            RecipientAddress address, ProofRequiredException proofRequiredException
+    ) {
+        return new SendMessageResult(address, false, true, false, false, proofRequiredException);
+    }
+
+    public static SendMessageResult from(
+            final org.whispersystems.signalservice.api.messages.SendMessageResult sendMessageResult,
+            RecipientResolver recipientResolver,
+            RecipientAddressResolver addressResolver
+    ) {
+        return new SendMessageResult(addressResolver.resolveRecipientAddress(recipientResolver.resolveRecipient(
+                sendMessageResult.getAddress())),
+                sendMessageResult.isSuccess(),
+                sendMessageResult.isNetworkFailure(),
+                sendMessageResult.isUnregisteredFailure(),
+                sendMessageResult.getIdentityFailure() != null,
+                sendMessageResult.getProofRequiredFailure() == null
+                        ? null
+                        : new ProofRequiredException(sendMessageResult.getProofRequiredFailure()));
+    }
+
+    public record IdentityFailure(IdentityKey identityKey) {}
+}