From 0ce533d153e9656818dfdefa565b1356afa4b391 Mon Sep 17 00:00:00 2001 From: Mark Haines Date: Tue, 6 Oct 2015 13:42:03 +0100 Subject: [PATCH] Split the room_map into separate sections based on whether they are "joined/invited/archived". Rename the room_map to rooms and remove the grouping indirection. When we want groups then we can add them under a separate key, either at the top-level or as part of the events themselves. --- api/client-server/v2_alpha/sync.yaml | 295 ++++++++++++++------------- 1 file changed, 153 insertions(+), 142 deletions(-) diff --git a/api/client-server/v2_alpha/sync.yaml b/api/client-server/v2_alpha/sync.yaml index 1b83d1d9..7d60d639 100644 --- a/api/client-server/v2_alpha/sync.yaml +++ b/api/client-server/v2_alpha/sync.yaml @@ -74,82 +74,92 @@ paths: rooms: type: object description: |- - The updates to rooms, grouped according to the filter. By - default there is a single ``default`` group. - additionalProperties: - joined: - type: array - description: |- - A list of room ids that the user is a member of that - have updates. - items: - type: string. - invited: - type: array - description: |- - A list of room ids that the user has been invited to. - The entries in the room_map will have an - ``invite_state`` key. But will lack the ``ephemeral`` - key, the ``timeline`` key and the ``state`` key. - items: - type: string. - archived: - type: array - description: |- - A list of room ids that the user has left or been - banned from. The entries in the room_map will have a - ``state`` key and a ``timeline`` key. But will lack the - ``ephemeral`` key. - items: - type: string. - room_map: - description: |- - Map from room id to the updates for that room. The room ids - are referenced from the ``rooms`` key. - type: object - additionalProperties: - type: object - properties: - event_map: + Updates to rooms. + properties: + joined: + type: object + additionalProperties: + type: object + properties: + event_map: + type: object + description: |- + A map from event ID to events for this room. The + events are referenced from the ``timeline`` and + ``state`` keys for this room. + additionalProperties: + description: An event object. + type: object + state: + description: |- + The state updates for the room. + allOf: + - $ref: "definitions/room_event_batch.json" + timeline: + description: |- + The timeline of messages and state changes in the + room. + allOf: + - $ref: "definitions/timeline_batch.json" + ephemeral: + description: |- + The ephemeral events in the room that aren't + recorded in the timeline or state of the room. + e.g. typing. + allOf: + - $ref: "definitions/event_batch.json" + invited: + type: object + description: |- + The rooms that the user has been invited to. + additionalProperties: type: object - description: |- - A map from event ID to events for this room. The events - are referenced from the ``timeline`` and ``state`` keys - for this room. - additionalProperties: - description: An event object. - type: object - state: - description: |- - The state updates for the room. - allOf: - - $ref: "definitions/room_event_batch.json" - timeline: - description: |- - The timeline of messages and state changes in the room. - allOf: - - $ref: "definitions/timeline_batch.json" - ephemeral: - description: |- - The ephemeral events in the room that aren't recorded - in the timeline or state of the room. E.g. typing. - allOf: - - $ref: "definitions/event_batch.json" - invite_state: - description: |- - The state of a room that the user has been invited to. - These state events may only have the `sender``, - ``type``, ``state_key`` and ``content`` keys present. - These events do not replace any state that the client - already has for the room, for example if the client has - archived the room. Instead the client should keep two - separate copies of the state: the one from the - ``invite_state`` and one from the archived ``state``. - If the client joins the room then the current state - will be given as a delta against the archived ``state`` - not the ``invite_state``. - allOf: - - $ref: "definitions/event_batch.json" + properties: + invite_state: + description: |- + The state of a room that the user has been invited + to. These state events may only have the `sender``, + ``type``, ``state_key`` and ``content`` keys + present. These events do not replace any state that + the client already has for the room, for example if + the client has archived the room. Instead the + client should keep two separate copies of the + state: the one from the ``invite_state`` and one + from the archived ``state``. If the client joins + the room then the current state will be given as a + delta against the archived ``state`` not the + ``invite_state``. + allOf: + - $ref: "definitions/event_batch.json" + archived: + type: object + description: |- + The rooms that the user has left or been banned from. The + entries in the room_map will lack an ``ephemeral`` key. + additionalProperties: + type: object + properties: + event_map: + type: object + description: |- + A map from event ID to events for this room. The + events are referenced from the ``timeline`` and + ``state`` keys for this room. + additionalProperties: + description: An event object. + type: object + state: + description: |- + The state updates for the room up to the point when + the user left. + allOf: + - $ref: "definitions/room_event_batch.json" + timeline: + description: |- + The timeline of messages and state changes in the + room up to the point when the user left. + allOf: + - $ref: "definitions/timeline_batch.json" presence: description: |- The updates to the presence status of other users. @@ -169,78 +179,79 @@ paths: ] }, "rooms": { - "default": { - "invited": ["!696r7674:example.com"], - "archived": [], - "joined": ["!726s6s6q:example.com"] - } - }, - "room_map": { - "!726s6s6q:example.com": { - "event_map": { - "$66697273743031:example.com": { - "sender": "@alice:example.com", - "type": "m.room.member", - "state_key": "@alice:example.com", - "content": {"membership": "join"}, - "origin_server_ts": 1417731086795 - }, - "$7365636s6r6432:example.com": { - "sender": "@bob:example.com", - "type": "m.room.member", - "state_key": "@bob:example.com", - "content": {"membership": "join"}, - "origin_server_ts": 1417731086795 - }, - "$74686972643033:example.com": { - "sender": "@alice:example.com", - "type": "m.room.message", - "unsigned": {"age": "124524", "txn_id": "1234"}, - "content": {"body": "I am a fish", "msgtype": "m.text"}, - "origin_server_ts": 1417731086797 - } - }, - "state": { - "events": [ - "$66697273743031:example.com", - "$7365636s6r6432:example.com" - ] - }, - "timeline": { - "events": [ - "$7365636s6r6432:example.com", - "$74686972643033:example.com" - ], - "limited": true, - "prev_batch": "t34-23535_0_0" - }, - "ephemeral": { - "events": [ - { - "room_id": "!726s6s6q:example.com", - "type": "m.typing", - "content": {"user_ids": ["@alice:example.com"]} - } - ] - } - }, - "!696r7674:example.com": { - "invite_state": { - "events": [ - { + "joined": { + "!726s6s6q:example.com": { + "event_map": { + "$66697273743031:example.com": { "sender": "@alice:example.com", - "type": "m.room.name", - "state_key": "", - "content": {"name": "My Room Name"} + "type": "m.room.member", + "state_key": "@alice:example.com", + "content": {"membership": "join"}, + "origin_server_ts": 1417731086795 }, - { - "sender": "@alice:example.com", + "$7365636s6r6432:example.com": { + "sender": "@bob:example.com", "type": "m.room.member", "state_key": "@bob:example.com", - "content": {"membership": "invite"} + "content": {"membership": "join"}, + "origin_server_ts": 1417731086795 + }, + "$74686972643033:example.com": { + "sender": "@alice:example.com", + "type": "m.room.message", + "unsigned": {"age": "124524", "txn_id": "1234"}, + "content": { + "body": "I am a fish", + "msgtype": "m.text" + }, + "origin_server_ts": 1417731086797 } - ] + }, + "state": { + "events": [ + "$66697273743031:example.com", + "$7365636s6r6432:example.com" + ] + }, + "timeline": { + "events": [ + "$7365636s6r6432:example.com", + "$74686972643033:example.com" + ], + "limited": true, + "prev_batch": "t34-23535_0_0" + }, + "ephemeral": { + "events": [ + { + "room_id": "!726s6s6q:example.com", + "type": "m.typing", + "content": {"user_ids": ["@alice:example.com"]} + } + ] + } } - } + }, + "invited": { + "!696r7674:example.com": { + "invite_state": { + "events": [ + { + "sender": "@alice:example.com", + "type": "m.room.name", + "state_key": "", + "content": {"name": "My Room Name"} + }, + { + "sender": "@alice:example.com", + "type": "m.room.member", + "state_key": "@bob:example.com", + "content": {"membership": "invite"} + } + ] + } + } + }, + "archived": {} } }