getRelatingEvents method
Retrieve all of the child events for a given parent event.
Note that when paginating the from
token should be "after" the to
token in
terms of topological ordering, because it is only possible to paginate "backwards"
through events, starting at from
.
For example, passing a from
token from page 2 of the results, and a to
token
from page 1, would return the empty set. The caller can use a from
token from
page 1 and a to
token from page 2 to paginate over the same range, however.
roomId
The ID of the room containing the parent event.
eventId
The ID of the parent event whose child events are to be returned.
from
The pagination token to start returning results from. If not supplied, results
start at the most recent topological event known to the server.
Can be a next_batch
or prev_batch
token from a previous call, or a returned
start
token from /messages
,
or a next_batch
token from /sync
.
to
The pagination token to stop returning results at. If not supplied, results
continue up to limit
or until there are no more events.
Like from
, this can be a previous token from a prior call to this endpoint
or from /messages
or /sync
.
limit
The maximum number of results to return in a single chunk
. The server can
and should apply a maximum value to this parameter to avoid large responses.
Similarly, the server should apply a default value when not supplied.
dir
Optional (default b
) direction to return events from. If this is set to f
, events
will be returned in chronological order starting at from
. If it
is set to b
, events will be returned in reverse chronological
order, again starting at from
.
Implementation
Future<GetRelatingEventsResponse> getRelatingEvents(
String roomId, String eventId,
{String? from, String? to, int? limit, Direction? dir}) async {
final requestUri = Uri(
path:
'_api/client/v1/rooms/${Uri.encodeComponent(roomId)}/relations/${Uri.encodeComponent(eventId)}',
queryParameters: {
if (from != null) 'from': from,
if (to != null) 'to': to,
if (limit != null) 'limit': limit.toString(),
if (dir != null) 'dir': dir.name,
});
final request = Request('GET', baseUri!.resolveUri(requestUri));
request.headers['authorization'] = 'Bearer ${bearerToken!}';
final response = await httpClient.send(request);
final responseBody = await response.stream.toBytes();
if (response.statusCode != 200) unexpectedResponse(response, responseBody);
final responseString = utf8.decode(responseBody);
final json = jsonDecode(responseString);
return GetRelatingEventsResponse.fromJson(json as Map<String, Object?>);
}