For ephemeral messages, remove recipient view from shared MRM data if recipient is offline

This commit is contained in:
Chris Eager
2024-09-05 10:19:44 -05:00
committed by Chris Eager
parent a0770db179
commit b95a766888
4 changed files with 30 additions and 4 deletions

View File

@@ -69,6 +69,8 @@ public class MessageSender {
if (clientPresent) {
messagesManager.insert(account.getUuid(), device.getId(), message.toBuilder().setEphemeral(true).build());
} else {
messagesManager.removeRecipientViewFromMrmData(account.getUuid(), device.getId(), message);
}
} else {
messagesManager.insert(account.getUuid(), device.getId(), message);

View File

@@ -462,7 +462,7 @@ public class MessagesCache extends RedisClusterPubSubAdapter<String, String> imp
/**
* Makes a best-effort attempt at asynchronously updating (and removing when empty) the MRM data structure
*/
private void removeRecipientViewFromMrmData(final List<byte[]> sharedMrmKeys, final UUID accountUuid,
void removeRecipientViewFromMrmData(final List<byte[]> sharedMrmKeys, final UUID accountUuid,
final byte deviceId) {
final Timer.Sample sample = Timer.start();

View File

@@ -210,4 +210,15 @@ public class MessagesManager {
SealedSenderMultiRecipientMessage sealedSenderMultiRecipientMessage) {
return messagesCache.insertSharedMultiRecipientMessagePayload(UUID.randomUUID(), sealedSenderMultiRecipientMessage);
}
/**
* Removes the recipient's view from shared MRM data if necessary
*/
public void removeRecipientViewFromMrmData(final UUID destinationUuid, final byte destinationDeviceId,
final Envelope message) {
if (message.hasSharedMrmKey()) {
messagesCache.removeRecipientViewFromMrmData(List.of(message.getSharedMrmKey().toByteArray()), destinationUuid,
destinationDeviceId);
}
}
}