Add sendTyping and sendReceipt to dbus interface (#718)

* Add sendTyping and sendReceipt to dbus interface

* Resolve requested changes

* Adapt documentation
This commit is contained in:
JtheSaw 2021-09-13 17:01:26 +02:00 committed by GitHub
parent 12e85ec671
commit 11b3758416
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 57 additions and 0 deletions

View file

@ -33,6 +33,7 @@ Where <type> is according to DBus specification:
* <ay> : Byte Array * <ay> : Byte Array
* <aay> : Array of Byte Arrays * <aay> : Array of Byte Arrays
* <as> : String Array * <as> : String Array
* <ax> : Array of signed 64 bit integer
* <b> : Boolean (0|1) * <b> : Boolean (0|1)
* <x> : Signed 64 bit integer * <x> : Signed 64 bit integer
* <> : no return value * <> : 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 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>:: sendGroupMessageReaction(emoji<s>, remove<b>, targetAuthor<s>, targetSentTimestamp<x>, groupId<ay>) -> timestamp<x>::
* emoji : Unicode grapheme cluster of the emoji * emoji : Unicode grapheme cluster of the emoji
* remove : Boolean, whether a previously sent reaction (emoji) should be removed * remove : Boolean, whether a previously sent reaction (emoji) should be removed

View file

@ -21,6 +21,14 @@ public interface Signal extends DBusInterface {
String message, List<String> attachments, List<String> recipients String message, List<String> attachments, List<String> recipients
) throws Error.AttachmentInvalid, Error.Failure, Error.InvalidNumber, Error.UntrustedIdentity; ) 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 sendRemoteDeleteMessage(
long targetSentTimestamp, String recipient long targetSentTimestamp, String recipient
) throws Error.Failure, Error.InvalidNumber; ) throws Error.Failure, Error.InvalidNumber;

View file

@ -5,8 +5,10 @@ import org.asamk.signal.BaseConfig;
import org.asamk.signal.manager.AttachmentInvalidException; import org.asamk.signal.manager.AttachmentInvalidException;
import org.asamk.signal.manager.Manager; import org.asamk.signal.manager.Manager;
import org.asamk.signal.manager.NotMasterDeviceException; 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.Message;
import org.asamk.signal.manager.api.RecipientIdentifier; 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.GroupId;
import org.asamk.signal.manager.groups.GroupInviteLinkUrl; import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
import org.asamk.signal.manager.groups.GroupNotFoundException; 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 @Override
public long sendNoteToSelfMessage( public long sendNoteToSelfMessage(
final String message, final List<String> attachments final String message, final List<String> attachments