|
|
|
@ -16,7 +16,7 @@ import logging |
|
|
|
|
|
|
|
|
|
from twisted.internet import defer |
|
|
|
|
|
|
|
|
|
from synapse.types import get_domain_from_id |
|
|
|
|
from synapse.types import ReadReceipt, get_domain_from_id |
|
|
|
|
|
|
|
|
|
from ._base import BaseHandler |
|
|
|
|
|
|
|
|
@ -42,13 +42,13 @@ class ReceiptsHandler(BaseHandler): |
|
|
|
|
"""Called when we receive an EDU of type m.receipt from a remote HS. |
|
|
|
|
""" |
|
|
|
|
receipts = [ |
|
|
|
|
{ |
|
|
|
|
"room_id": room_id, |
|
|
|
|
"receipt_type": receipt_type, |
|
|
|
|
"user_id": user_id, |
|
|
|
|
"event_ids": user_values["event_ids"], |
|
|
|
|
"data": user_values.get("data", {}), |
|
|
|
|
} |
|
|
|
|
ReadReceipt( |
|
|
|
|
room_id=room_id, |
|
|
|
|
receipt_type=receipt_type, |
|
|
|
|
user_id=user_id, |
|
|
|
|
event_ids=user_values["event_ids"], |
|
|
|
|
data=user_values.get("data", {}), |
|
|
|
|
) |
|
|
|
|
for room_id, room_values in content.items() |
|
|
|
|
for receipt_type, users in room_values.items() |
|
|
|
|
for user_id, user_values in users.items() |
|
|
|
@ -64,14 +64,12 @@ class ReceiptsHandler(BaseHandler): |
|
|
|
|
max_batch_id = None |
|
|
|
|
|
|
|
|
|
for receipt in receipts: |
|
|
|
|
room_id = receipt["room_id"] |
|
|
|
|
receipt_type = receipt["receipt_type"] |
|
|
|
|
user_id = receipt["user_id"] |
|
|
|
|
event_ids = receipt["event_ids"] |
|
|
|
|
data = receipt["data"] |
|
|
|
|
|
|
|
|
|
res = yield self.store.insert_receipt( |
|
|
|
|
room_id, receipt_type, user_id, event_ids, data |
|
|
|
|
receipt.room_id, |
|
|
|
|
receipt.receipt_type, |
|
|
|
|
receipt.user_id, |
|
|
|
|
receipt.event_ids, |
|
|
|
|
receipt.data, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
if not res: |
|
|
|
@ -107,15 +105,15 @@ class ReceiptsHandler(BaseHandler): |
|
|
|
|
"""Called when a client tells us a local user has read up to the given |
|
|
|
|
event_id in the room. |
|
|
|
|
""" |
|
|
|
|
receipt = { |
|
|
|
|
"room_id": room_id, |
|
|
|
|
"receipt_type": receipt_type, |
|
|
|
|
"user_id": user_id, |
|
|
|
|
"event_ids": [event_id], |
|
|
|
|
"data": { |
|
|
|
|
receipt = ReadReceipt( |
|
|
|
|
room_id=room_id, |
|
|
|
|
receipt_type=receipt_type, |
|
|
|
|
user_id=user_id, |
|
|
|
|
event_ids=[event_id], |
|
|
|
|
data={ |
|
|
|
|
"ts": int(self.clock.time_msec()), |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
is_new = yield self._handle_new_receipts([receipt]) |
|
|
|
|
if not is_new: |
|
|
|
@ -124,7 +122,7 @@ class ReceiptsHandler(BaseHandler): |
|
|
|
|
# Work out which remote servers should be poked and poke them. |
|
|
|
|
|
|
|
|
|
# TODO: optimise this to move some of the work to the workers. |
|
|
|
|
data = receipt["data"] |
|
|
|
|
data = receipt.data |
|
|
|
|
|
|
|
|
|
# XXX why does this not use state.get_current_hosts_in_room() ? |
|
|
|
|
users = yield self.state.get_current_user_in_room(room_id) |
|
|
|
|