Merge branch 'master' into push
This commit is contained in:
commit
2740e50a9f
8 changed files with 40 additions and 1311 deletions
|
@ -111,6 +111,7 @@ Global initial sync API ``[Draft]``
|
||||||
- The invite event
|
- The invite event
|
||||||
- Other state info (e.g. room name, topic, join_rules to know if pubilc)
|
- Other state info (e.g. room name, topic, join_rules to know if pubilc)
|
||||||
- # members?
|
- # members?
|
||||||
|
|
||||||
so clients know more information about the room other than the user_id of the
|
so clients know more information about the room other than the user_id of the
|
||||||
inviter, timestamp and the room ID.
|
inviter, timestamp and the room ID.
|
||||||
|
|
||||||
|
@ -637,7 +638,7 @@ A client may wish to send multiple actions in parallel. The send event APIs
|
||||||
support sending multiple events in a batch.
|
support sending multiple events in a batch.
|
||||||
|
|
||||||
Inviting a user ``[ONGOING]``
|
Inviting a user ``[ONGOING]``
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
.. NOTE::
|
.. NOTE::
|
||||||
- Clients need to know *why* they are being invited (e.g. a ``reason`` key,
|
- Clients need to know *why* they are being invited (e.g. a ``reason`` key,
|
||||||
just like for kicks/bans). However, this opens up a spam vector where any
|
just like for kicks/bans). However, this opens up a spam vector where any
|
||||||
|
@ -1028,8 +1029,8 @@ relate to other events are referred to as "Child Events". The event being
|
||||||
related to is referred to as "Parent Events". Child events cannot stand alone as
|
related to is referred to as "Parent Events". Child events cannot stand alone as
|
||||||
a separate entity; they require the parent event in order to make sense.
|
a separate entity; they require the parent event in order to make sense.
|
||||||
|
|
||||||
Bundling
|
Bundling updates
|
||||||
++++++++
|
++++++++++++++++
|
||||||
Events that relate to another event should come down inside that event. That is,
|
Events that relate to another event should come down inside that event. That is,
|
||||||
the top-level event should come down with all the child events at the same time.
|
the top-level event should come down with all the child events at the same time.
|
||||||
This is called a "bundle" and it is represented as an array of events inside the
|
This is called a "bundle" and it is represented as an array of events inside the
|
||||||
|
@ -1081,8 +1082,8 @@ not update the event itself*, and are *not required* in order to display the
|
||||||
parent event. Crucially, the child events can be paginated, whereas ``updates``
|
parent event. Crucially, the child events can be paginated, whereas ``updates``
|
||||||
child events cannot be paginated.
|
child events cannot be paginated.
|
||||||
|
|
||||||
Bundling
|
Bundling relations
|
||||||
++++++++
|
++++++++++++++++++
|
||||||
Child events can be optionally bundled with the parent event, depending on your
|
Child events can be optionally bundled with the parent event, depending on your
|
||||||
display mechanism. The number of child events which can be bundled should be
|
display mechanism. The number of child events which can be bundled should be
|
||||||
limited to prevent events becoming too large. This limit should be set by the
|
limited to prevent events becoming too large. This limit should be set by the
|
||||||
|
|
|
@ -198,12 +198,11 @@ Requests that a client can make to its Home Server
|
||||||
|
|
||||||
* get another user's Display Name / Avatar / metadata fields
|
* get another user's Display Name / Avatar / metadata fields
|
||||||
|
|
||||||
[[TODO(paul): At some later stage we should consider the API for:
|
TODO(paul): At some later stage we should consider the API for:
|
||||||
|
|
||||||
* get/set ACL permissions on my metadata fields
|
* get/set ACL permissions on my metadata fields
|
||||||
|
|
||||||
* manage my ACL tokens
|
* manage my ACL tokens
|
||||||
]]
|
|
||||||
|
|
||||||
Server-Server
|
Server-Server
|
||||||
-------------
|
-------------
|
||||||
|
|
|
@ -3,7 +3,9 @@ Host: ...
|
||||||
Content-Length: ...
|
Content-Length: ...
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
|
|
||||||
{
|
.. code :: javascript
|
||||||
|
|
||||||
|
{
|
||||||
"origin": "localhost:5000",
|
"origin": "localhost:5000",
|
||||||
"pdus": [
|
"pdus": [
|
||||||
{
|
{
|
||||||
|
@ -27,7 +29,7 @@ Content-Type: application/json
|
||||||
"1404381396852"
|
"1404381396852"
|
||||||
],
|
],
|
||||||
"ts": 1404381427823
|
"ts": 1404381427823
|
||||||
}
|
}
|
||||||
|
|
||||||
HTTP/1.1 200 OK
|
HTTP/1.1 200 OK
|
||||||
...
|
...
|
||||||
|
@ -42,7 +44,9 @@ HTTP/1.1 200 OK
|
||||||
Content-Length: ...
|
Content-Length: ...
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
|
|
||||||
{
|
.. code :: javascript
|
||||||
|
|
||||||
|
{
|
||||||
origin: ...,
|
origin: ...,
|
||||||
prev_ids: ...,
|
prev_ids: ...,
|
||||||
data: [
|
data: [
|
||||||
|
@ -59,6 +63,6 @@ Content-Type: application/json
|
||||||
},
|
},
|
||||||
...,
|
...,
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -125,12 +125,13 @@ m.invite_level
|
||||||
m.join_rules
|
m.join_rules
|
||||||
Encodes the rules on how non-members can join the room. Has the following
|
Encodes the rules on how non-members can join the room. Has the following
|
||||||
possibilities:
|
possibilities:
|
||||||
"public" - a non-member can join the room directly
|
|
||||||
"knock" - a non-member cannot join the room, but can post a single "knock"
|
- "public" - a non-member can join the room directly
|
||||||
|
- "knock" - a non-member cannot join the room, but can post a single "knock"
|
||||||
message requesting access, which existing members may approve or deny
|
message requesting access, which existing members may approve or deny
|
||||||
"invite" - non-members cannot join the room without an invite from an
|
- "invite" - non-members cannot join the room without an invite from an
|
||||||
existing member
|
existing member
|
||||||
"private" - nobody who is not in the 'may_join' list or already a member
|
- "private" - nobody who is not in the 'may_join' list or already a member
|
||||||
may join by any mechanism
|
may join by any mechanism
|
||||||
|
|
||||||
In any of the first three modes, existing members with sufficient permission
|
In any of the first three modes, existing members with sufficient permission
|
||||||
|
@ -263,9 +264,10 @@ resolve this:
|
||||||
that duplicate requests can be suppressed. On receipt of a room creation
|
that duplicate requests can be suppressed. On receipt of a room creation
|
||||||
request that the HS thinks there already exists a room for, the invitation to
|
request that the HS thinks there already exists a room for, the invitation to
|
||||||
join can be rejected if:
|
join can be rejected if:
|
||||||
a) the HS believes the sending user is already a member of the room (and
|
|
||||||
|
- a) the HS believes the sending user is already a member of the room (and
|
||||||
maybe their HS has forgotten this fact), or
|
maybe their HS has forgotten this fact), or
|
||||||
b) the proposed room has a lexicographically-higher ID than the existing
|
- b) the proposed room has a lexicographically-higher ID than the existing
|
||||||
room (to resolve true race condition conflicts)
|
room (to resolve true race condition conflicts)
|
||||||
|
|
||||||
* The room ID for a private 1:1 chat has a special form, determined by
|
* The room ID for a private 1:1 chat has a special form, determined by
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -27,6 +27,7 @@ all state events eventually.
|
||||||
Algorithm requirements
|
Algorithm requirements
|
||||||
----------------------
|
----------------------
|
||||||
We want the algorithm to have the following properties:
|
We want the algorithm to have the following properties:
|
||||||
|
|
||||||
- Since we aren't guaranteed what order we receive state events in, except that
|
- Since we aren't guaranteed what order we receive state events in, except that
|
||||||
we see parents before children, the state resolution algorithm must not depend
|
we see parents before children, the state resolution algorithm must not depend
|
||||||
on the order and must always come to the same result.
|
on the order and must always come to the same result.
|
||||||
|
|
|
@ -268,6 +268,7 @@ Chat Screen
|
||||||
What's visible:
|
What's visible:
|
||||||
- Enough scrollback to fill a "screen full" of content.
|
- Enough scrollback to fill a "screen full" of content.
|
||||||
- Threads:
|
- Threads:
|
||||||
|
|
||||||
- Initially will only display the timestamp and user ID of the *first*
|
- Initially will only display the timestamp and user ID of the *first*
|
||||||
message. But can expand to show the entire tree.
|
message. But can expand to show the entire tree.
|
||||||
- Tree of messages indicating which message is a reply to which.
|
- Tree of messages indicating which message is a reply to which.
|
||||||
|
@ -280,6 +281,7 @@ Chat Screen
|
||||||
- Desktop/Push Notifications for messages
|
- Desktop/Push Notifications for messages
|
||||||
What you can do:
|
What you can do:
|
||||||
- Send a message in reply to another message:
|
- Send a message in reply to another message:
|
||||||
|
|
||||||
- Immediate local echo, may cause messages to re-order
|
- Immediate local echo, may cause messages to re-order
|
||||||
- Messages that haven't reached the server are queued.
|
- Messages that haven't reached the server are queued.
|
||||||
- Thread is displayed where it should be in the thread order once the
|
- Thread is displayed where it should be in the thread order once the
|
||||||
|
@ -303,6 +305,7 @@ Chat Screen
|
||||||
+------------+ | * A2 -> A1 | | * B2 -> B1 |
|
+------------+ | * A2 -> A1 | | * B2 -> B1 |
|
||||||
| * M -> A2, B2 | +--------------+
|
| * M -> A2, B2 | +--------------+
|
||||||
+----------------+
|
+----------------+
|
||||||
|
|
||||||
- Typing notifications. Displayed within the correct thread/column.
|
- Typing notifications. Displayed within the correct thread/column.
|
||||||
|
|
||||||
What you can do:
|
What you can do:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue