diff --git a/synapse/storage/databases/main/deviceinbox.py b/synapse/storage/databases/main/deviceinbox.py
index d20cc1816e..cf646e21bf 100644
--- a/synapse/storage/databases/main/deviceinbox.py
+++ b/synapse/storage/databases/main/deviceinbox.py
@@ -13,8 +13,9 @@
# limitations under the License.
import logging
-from typing import Collection, Dict, List, Optional, Tuple
+from typing import Collection, Dict, Iterable, List, Optional, Tuple
+from synapse.appservice import ApplicationService
from synapse.logging import issue9533_logger
from synapse.logging.opentracing import log_kv, set_tag, trace
from synapse.replication.tcp.streams import ToDeviceStream
@@ -259,6 +260,36 @@ class DeviceInboxWorkerStore(SQLBaseStore):
"get_new_messages_for_device", get_new_messages_for_device_txn
)
+ # TODO: OpenTracing support
+ async def delete_messages_for_appservice_users(
+ self, service: ApplicationService, users: Iterable[str], up_to_stream_id: int
+ ) -> int:
+ """
+ Delete to-device messages that have been delivered to an application service.
+
+ Only messages
+ that are intended for users that the given application service has registered an exclusive
+ namespace for will be deleted. If a message is intended for a user, but that user is not
+ part of an exclusive namespace registered by the given application service, then that
+ message will remain in-tact.
+
+ Args:
+ service: The application service to inspect user namespaces of.
+ users: The to-device message recipient users to scope to.
+ up_to_stream_id: The maximum message stream token to consider, inclusive.
+
+ Returns:
+ The number of messages deleted.
+ # TODO: Useful now that we skip stream tokens?
+ """
+ # TODO: Check cache
+
+ # Filter users based on exclusive namespace
+
+ # Only delete messages for those users up to the stream ID
+
+ # So potentially just a delete_messages_for_users method?
+
@trace
async def delete_messages_for_device(
self, user_id: str, device_id: Optional[str], up_to_stream_id: int
@@ -267,7 +298,7 @@ class DeviceInboxWorkerStore(SQLBaseStore):
Args:
user_id: The recipient user_id.
device_id: The recipient device_id.
- up_to_stream_id: Where to delete messages up to.
+ up_to_stream_id: Where to delete messages up to, inclusive.
Returns:
The number of messages deleted.
|