]> nmode's Git Repositories - signal-cli/commitdiff
Add sendTyping and sendReceipt to dbus interface (#718)
authorJtheSaw <21310929+JtheSaw@users.noreply.github.com>
Mon, 13 Sep 2021 15:01:26 +0000 (17:01 +0200)
committerGitHub <noreply@github.com>
Mon, 13 Sep 2021 15:01:26 +0000 (17:01 +0200)
* Add sendTyping and sendReceipt to dbus interface

* Resolve requested changes

* Adapt documentation

man/signal-cli-dbus.5.adoc
src/main/java/org/asamk/Signal.java
src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java

index ece2460f0f2c4c36ff6fe9c4934eaea92629aa3d..4ff5e9945c4403e745e9b80761b37a30cb5ce5c6 100755 (executable)
@@ -33,6 +33,7 @@ Where <type> is according to DBus specification:
 * <ay>  : Byte Array
 * <aay> : Array of Byte Arrays
 * <as>  : String Array
+* <ax>  : Array of signed 64 bit integer
 * <b>   : Boolean (0|1)
 * <x>   : Signed 64 bit integer
 * <>    : no return value
@@ -125,6 +126,19 @@ Depending on the type of the recipient field this sends a message to one or mult
 
 Exceptions: AttachmentInvalid, Failure, InvalidNumber, UntrustedIdentity
 
+sendTyping(recipient<s>, stop<b>) -> <>::
+* recipient             : Phone number of a single recipient
+* targetSentTimestamp   : True, if typing state should be stopped
+
+Exceptions: Failure, GroupNotFound, UntrustedIdentity
+
+
+sendReadReceipt(recipient<s>, targetSentTimestamp<ax>) -> <>::
+* recipient             : Phone number of a single recipient
+* targetSentTimestamp   : Array of Longs to identify the corresponding signal messages
+
+Exceptions: Failure, UntrustedIdentity
+
 sendGroupMessageReaction(emoji<s>, remove<b>, targetAuthor<s>, targetSentTimestamp<x>, groupId<ay>) -> timestamp<x>::
 * emoji               : Unicode grapheme cluster of the emoji
 * remove              : Boolean, whether a previously sent reaction (emoji) should be removed
index cd101929db3dc77d7f57e1ab0740fb308d5757c3..868de02b924c8483815990a8435d75cecae0d749 100644 (file)
@@ -21,6 +21,14 @@ public interface Signal extends DBusInterface {
             String message, List<String> attachments, List<String> recipients
     ) throws Error.AttachmentInvalid, Error.Failure, Error.InvalidNumber, Error.UntrustedIdentity;
 
+    void sendTyping(
+            String recipient, boolean stop
+    ) throws Error.Failure, Error.GroupNotFound, Error.UntrustedIdentity;
+
+    void sendReadReceipt(
+            String recipient, List<Long> targetSentTimestamp
+    ) throws Error.Failure, Error.UntrustedIdentity;
+
     long sendRemoteDeleteMessage(
             long targetSentTimestamp, String recipient
     ) throws Error.Failure, Error.InvalidNumber;
index 0bb0c43534c33cab1b1101322da8b7dc8e4af2a1..5e8fd4324ae00f486c92a0a6a6168824b00c7e27 100644 (file)
@@ -5,8 +5,10 @@ import org.asamk.signal.BaseConfig;
 import org.asamk.signal.manager.AttachmentInvalidException;
 import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.NotMasterDeviceException;
+import org.asamk.signal.manager.UntrustedIdentityException;
 import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.RecipientIdentifier;
+import org.asamk.signal.manager.api.TypingAction;
 import org.asamk.signal.manager.groups.GroupId;
 import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
@@ -165,6 +167,39 @@ public class DbusSignalImpl implements Signal {
         }
     }
 
+    @Override
+    public void sendTyping(
+            final String recipient, final boolean stop
+    ) throws Error.Failure, Error.GroupNotFound, Error.UntrustedIdentity {
+        try {
+            var recipients = new ArrayList<String>(1);
+            recipients.add(recipient);
+            m.sendTypingMessage(stop ? TypingAction.STOP : TypingAction.START,
+                    getSingleRecipientIdentifiers(recipients, m.getUsername()).stream()
+                            .map(RecipientIdentifier.class::cast)
+                            .collect(Collectors.toSet()));
+        } catch (IOException e) {
+            throw new Error.Failure(e.getMessage());
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
+            throw new Error.GroupNotFound(e.getMessage());
+        } catch (UntrustedIdentityException e) {
+            throw new Error.UntrustedIdentity(e.getMessage());
+        }
+    }
+
+    @Override
+    public void sendReadReceipt(
+            final String recipient, final List<Long> timestamps
+    ) throws Error.Failure, Error.UntrustedIdentity {
+        try {
+            m.sendReadReceipt(getSingleRecipientIdentifier(recipient, m.getUsername()), timestamps);
+        } catch (IOException e) {
+            throw new Error.Failure(e.getMessage());
+        } catch (UntrustedIdentityException e) {
+            throw new Error.UntrustedIdentity(e.getMessage());
+        }
+    }
+
     @Override
     public long sendNoteToSelfMessage(
             final String message, final List<String> attachments