1
0

Encode response

This commit is contained in:
Eric Eastwood
2024-05-22 17:08:34 -05:00
parent c7f7ae4ec0
commit 4c7d7e6365
2 changed files with 49 additions and 10 deletions

View File

@@ -192,7 +192,7 @@ class SlidingSyncHandler:
if timeout == 0 or from_token is None:
now_token = self.event_sources.get_current_token()
return await self.current_sync_for_user(
result = await self.current_sync_for_user(
sync_config,
from_token=from_token,
to_token=now_token,
@@ -215,6 +215,8 @@ class SlidingSyncHandler:
from_token=from_token,
)
return result
async def current_sync_for_user(
self,
sync_config: SlidingSyncConfig,
@@ -249,11 +251,11 @@ class SlidingSyncHandler:
ops: List[SlidingSyncResult.SlidingWindowList.Operation] = []
for range in list_config.ranges:
ops.append(
{
"op": OperationType.SYNC,
"range": range,
"room_ids": sorted_room_ids[range[0] : range[1]],
}
SlidingSyncResult.SlidingWindowList.Operation(
op=OperationType.SYNC,
range=range,
room_ids=sorted_room_ids[range[0] : range[1]],
)
)
lists[list_key] = SlidingSyncResult.SlidingWindowList(
@@ -426,7 +428,7 @@ class SlidingSyncHandler:
# `to_token`.
if (
last_membership_change_after_to_token.membership == Membership.LEAVE
and prev_membership != None
and prev_membership is not None
and prev_membership != Membership.LEAVE
):
sync_room_id_set.add(room_id)
@@ -438,7 +440,7 @@ class SlidingSyncHandler:
# the room before the `to_token`.
elif (
last_membership_change_after_to_token.membership != Membership.LEAVE
and (prev_membership == None or prev_membership == Membership.LEAVE)
and (prev_membership is None or prev_membership == Membership.LEAVE)
):
sync_room_id_set.discard(room_id)

View File

@@ -33,7 +33,7 @@ from synapse.events.utils import (
format_event_raw,
)
from synapse.handlers.presence import format_user_presence_state
from synapse.handlers.sliding_sync import SlidingSyncConfig
from synapse.handlers.sliding_sync import SlidingSyncConfig, SlidingSyncResult
from synapse.handlers.sync import (
ArchivedSyncResult,
InvitedSyncResult,
@@ -810,7 +810,44 @@ class SlidingSyncRestServlet(RestServlet):
logger.info("sliding_sync_results: %s", sliding_sync_results)
return 200, {"foo": "bar"}
response_content = await self.encode_response(sliding_sync_results)
return 200, response_content
# TODO: Is there a better way to encode things?
async def encode_response(
self,
sliding_sync_result: SlidingSyncResult,
) -> JsonDict:
response: JsonDict = defaultdict(dict)
response["next_pos"] = await sliding_sync_result.next_pos.to_string(self.store)
response["lists"] = self.encode_lists(sliding_sync_result.lists)
response["rooms"] = {} # TODO: sliding_sync_result.rooms
response["extensions"] = {} # TODO: sliding_sync_result.extensions
return response
def encode_lists(
self, lists: Dict[str, SlidingSyncResult.SlidingWindowList]
) -> JsonDict:
def encode_operation(
operation: SlidingSyncResult.SlidingWindowList.Operation,
) -> JsonDict:
return {
"op": operation.op,
"range": operation.range,
"room_ids": operation.room_ids,
}
serialized_lists = {}
for list_key, list_result in lists.items():
serialized_lists[list_key] = {
"count": list_result.count,
"ops": [encode_operation(op) for op in list_result.ops],
}
return serialized_lists
def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None: