Allow sending custom data in /read_markers too

This commit is contained in:
Tulir Asokan 2021-12-21 17:53:01 +02:00
parent 360f254c6d
commit 9c9cdae578
2 changed files with 8 additions and 3 deletions

View File

@ -13,9 +13,10 @@
# limitations under the License. # limitations under the License.
import logging import logging
from typing import TYPE_CHECKING from typing import TYPE_CHECKING, Optional
from synapse.util.async_helpers import Linearizer from synapse.util.async_helpers import Linearizer
from synapse.types import JsonDict
if TYPE_CHECKING: if TYPE_CHECKING:
from synapse.server import HomeServer from synapse.server import HomeServer
@ -31,7 +32,7 @@ class ReadMarkerHandler:
self.read_marker_linearizer = Linearizer(name="read_marker") self.read_marker_linearizer = Linearizer(name="read_marker")
async def received_client_read_marker( async def received_client_read_marker(
self, room_id: str, user_id: str, event_id: str self, room_id: str, user_id: str, event_id: str, extra_content: Optional[JsonDict] = None
) -> None: ) -> None:
"""Updates the read marker for a given user in a given room if the event ID given """Updates the read marker for a given user in a given room if the event ID given
is ahead in the stream relative to the current read marker. is ahead in the stream relative to the current read marker.
@ -54,7 +55,7 @@ class ReadMarkerHandler:
) )
if should_update: if should_update:
content = {"event_id": event_id} content = {"event_id": event_id, **(extra_content or {})}
await self.account_data_handler.add_account_data_to_room( await self.account_data_handler.add_account_data_to_room(
user_id, room_id, "m.fully_read", content user_id, room_id, "m.fully_read", content
) )

View File

@ -49,6 +49,7 @@ class ReadMarkerRestServlet(RestServlet):
body = parse_json_object_from_request(request) body = parse_json_object_from_request(request)
read_event_id = body.get("m.read", None) read_event_id = body.get("m.read", None)
read_extra = body.get("com.beeper.read.extra", None)
hidden = body.get(ReadReceiptEventFields.MSC2285_HIDDEN, False) hidden = body.get(ReadReceiptEventFields.MSC2285_HIDDEN, False)
if not isinstance(hidden, bool): if not isinstance(hidden, bool):
@ -66,14 +67,17 @@ class ReadMarkerRestServlet(RestServlet):
user_id=requester.user.to_string(), user_id=requester.user.to_string(),
event_id=read_event_id, event_id=read_event_id,
hidden=hidden, hidden=hidden,
extra_content=read_extra,
) )
read_marker_event_id = body.get("m.fully_read", None) read_marker_event_id = body.get("m.fully_read", None)
read_marker_extra = body.get("com.beeper.fully_read.extra", None)
if read_marker_event_id: if read_marker_event_id:
await self.read_marker_handler.received_client_read_marker( await self.read_marker_handler.received_client_read_marker(
room_id, room_id,
user_id=requester.user.to_string(), user_id=requester.user.to_string(),
event_id=read_marker_event_id, event_id=read_marker_event_id,
extra_content=read_marker_extra,
) )
return 200, {} return 200, {}