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;
public class SendReceiptAction implements HandleAction {
private final RecipientId recipientId;
+ 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.type = type;
this.timestamps.add(timestamp);
}
@Override
public void execute(Context context) throws Throwable {
- context.getSendHelper().sendDeliveryReceipt(recipientId, timestamps);
+ final var receiptMessage = new SignalServiceReceiptMessage(type, timestamps, System.currentTimeMillis());
+
+ context.getSendHelper().sendReceiptMessage(receiptMessage, recipientId);
}
@Override
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
final SendReceiptAction that = (SendReceiptAction) o;
- // Using only recipientId here on purpose
- return recipientId.equals(that.recipientId);
+ // Using only recipientId and type here on purpose
+ return recipientId.equals(that.recipientId) && type == that.type;
}
@Override
public int hashCode() {
- // Using only recipientId here on purpose
- return Objects.hash(recipientId);
+ // Using only recipientId and type here on purpose
+ return Objects.hash(recipientId, type);
}
}
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
+import org.whispersystems.signalservice.api.messages.SignalServiceReceiptMessage;
import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage;
import org.whispersystems.signalservice.api.messages.multidevice.StickerPackOperationMessage;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
var message = content.getDataMessage().get();
if (content.isNeedsReceipt()) {
- actions.add(new SendReceiptAction(sender, message.getTimestamp()));
+ actions.add(new SendReceiptAction(sender,
+ SignalServiceReceiptMessage.Type.DELIVERY,
+ message.getTimestamp()));
} else {
// Message wasn't sent as unidentified sender message
final var contact = context.getAccount().getContactStore().getContact(sender);
return sendGroupMessage(message, recipientIds, distributionId, ContentHint.IMPLICIT);
}
- public SendMessageResult sendDeliveryReceipt(
- RecipientId recipientId, List<Long> messageIds
- ) {
- var receiptMessage = new SignalServiceReceiptMessage(SignalServiceReceiptMessage.Type.DELIVERY,
- messageIds,
- System.currentTimeMillis());
-
- return sendReceiptMessage(receiptMessage, recipientId);
- }
-
public SendMessageResult sendReceiptMessage(
final SignalServiceReceiptMessage receiptMessage, final RecipientId recipientId
) {