|
13 | 13 | # limitations under the License.
|
14 | 14 | import itertools
|
15 | 15 | import logging
|
| 16 | +from collections import defaultdict |
16 | 17 | from typing import TYPE_CHECKING, Any, Callable, Dict, List, Tuple
|
17 | 18 |
|
18 | 19 | from synapse.api.constants import Membership, PresenceState
|
@@ -232,29 +233,51 @@ async def encode_response(self, time_now, sync_result, access_token_id, filter):
|
232 | 233 | )
|
233 | 234 |
|
234 | 235 | logger.debug("building sync response dict")
|
235 |
| - return { |
236 |
| - "account_data": {"events": sync_result.account_data}, |
237 |
| - "to_device": {"events": sync_result.to_device}, |
238 |
| - "device_lists": { |
239 |
| - "changed": list(sync_result.device_lists.changed), |
240 |
| - "left": list(sync_result.device_lists.left), |
241 |
| - }, |
242 |
| - "presence": SyncRestServlet.encode_presence(sync_result.presence, time_now), |
243 |
| - "rooms": { |
244 |
| - Membership.JOIN: joined, |
245 |
| - Membership.INVITE: invited, |
246 |
| - Membership.KNOCK: knocked, |
247 |
| - Membership.LEAVE: archived, |
248 |
| - }, |
249 |
| - "groups": { |
250 |
| - Membership.JOIN: sync_result.groups.join, |
251 |
| - Membership.INVITE: sync_result.groups.invite, |
252 |
| - Membership.LEAVE: sync_result.groups.leave, |
253 |
| - }, |
254 |
| - "device_one_time_keys_count": sync_result.device_one_time_keys_count, |
255 |
| - "org.matrix.msc2732.device_unused_fallback_key_types": sync_result.device_unused_fallback_key_types, |
256 |
| - "next_batch": await sync_result.next_batch.to_string(self.store), |
257 |
| - } |
| 236 | + |
| 237 | + response: dict = defaultdict(dict) |
| 238 | + response["next_batch"] = await sync_result.next_batch.to_string(self.store) |
| 239 | + |
| 240 | + if sync_result.account_data: |
| 241 | + response["account_data"] = {"events": sync_result.account_data} |
| 242 | + if sync_result.presence: |
| 243 | + response["presence"] = SyncRestServlet.encode_presence( |
| 244 | + sync_result.presence, time_now |
| 245 | + ) |
| 246 | + |
| 247 | + if sync_result.to_device: |
| 248 | + response["to_device"] = {"events": sync_result.to_device} |
| 249 | + |
| 250 | + if sync_result.device_lists.changed: |
| 251 | + response["device_lists"]["changed"] = list(sync_result.device_lists.changed) |
| 252 | + if sync_result.device_lists.left: |
| 253 | + response["device_lists"]["left"] = list(sync_result.device_lists.left) |
| 254 | + |
| 255 | + if sync_result.device_one_time_keys_count: |
| 256 | + response[ |
| 257 | + "device_one_time_keys_count" |
| 258 | + ] = sync_result.device_one_time_keys_count |
| 259 | + if sync_result.device_unused_fallback_key_types: |
| 260 | + response[ |
| 261 | + "org.matrix.msc2732.device_unused_fallback_key_types" |
| 262 | + ] = sync_result.device_unused_fallback_key_types |
| 263 | + |
| 264 | + if joined: |
| 265 | + response["rooms"][Membership.JOIN] = joined |
| 266 | + if invited: |
| 267 | + response["rooms"][Membership.INVITE] = invited |
| 268 | + if knocked: |
| 269 | + response["rooms"][Membership.KNOCK] = knocked |
| 270 | + if archived: |
| 271 | + response["rooms"][Membership.LEAVE] = archived |
| 272 | + |
| 273 | + if sync_result.groups.join: |
| 274 | + response["groups"][Membership.JOIN] = sync_result.groups.join |
| 275 | + if sync_result.groups.invite: |
| 276 | + response["groups"][Membership.INVITE] = sync_result.groups.invite |
| 277 | + if sync_result.groups.leave: |
| 278 | + response["groups"][Membership.LEAVE] = sync_result.groups.leave |
| 279 | + |
| 280 | + return response |
258 | 281 |
|
259 | 282 | @staticmethod
|
260 | 283 | def encode_presence(events, time_now):
|
|
0 commit comments