From d9c8711eb0f5391a8f9efaecdef97dc7a7af23e6 Mon Sep 17 00:00:00 2001 From: AsamK Date: Sat, 11 Dec 2021 19:26:15 +0100 Subject: [PATCH] Implement sendGroupTying dbus method --- man/signal-cli-dbus.5.adoc | 10 +++- src/main/java/org/asamk/Signal.java | 14 +++-- .../asamk/signal/dbus/DbusManagerImpl.java | 3 +- .../org/asamk/signal/dbus/DbusSignalImpl.java | 55 +++++++++++++------ 4 files changed, 56 insertions(+), 26 deletions(-) diff --git a/man/signal-cli-dbus.5.adoc b/man/signal-cli-dbus.5.adoc index 5d3d214c..e07e4666 100644 --- a/man/signal-cli-dbus.5.adoc +++ b/man/signal-cli-dbus.5.adoc @@ -237,9 +237,9 @@ Exceptions: Failure, InvalidNumber sendTyping(recipient, stop) -> <>:: * recipient : Phone number of a single recipient -* targetSentTimestamp : True, if typing state should be stopped +* stop : True, if typing state should be stopped -Exceptions: Failure, GroupNotFound, UntrustedIdentity +Exceptions: Failure, UntrustedIdentity setContactBlocked(number, block) -> <>:: * number : Phone number affected by method @@ -353,6 +353,12 @@ sendGroupMessage(message, attachments, groupId) -> timestamp:: Exceptions: GroupNotFound, Failure, AttachmentInvalid, InvalidGroupId +sendGroupTyping(groupId, stop) -> <>:: +* groupId : Byte array representing the internal group identifier +* stop : True, if typing state should be stopped + +Exceptions: Failure, GroupNotFound, UntrustedIdentity + sendGroupMessageReaction(emoji, remove, targetAuthor, targetSentTimestamp, groupId) -> timestamp:: * emoji : Unicode grapheme cluster of the emoji * remove : Boolean, whether a previously sent reaction (emoji) should be removed diff --git a/src/main/java/org/asamk/Signal.java b/src/main/java/org/asamk/Signal.java index 421e5de5..35411bd0 100644 --- a/src/main/java/org/asamk/Signal.java +++ b/src/main/java/org/asamk/Signal.java @@ -36,7 +36,7 @@ public interface Signal extends DBusInterface { void sendTyping( String recipient, boolean stop - ) throws Error.Failure, Error.GroupNotFound, Error.UntrustedIdentity; + ) throws Error.Failure, Error.UntrustedIdentity; void sendReadReceipt( String recipient, List messageIds @@ -54,10 +54,6 @@ public interface Signal extends DBusInterface { long targetSentTimestamp, List recipients ) throws Error.Failure, Error.InvalidNumber; - long sendGroupRemoteDeleteMessage( - long targetSentTimestamp, byte[] groupId - ) throws Error.Failure, Error.GroupNotFound, Error.InvalidGroupId; - long sendMessageReaction( String emoji, boolean remove, String targetAuthor, long targetSentTimestamp, String recipient ) throws Error.InvalidNumber, Error.Failure; @@ -84,6 +80,14 @@ public interface Signal extends DBusInterface { String message, List attachments, byte[] groupId ) throws Error.GroupNotFound, Error.Failure, Error.AttachmentInvalid, Error.InvalidGroupId; + void sendGroupTyping( + final byte[] groupId, final boolean stop + ) throws Error.Failure, Error.GroupNotFound, Error.UntrustedIdentity; + + long sendGroupRemoteDeleteMessage( + long targetSentTimestamp, byte[] groupId + ) throws Error.Failure, Error.GroupNotFound, Error.InvalidGroupId; + long sendGroupMessageReaction( String emoji, boolean remove, String targetAuthor, long targetSentTimestamp, byte[] groupId ) throws Error.GroupNotFound, Error.Failure, Error.InvalidNumber, Error.InvalidGroupId; diff --git a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java index 446a7b52..c87a4a04 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java @@ -301,7 +301,8 @@ public class DbusManagerImpl implements Manager { signal.sendTyping(signal.getSelfNumber(), action == TypingAction.STOP); return 0L; }, groupId -> { - throw new UnsupportedOperationException(); + signal.sendGroupTyping(groupId, action == TypingAction.STOP); + return 0L; }); } diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index 4a07e55e..d306b380 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -238,22 +238,6 @@ public class DbusSignalImpl implements Signal { } } - @Override - public long sendGroupRemoteDeleteMessage( - final long targetSentTimestamp, final byte[] groupId - ) { - try { - final var results = m.sendRemoteDeleteMessage(targetSentTimestamp, - Set.of(new RecipientIdentifier.Group(getGroupId(groupId)))); - checkSendMessageResults(results.timestamp(), results.results()); - return results.timestamp(); - } catch (IOException e) { - throw new Error.Failure(e.getMessage()); - } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) { - throw new Error.GroupNotFound(e.getMessage()); - } - } - @Override public long sendMessageReaction( final String emoji, @@ -401,7 +385,7 @@ public class DbusSignalImpl implements Signal { public long sendGroupMessage(final String message, final List attachments, final byte[] groupId) { try { var results = m.sendMessage(new Message(message, attachments, List.of(), Optional.empty()), - Set.of(new RecipientIdentifier.Group(getGroupId(groupId)))); + Set.of(getGroupRecipientIdentifier(groupId))); checkSendMessageResults(results.timestamp(), results.results()); return results.timestamp(); } catch (IOException e) { @@ -413,6 +397,37 @@ public class DbusSignalImpl implements Signal { } } + @Override + public void sendGroupTyping( + final byte[] groupId, final boolean stop + ) throws Error.Failure, Error.GroupNotFound, Error.UntrustedIdentity { + try { + final var results = m.sendTypingMessage(stop ? TypingAction.STOP : TypingAction.START, + Set.of(getGroupRecipientIdentifier(groupId))); + checkSendMessageResults(results.timestamp(), results.results()); + } catch (IOException e) { + throw new Error.Failure(e.getMessage()); + } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) { + throw new Error.GroupNotFound(e.getMessage()); + } + } + + @Override + public long sendGroupRemoteDeleteMessage( + final long targetSentTimestamp, final byte[] groupId + ) { + try { + final var results = m.sendRemoteDeleteMessage(targetSentTimestamp, + Set.of(getGroupRecipientIdentifier(groupId))); + checkSendMessageResults(results.timestamp(), results.results()); + return results.timestamp(); + } catch (IOException e) { + throw new Error.Failure(e.getMessage()); + } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) { + throw new Error.GroupNotFound(e.getMessage()); + } + } + @Override public long sendGroupMessageReaction( final String emoji, @@ -426,7 +441,7 @@ public class DbusSignalImpl implements Signal { remove, getSingleRecipientIdentifier(targetAuthor, m.getSelfNumber()), targetSentTimestamp, - Set.of(new RecipientIdentifier.Group(getGroupId(groupId)))); + Set.of(getGroupRecipientIdentifier(groupId))); checkSendMessageResults(results.timestamp(), results.results()); return results.timestamp(); } catch (IOException e) { @@ -854,6 +869,10 @@ public class DbusSignalImpl implements Signal { } } + private RecipientIdentifier.Group getGroupRecipientIdentifier(final byte[] groupId) { + return new RecipientIdentifier.Group(getGroupId(groupId)); + } + private static GroupId getGroupId(byte[] groupId) throws DBusExecutionException { try { return GroupId.unknownVersion(groupId); -- 2.50.1