]> nmode's Git Repositories - signal-cli/commitdiff
Implement reacting to stories
authorAsamK <asamk@gmx.de>
Sun, 30 Oct 2022 13:41:02 +0000 (14:41 +0100)
committerAsamK <asamk@gmx.de>
Sun, 30 Oct 2022 13:41:02 +0000 (14:41 +0100)
client/src/cli.rs
client/src/jsonrpc.rs
client/src/main.rs
lib/src/main/java/org/asamk/signal/manager/Manager.java
lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java
man/signal-cli.1.adoc
src/main/java/org/asamk/signal/commands/SendReactionCommand.java
src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java
src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java

index 0191000113066c6b95347d9d99144bc680d4f9f1..23d9e9142611f2f61c0a588e9b26a6cf472868c4 100644 (file)
@@ -193,6 +193,9 @@ pub enum CliCommands {
 
         #[arg(short = 'r', long)]
         remove: bool,
+
+        #[arg(long)]
+        story: bool,
     },
     SendReceipt {
         recipient: String,
index 3c8abbbdac42ff1ba1edad53a2ce8740f1dd4b4b..5881a1ac5358fd99f1e6519ae05cbc261340ced1 100644 (file)
@@ -155,6 +155,7 @@ pub trait Rpc {
         #[allow(non_snake_case)] targetAuthor: String,
         #[allow(non_snake_case)] targetTimestamp: u64,
         remove: bool,
+        story: bool,
     ) -> Result<Value>;
 
     #[rpc(name = "sendReceipt", params = "named")]
index 50a0f4cb32650924db80d57371886866501bf3b4..2951295314ff79a3cf5ff224495c8f0bb3f58caa 100644 (file)
@@ -164,6 +164,7 @@ async fn main() -> Result<(), anyhow::Error> {
             target_author,
             target_timestamp,
             remove,
+            story,
         } => {
             client
                 .send_reaction(
@@ -175,6 +176,7 @@ async fn main() -> Result<(), anyhow::Error> {
                     target_author,
                     target_timestamp,
                     remove,
+                    story,
                 )
                 .await
         }
index 007a783efadd672fc4201cfa6bd97f22f005db96..3dcf8f5976788119c8f49e5557f1af0cabbf2153 100644 (file)
@@ -136,7 +136,8 @@ public interface Manager extends Closeable {
             boolean remove,
             RecipientIdentifier.Single targetAuthor,
             long targetSentTimestamp,
-            Set<RecipientIdentifier> recipients
+            Set<RecipientIdentifier> recipients,
+            final boolean isStory
     ) throws IOException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException, UnregisteredRecipientException;
 
     SendMessageResults sendPaymentNotificationMessage(
index 58863d088ff027519ba12ae0edb1eb7a7b92cf32..95aba4c4d862d5a9e46a1c53ffe818ea180b3652 100644 (file)
@@ -667,14 +667,19 @@ class ManagerImpl implements Manager {
             boolean remove,
             RecipientIdentifier.Single targetAuthor,
             long targetSentTimestamp,
-            Set<RecipientIdentifier> recipients
+            Set<RecipientIdentifier> recipients,
+            final boolean isStory
     ) throws IOException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException, UnregisteredRecipientException {
         var targetAuthorRecipientId = context.getRecipientHelper().resolveRecipient(targetAuthor);
-        var reaction = new SignalServiceDataMessage.Reaction(emoji,
-                remove,
-                context.getRecipientHelper().resolveSignalServiceAddress(targetAuthorRecipientId).getServiceId(),
-                targetSentTimestamp);
+        final var authorServiceId = context.getRecipientHelper()
+                .resolveSignalServiceAddress(targetAuthorRecipientId)
+                .getServiceId();
+        var reaction = new SignalServiceDataMessage.Reaction(emoji, remove, authorServiceId, targetSentTimestamp);
         final var messageBuilder = SignalServiceDataMessage.newBuilder().withReaction(reaction);
+        if (isStory) {
+            messageBuilder.withStoryContext(new SignalServiceDataMessage.StoryContext(authorServiceId,
+                    targetSentTimestamp));
+        }
         return sendMessage(messageBuilder, recipients);
     }
 
index 90b2c97d99cf3fa882ff7ea800f01f81cefd4d6a..4509f08f1a72e314ee5342469b57dae763223425 100644 (file)
@@ -313,6 +313,9 @@ Specify the timestamp of the message to which to react.
 *-r*, *--remove*::
 Remove a reaction.
 
+*--story*::
+React to a story instead of a normal message
+
 === sendReceipt
 
 Send a read or viewed receipt to a previously received message.
index f5b6a89dabbc28a2418b815d380974b883038f84..a844fabf474f9593d2850ccf2832cfb33021304d 100644 (file)
@@ -45,6 +45,9 @@ public class SendReactionCommand implements JsonRpcLocalCommand {
                 .type(long.class)
                 .help("Specify the timestamp of the message to which to react.");
         subparser.addArgument("-r", "--remove").help("Remove a reaction.").action(Arguments.storeTrue());
+        subparser.addArgument("--story")
+                .help("React to a story instead of a normal message")
+                .action(Arguments.storeTrue());
     }
 
     @Override
@@ -64,13 +67,15 @@ public class SendReactionCommand implements JsonRpcLocalCommand {
         final var isRemove = Boolean.TRUE.equals(ns.getBoolean("remove"));
         final var targetAuthor = ns.getString("target-author");
         final var targetTimestamp = ns.getLong("target-timestamp");
+        final var isStory = Boolean.TRUE.equals(ns.getBoolean("story"));
 
         try {
             final var results = m.sendMessageReaction(emoji,
                     isRemove,
                     CommandUtil.getSingleRecipientIdentifier(targetAuthor, m.getSelfNumber()),
                     targetTimestamp,
-                    recipientIdentifiers);
+                    recipientIdentifiers,
+                    isStory);
             outputResult(outputWriter, results);
         } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new UserErrorException(e.getMessage());
index bbfa4f1c207761e93020cf031c2e59c64bce60ab..8e92cdf4ab4efe596b03a0d3fa65bb11a81408a8 100644 (file)
@@ -364,7 +364,8 @@ public class DbusManagerImpl implements Manager {
             final boolean remove,
             final RecipientIdentifier.Single targetAuthor,
             final long targetSentTimestamp,
-            final Set<RecipientIdentifier> recipients
+            final Set<RecipientIdentifier> recipients,
+            final boolean isStory
     ) throws IOException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException {
         return handleMessage(recipients,
                 numbers -> signal.sendMessageReaction(emoji,
index 92e9215704b2f303674ce8ecc21f2a7a61d38207..c19daadffd670198006e303ce304cbebb2a7ba7b 100644 (file)
@@ -287,7 +287,8 @@ public class DbusSignalImpl implements Signal {
                     targetSentTimestamp,
                     getSingleRecipientIdentifiers(recipients, m.getSelfNumber()).stream()
                             .map(RecipientIdentifier.class::cast)
-                            .collect(Collectors.toSet()));
+                            .collect(Collectors.toSet()),
+                    false);
             checkSendMessageResults(results);
             return results.timestamp();
         } catch (IOException e) {
@@ -485,7 +486,8 @@ public class DbusSignalImpl implements Signal {
                     remove,
                     getSingleRecipientIdentifier(targetAuthor, m.getSelfNumber()),
                     targetSentTimestamp,
-                    Set.of(getGroupRecipientIdentifier(groupId)));
+                    Set.of(getGroupRecipientIdentifier(groupId)),
+                    false);
             checkSendMessageResults(results);
             return results.timestamp();
         } catch (IOException e) {