-
Notifications
You must be signed in to change notification settings - Fork 384
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Document a v2 api for setting tags on rooms #132
Changes from all commits
12e33a3
9b0d203
f8275e3
65066a7
b49472e
ad86426
f557e69
52f55e0
1498902
e9d3618
bcb8fac
fba3c04
3953006
d538140
3b390bf
299af67
48f35e1
e7fbe6f
2576949
c77b227
fcbb985
5bae15d
d39494b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
swagger: '2.0' | ||
info: | ||
title: "Matrix Client-Server tag API" | ||
version: "1.0.0" | ||
host: localhost:8008 | ||
schemes: | ||
- https | ||
- http | ||
basePath: /_matrix/client/v2_alpha | ||
consumes: | ||
- application/json | ||
produces: | ||
- application/json | ||
securityDefinitions: | ||
accessToken: | ||
type: apiKey | ||
description: The user_id or application service access_token | ||
name: access_token | ||
in: query | ||
paths: | ||
"/user/{userId}/rooms/{roomId}/tags": | ||
get: | ||
summary: List the tags for a room. | ||
description: |- | ||
List the tags set by a user on a room. | ||
security: | ||
- accessToken: [] | ||
parameters: | ||
- in: path | ||
type: string | ||
name: userId | ||
required: true | ||
description: |- | ||
The id of the user to get tags for. The access token must be | ||
authorized to make requests for this user id. | ||
x-example: "@alice:example.com" | ||
- in: path | ||
type: string | ||
name: roomId | ||
required: true | ||
description: |- | ||
The id of the room to get tags for. | ||
x-example: "!726s6s6q:example.com" | ||
responses: | ||
200: | ||
description: | ||
The list of tags for the user for the room. | ||
schema: | ||
type: object | ||
properties: | ||
tags: | ||
title: Tags | ||
type: object | ||
examples: | ||
application/json: |- | ||
{ | ||
"tags": { | ||
"work": {"order": "1"}, | ||
"pinned": {} | ||
} | ||
} | ||
"/user/{userId}/rooms/{roomId}/tags/{tag}": | ||
put: | ||
summary: Add a tag to a room. | ||
description: |- | ||
Add a tag to the room. | ||
security: | ||
- accessToken: [] | ||
parameters: | ||
- in: path | ||
type: string | ||
name: userId | ||
required: true | ||
description: |- | ||
The id of the user to add a tag for. The access token must be | ||
authorized to make requests for this user id. | ||
x-example: "@alice:example.com" | ||
- in: path | ||
type: string | ||
name: roomId | ||
required: true | ||
description: |- | ||
The id of the room to add a tag to. | ||
x-example: "!726s6s6q:example.com" | ||
- in: path | ||
type: string | ||
name: tag | ||
required: true | ||
description: |- | ||
The tag to add. | ||
x-example: "work" | ||
- in: body | ||
name: body | ||
required: true | ||
description: |- | ||
Extra data for the tag, e.g. ordering. | ||
schema: | ||
type: object | ||
example: |- | ||
{"order": "1"} | ||
responses: | ||
200: | ||
description: | ||
The tag was successfully added. | ||
schema: | ||
type: object | ||
examples: | ||
application/json: |- | ||
{} | ||
delete: | ||
summary: Remove a tag from the room. | ||
description: |- | ||
Remove a tag from the room. | ||
security: | ||
- access_token: [] | ||
parameters: | ||
- in: path | ||
type: string | ||
name: userId | ||
required: true | ||
description: |- | ||
The id of the user to remove a tag for. The access token must be | ||
authorized to make requests for this user id. | ||
x-example: "@alice:example.com" | ||
- in: path | ||
type: string | ||
name: roomId | ||
required: true | ||
description: |- | ||
The id of the room to remove a tag from. | ||
x-example: "!726s6s6q:example.com" | ||
- in: path | ||
type: string | ||
name: tag | ||
required: true | ||
description: |- | ||
The tag to remove. | ||
x-example: "work" | ||
responses: | ||
200: | ||
description: | ||
The tag was successfully removed | ||
schema: | ||
type: object | ||
examples: | ||
application/json: |- | ||
{} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
{ | ||
"type": "m.tag", | ||
"content": { | ||
"tags": { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. shouldn't this be a list of tags? Or if it's a single tag, shouldn't the key be called "tag"? Any chance we can show an example of metadata for the tag - e.g. { order: 1 } rather than {}. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done d538140 |
||
"work": {"order": 1} | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
{ | ||
"type": "object", | ||
"title": "Tag Event", | ||
"description": "Informs the client of tags on a room.", | ||
"properties": { | ||
"type": { | ||
"type": "string", | ||
"enum": ["m.tag"] | ||
}, | ||
"content": { | ||
"type": "object", | ||
"properties": { | ||
"tags": { | ||
"type": "object", | ||
"description": "The tags on the room and their contents.", | ||
"additionalProperties": { | ||
"title": "Tag", | ||
"type": "object" | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can we describe what keys a |
||
} | ||
} | ||
} | ||
}, | ||
"required": ["type", "content"] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
Room Tagging | ||
============ | ||
|
||
.. _module:tagging: | ||
|
||
Users can add tags to rooms. Tags are short strings used to label rooms, e.g. | ||
"work", "family". A room may have multiple tags. Tags are only visible to the | ||
user that set them but are shared across all their devices. | ||
|
||
Events | ||
------ | ||
|
||
The tags on a room are received as single ``m.tag`` event in the | ||
``account_data`` section of a room in a v2 /sync. | ||
|
||
The ``m.tag`` can also be received in a v1 /events response or in the | ||
``account_data`` section of a room in v1 /initialSync. ``m.tag`` | ||
events appearing in v1 /events will have a ``room_id`` with the room | ||
the tags are for. | ||
|
||
Each tag has an associated JSON object with information about the tag, e.g how | ||
to order the rooms with a given tag. | ||
|
||
Ordering information is given under the ``order`` key as a string. The string | ||
are compared lexicographically by unicode codepoint to determine which should | ||
displayed first. So a room with a tag with an ``order`` key of ``"apples"`` | ||
would appear before a room with a tag with an ``order`` key of ``"oranges"``. | ||
If a room has a tag without an ``order`` key then it should appear after the | ||
rooms with that tag that have an ``order`` key. | ||
|
||
The name of a tag MUST not exceed 255 bytes. | ||
|
||
The name of a tag should be human readable. When displaying tags for a room a | ||
client should display this human readable name. When adding a tag for a room | ||
a client may offer a list to choose from that includes all the tags that the | ||
user has previously set on any of their rooms. | ||
|
||
Two special names are listed in the specification: | ||
|
||
* ``m.favourite`` | ||
* ``m.lowpriority`` | ||
|
||
{{m_tag_event}} | ||
|
||
Client Behaviour | ||
---------------- | ||
|
||
{{v2_tags_http_api}} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It would be great to have recommendations on what the tag names should be. Particularly:
And as for ordering:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Done 48f35e1 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Done e7fbe6f |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's the rationale for forcing clients to know their own
userId
in the path? We can completely infer this from the token.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To match the /user/user_id/filter APIs