]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java
Add support for sending view once messages
[signal-cli] / src / main / java / org / asamk / signal / dbus / DbusSignalImpl.java
index 257283fc4d8912fe0d685302b3816d808d764ce9..725df8b1a639be8b25a6853018ee52586bacadd3 100644 (file)
@@ -4,6 +4,8 @@ import org.asamk.Signal;
 import org.asamk.signal.BaseConfig;
 import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.BaseConfig;
 import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.api.AttachmentInvalidException;
+import org.asamk.signal.manager.api.CaptchaRejectedException;
+import org.asamk.signal.manager.api.DeviceLimitExceededException;
 import org.asamk.signal.manager.api.DeviceLinkUrl;
 import org.asamk.signal.manager.api.GroupId;
 import org.asamk.signal.manager.api.GroupInviteLinkUrl;
 import org.asamk.signal.manager.api.DeviceLinkUrl;
 import org.asamk.signal.manager.api.GroupId;
 import org.asamk.signal.manager.api.GroupInviteLinkUrl;
@@ -79,7 +81,10 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
     private static final Logger logger = LoggerFactory.getLogger(DbusSignalImpl.class);
 
     public DbusSignalImpl(
     private static final Logger logger = LoggerFactory.getLogger(DbusSignalImpl.class);
 
     public DbusSignalImpl(
-            final Manager m, DBusConnection connection, final String objectPath, final boolean noReceiveOnStart
+            final Manager m,
+            DBusConnection connection,
+            final String objectPath,
+            final boolean noReceiveOnStart
     ) {
         this.m = m;
         this.connection = connection;
     ) {
         this.m = m;
         this.connection = connection;
@@ -159,8 +164,10 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
             m.submitRateLimitRecaptchaChallenge(challenge, captcha);
         } catch (IOException e) {
             throw new Error.Failure("Submit challenge error: " + e.getMessage());
             m.submitRateLimitRecaptchaChallenge(challenge, captcha);
         } catch (IOException e) {
             throw new Error.Failure("Submit challenge error: " + e.getMessage());
+        } catch (CaptchaRejectedException e) {
+            throw new Error.Failure(
+                    "Captcha rejected, it may be outdated, already used or solved from a different IP address.");
         }
         }
-
     }
 
     @Override
     }
 
     @Override
@@ -186,7 +193,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
         try {
             var deviceLinkUrl = DeviceLinkUrl.parseDeviceLinkUri(new URI(uri));
             m.addDeviceLink(deviceLinkUrl);
         try {
             var deviceLinkUrl = DeviceLinkUrl.parseDeviceLinkUri(new URI(uri));
             m.addDeviceLink(deviceLinkUrl);
-        } catch (IOException | InvalidDeviceLinkException e) {
+        } catch (IOException | InvalidDeviceLinkException | DeviceLimitExceededException e) {
             throw new Error.Failure(e.getClass().getSimpleName() + " Add device link failed. " + e.getMessage());
         } catch (NotPrimaryDeviceException e) {
             throw new Error.Failure("This command doesn't work on linked devices.");
             throw new Error.Failure(e.getClass().getSimpleName() + " Add device link failed. " + e.getMessage());
         } catch (NotPrimaryDeviceException e) {
             throw new Error.Failure("This command doesn't work on linked devices.");
@@ -229,6 +236,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
         try {
             final var message = new Message(messageText,
                     attachments,
         try {
             final var message = new Message(messageText,
                     attachments,
+                    false,
                     List.of(),
                     Optional.empty(),
                     Optional.empty(),
                     List.of(),
                     Optional.empty(),
                     Optional.empty(),
@@ -254,16 +262,12 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
     }
 
     @Override
     }
 
     @Override
-    public long sendRemoteDeleteMessage(
-            final long targetSentTimestamp, final String recipient
-    ) {
+    public long sendRemoteDeleteMessage(final long targetSentTimestamp, final String recipient) {
         return sendRemoteDeleteMessage(targetSentTimestamp, List.of(recipient));
     }
 
     @Override
         return sendRemoteDeleteMessage(targetSentTimestamp, List.of(recipient));
     }
 
     @Override
-    public long sendRemoteDeleteMessage(
-            final long targetSentTimestamp, final List<String> recipients
-    ) {
+    public long sendRemoteDeleteMessage(final long targetSentTimestamp, final List<String> recipients) {
         try {
             final var results = m.sendRemoteDeleteMessage(targetSentTimestamp,
                     getSingleRecipientIdentifiers(recipients, m.getSelfNumber()).stream()
         try {
             final var results = m.sendRemoteDeleteMessage(targetSentTimestamp,
                     getSingleRecipientIdentifiers(recipients, m.getSelfNumber()).stream()
@@ -319,7 +323,9 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
 
     @Override
     public long sendPaymentNotification(
 
     @Override
     public long sendPaymentNotification(
-            final byte[] receipt, final String note, final String recipient
+            final byte[] receipt,
+            final String note,
+            final String recipient
     ) throws Error.Failure {
         try {
             final var results = m.sendPaymentNotificationMessage(receipt,
     ) throws Error.Failure {
         try {
             final var results = m.sendPaymentNotificationMessage(receipt,
@@ -334,7 +340,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
 
     @Override
     public void sendTyping(
 
     @Override
     public void sendTyping(
-            final String recipient, final boolean stop
+            final String recipient,
+            final boolean stop
     ) throws Error.Failure, Error.GroupNotFound, Error.UntrustedIdentity {
         try {
             final var results = m.sendTypingMessage(stop ? TypingAction.STOP : TypingAction.START,
     ) throws Error.Failure, Error.GroupNotFound, Error.UntrustedIdentity {
         try {
             final var results = m.sendTypingMessage(stop ? TypingAction.STOP : TypingAction.START,
@@ -351,7 +358,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
 
     @Override
     public void sendReadReceipt(
 
     @Override
     public void sendReadReceipt(
-            final String recipient, final List<Long> messageIds
+            final String recipient,
+            final List<Long> messageIds
     ) throws Error.Failure, Error.UntrustedIdentity {
         final var results = m.sendReadReceipt(getSingleRecipientIdentifier(recipient, m.getSelfNumber()), messageIds);
         checkSendMessageResults(results);
     ) throws Error.Failure, Error.UntrustedIdentity {
         final var results = m.sendReadReceipt(getSingleRecipientIdentifier(recipient, m.getSelfNumber()), messageIds);
         checkSendMessageResults(results);
@@ -359,7 +367,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
 
     @Override
     public void sendViewedReceipt(
 
     @Override
     public void sendViewedReceipt(
-            final String recipient, final List<Long> messageIds
+            final String recipient,
+            final List<Long> messageIds
     ) throws Error.Failure, Error.UntrustedIdentity {
         final var results = m.sendViewedReceipt(getSingleRecipientIdentifier(recipient, m.getSelfNumber()), messageIds);
         checkSendMessageResults(results);
     ) throws Error.Failure, Error.UntrustedIdentity {
         final var results = m.sendViewedReceipt(getSingleRecipientIdentifier(recipient, m.getSelfNumber()), messageIds);
         checkSendMessageResults(results);
@@ -385,11 +394,13 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
 
     @Override
     public long sendNoteToSelfMessage(
 
     @Override
     public long sendNoteToSelfMessage(
-            final String messageText, final List<String> attachments
+            final String messageText,
+            final List<String> attachments
     ) throws Error.AttachmentInvalid, Error.Failure, Error.UntrustedIdentity {
         try {
             final var message = new Message(messageText,
                     attachments,
     ) throws Error.AttachmentInvalid, Error.Failure, Error.UntrustedIdentity {
         try {
             final var message = new Message(messageText,
                     attachments,
+                    false,
                     List.of(),
                     Optional.empty(),
                     Optional.empty(),
                     List.of(),
                     Optional.empty(),
                     Optional.empty(),
@@ -435,6 +446,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
         try {
             final var message = new Message(messageText,
                     attachments,
         try {
             final var message = new Message(messageText,
                     attachments,
+                    false,
                     List.of(),
                     Optional.empty(),
                     Optional.empty(),
                     List.of(),
                     Optional.empty(),
                     Optional.empty(),
@@ -457,7 +469,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
 
     @Override
     public void sendGroupTyping(
 
     @Override
     public void sendGroupTyping(
-            final byte[] groupId, final boolean stop
+            final byte[] groupId,
+            final boolean stop
     ) throws Error.Failure, Error.GroupNotFound, Error.UntrustedIdentity {
         try {
             final var results = m.sendTypingMessage(stop ? TypingAction.STOP : TypingAction.START,
     ) throws Error.Failure, Error.GroupNotFound, Error.UntrustedIdentity {
         try {
             final var results = m.sendTypingMessage(stop ? TypingAction.STOP : TypingAction.START,
@@ -471,9 +484,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
     }
 
     @Override
     }
 
     @Override
-    public long sendGroupRemoteDeleteMessage(
-            final long targetSentTimestamp, final byte[] groupId
-    ) {
+    public long sendGroupRemoteDeleteMessage(final long targetSentTimestamp, final byte[] groupId) {
         try {
             final var results = m.sendRemoteDeleteMessage(targetSentTimestamp,
                     Set.of(getGroupRecipientIdentifier(groupId)));
         try {
             final var results = m.sendRemoteDeleteMessage(targetSentTimestamp,
                     Set.of(getGroupRecipientIdentifier(groupId)));
@@ -523,7 +534,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
     @Override
     public void setContactName(final String number, final String name) {
         try {
     @Override
     public void setContactName(final String number, final String name) {
         try {
-            m.setContactName(getSingleRecipientIdentifier(number, m.getSelfNumber()), name, "");
+            m.setContactName(getSingleRecipientIdentifier(number, m.getSelfNumber()), name, "", null, null, null);
         } catch (NotPrimaryDeviceException e) {
             throw new Error.Failure("This command doesn't work on linked devices.");
         } catch (UnregisteredRecipientException e) {
         } catch (NotPrimaryDeviceException e) {
             throw new Error.Failure("This command doesn't work on linked devices.");
         } catch (UnregisteredRecipientException e) {
@@ -617,7 +628,9 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
 
     @Override
     public byte[] createGroup(
 
     @Override
     public byte[] createGroup(
-            final String name, final List<String> members, final String avatar
+            final String name,
+            final List<String> members,
+            final String avatar
     ) throws Error.AttachmentInvalid, Error.Failure, Error.InvalidNumber {
         return updateGroupInternal(new byte[0], name, members, avatar);
     }
     ) throws Error.AttachmentInvalid, Error.Failure, Error.InvalidNumber {
         return updateGroupInternal(new byte[0], name, members, avatar);
     }
@@ -896,7 +909,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
     }
 
     private static void checkGroupSendMessageResults(
     }
 
     private static void checkGroupSendMessageResults(
-            long timestamp, Collection<SendMessageResult> results
+            long timestamp,
+            Collection<SendMessageResult> results
     ) throws DBusExecutionException {
         if (results.size() == 1) {
             checkSendMessageResult(timestamp, results.stream().findFirst().get());
     ) throws DBusExecutionException {
         if (results.size() == 1) {
             checkSendMessageResult(timestamp, results.stream().findFirst().get());
@@ -923,7 +937,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
     }
 
     private static Set<RecipientIdentifier.Single> getSingleRecipientIdentifiers(
     }
 
     private static Set<RecipientIdentifier.Single> getSingleRecipientIdentifiers(
-            final Collection<String> recipientStrings, final String localNumber
+            final Collection<String> recipientStrings,
+            final String localNumber
     ) throws DBusExecutionException {
         final var identifiers = new HashSet<RecipientIdentifier.Single>();
         for (var recipientString : recipientStrings) {
     ) throws DBusExecutionException {
         final var identifiers = new HashSet<RecipientIdentifier.Single>();
         for (var recipientString : recipientStrings) {
@@ -933,7 +948,8 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
     }
 
     private static RecipientIdentifier.Single getSingleRecipientIdentifier(
     }
 
     private static RecipientIdentifier.Single getSingleRecipientIdentifier(
-            final String recipientString, final String localNumber
+            final String recipientString,
+            final String localNumber
     ) throws DBusExecutionException {
         try {
             return RecipientIdentifier.Single.fromString(recipientString, localNumber);
     ) throws DBusExecutionException {
         try {
             return RecipientIdentifier.Single.fromString(recipientString, localNumber);
@@ -1102,7 +1118,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
                     List.of(new DbusProperty<>("Number", () -> identity.recipient().number().orElse("")),
                             new DbusProperty<>("Uuid",
                                     () -> identity.recipient().uuid().map(UUID::toString).orElse("")),
                     List.of(new DbusProperty<>("Number", () -> identity.recipient().number().orElse("")),
                             new DbusProperty<>("Uuid",
                                     () -> identity.recipient().uuid().map(UUID::toString).orElse("")),
-                            new DbusProperty<>("Fingerprint", identity::getFingerprint),
+                            new DbusProperty<>("Fingerprint", identity::fingerprint),
                             new DbusProperty<>("SafetyNumber", identity::safetyNumber),
                             new DbusProperty<>("ScannableSafetyNumber", identity::scannableSafetyNumber),
                             new DbusProperty<>("TrustLevel", identity::trustLevel),
                             new DbusProperty<>("SafetyNumber", identity::safetyNumber),
                             new DbusProperty<>("ScannableSafetyNumber", identity::scannableSafetyNumber),
                             new DbusProperty<>("TrustLevel", identity::trustLevel),