]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/actions/SendReceiptAction.java
Refactor SendReceiptAction to take type argument
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / actions / SendReceiptAction.java
index 8341304c426128b8f76b170698648e596f5d2186..c08438b5bc529b266217ff0bfd375b09acb76666 100644 (file)
@@ -1,36 +1,53 @@
 package org.asamk.signal.manager.actions;
 
-import org.asamk.signal.manager.jobs.Context;
+import org.asamk.signal.manager.helper.Context;
 import org.asamk.signal.manager.storage.recipients.RecipientId;
+import org.whispersystems.signalservice.api.messages.SignalServiceReceiptMessage;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
 public class SendReceiptAction implements HandleAction {
 
     private final RecipientId recipientId;
-    private final long timestamp;
+    private final SignalServiceReceiptMessage.Type type;
+    private final List<Long> timestamps = new ArrayList<>();
 
-    public SendReceiptAction(final RecipientId recipientId, final long timestamp) {
+    public SendReceiptAction(
+            final RecipientId recipientId, final SignalServiceReceiptMessage.Type type, final long timestamp
+    ) {
         this.recipientId = recipientId;
-        this.timestamp = timestamp;
+        this.type = type;
+        this.timestamps.add(timestamp);
     }
 
     @Override
     public void execute(Context context) throws Throwable {
-        context.getSendHelper().sendDeliveryReceipt(recipientId, List.of(timestamp));
+        final var receiptMessage = new SignalServiceReceiptMessage(type, timestamps, System.currentTimeMillis());
+
+        context.getSendHelper().sendReceiptMessage(receiptMessage, recipientId);
+    }
+
+    @Override
+    public void mergeOther(final HandleAction action) {
+        if (action instanceof SendReceiptAction sendReceiptAction) {
+            this.timestamps.addAll(sendReceiptAction.timestamps);
+        }
     }
 
     @Override
     public boolean equals(final Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
-        final var that = (SendReceiptAction) o;
-        return timestamp == that.timestamp && recipientId.equals(that.recipientId);
+        final SendReceiptAction that = (SendReceiptAction) o;
+        // Using only recipientId and type here on purpose
+        return recipientId.equals(that.recipientId) && type == that.type;
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(recipientId, timestamp);
+        // Using only recipientId and type here on purpose
+        return Objects.hash(recipientId, type);
     }
 }