Replace presence API with new template.

pull/977/head
Kegan Dougal 10 years ago
parent 334e10468d
commit e10859a887

@ -22,8 +22,10 @@ paths:
put: put:
summary: Update this user's presence state. summary: Update this user's presence state.
description: |- description: |-
This API sets the given user's presence state. You cannot set the presence This API sets the given user's presence state. When setting the status,
state of another user. the activity time is updated to reflect that activity; the client does
not need to specify the ``last_active_ago`` field. You cannot set the
presence state of another user.
security: security:
- accessToken: [] - accessToken: []
parameters: parameters:

@ -1179,49 +1179,11 @@ address
Presence Presence
~~~~~~~~ ~~~~~~~~
The client API for presence is on the following set of REST calls.
Fetching basic status::
GET $PREFIX/presence/<user_id>/status
Returned content: JSON object containing the following keys:
presence: "offline"|"unavailable"|"online"|"free_for_chat"
status_msg: (optional) string of freeform text
last_active_ago: miliseconds since the last activity by the user
Setting basic status::
PUT $PREFIX/presence/<user_id>/status
Content: JSON object containing the following keys:
presence and status_msg: as above
When setting the status, the activity time is updated to reflect that activity;
the client does not need to specify the ``last_active_ago`` field.
Fetching the presence list::
GET $PREFIX/presence/list
Returned content: JSON array containing objects; each object containing the
following keys:
user_id: observed user ID
presence: "offline"|"unavailable"|"online"|"free_for_chat"
status_msg: (optional) string of freeform text
last_active_ago: miliseconds since the last activity by the user
Maintaining the presence list::
POST $PREFIX/presence/list
Content: JSON object containing either or both of the following keys:
invite: JSON array of strings giving user IDs to send invites to
drop: JSON array of strings giving user IDs to remove from the list
.. TODO-spec .. TODO-spec
- Define how users receive presence invites, and how they accept/decline them - Define how users receive presence invites, and how they accept/decline them
{{presence_http_api}}
Profiles Profiles
~~~~~~~~ ~~~~~~~~

@ -38,11 +38,33 @@ class MatrixSections(Sections):
)) ))
return "\n\n".join(sections) return "\n\n".join(sections)
def _render_http_api_group(self, group, sortFn=sorted, title_kind="-"): def _render_http_api_group(self, group, sortFnOrPathList=None,
title_kind="-"):
template = self.env.get_template("http-api.tmpl") template = self.env.get_template("http-api.tmpl")
http_api = self.units.get("swagger_apis")[group]["__meta"] http_api = self.units.get("swagger_apis")[group]["__meta"]
sections = [] sections = []
for endpoint in sortFn(http_api["endpoints"]): endpoints = []
if sortFnOrPathList:
if isinstance(sortFnOrPathList, list):
# list of substrings to sort by
sorted_endpoints = []
for path_substr in sortFnOrPathList:
for e in http_api["endpoints"]:
if path_substr in e["path"]:
sorted_endpoints.append(e) # could have multiple
# dump rest
rest = [
e for e in http_api["endpoints"] if e not in sorted_endpoints
]
endpoints = sorted_endpoints + rest
else:
# guess it's a func, call it.
endpoints = sortFnOrPathList(http_api["endpoints"])
else:
# sort alphabetically based on path
endpoints = sorted(http_api["endpoints"], key=lambda k: k["path"])
for endpoint in endpoints:
sections.append(template.render( sections.append(template.render(
endpoint=endpoint, endpoint=endpoint,
title_kind=title_kind title_kind=title_kind
@ -50,18 +72,10 @@ class MatrixSections(Sections):
return "\n\n".join(sections) return "\n\n".join(sections)
def render_profile_http_api(self): def render_profile_http_api(self):
def sortFn(endpoints):
ordering = ["displayname", "avatar_url"]
sorted_endpoints = []
for path_substr in ordering:
for e in endpoints:
if path_substr in e["path"]:
sorted_endpoints.append(e) # could have multiple
# dump rest
rest = [ e for e in endpoints if e not in sorted_endpoints ]
return sorted_endpoints + rest
return self._render_http_api_group( return self._render_http_api_group(
"profile", sortFn=sortFn, title_kind="+" "profile",
sortFnOrPathList=["displayname", "avatar_url"],
title_kind="+"
) )
def render_sync_http_api(self): def render_sync_http_api(self):
@ -71,7 +85,7 @@ class MatrixSections(Sections):
def render_presence_http_api(self): def render_presence_http_api(self):
return self._render_http_api_group( return self._render_http_api_group(
"presence" "presence", title_kind="+"
) )
def render_room_events(self): def render_room_events(self):

Loading…
Cancel
Save