Encode response
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user