setPushRule method
- PushRuleKind kind,
- String ruleId,
- List<
Object?> actions, { - String? before,
- String? after,
- List<
PushCondition> ? conditions, - String? pattern,
This endpoint allows the creation and modification of user defined push rules.
If a rule with the same rule_id
already exists among rules of the same
kind, it is updated with the new parameters, otherwise a new rule is
created.
If both after
and before
are provided, the new or updated rule must
be the next most important rule with respect to the rule identified by
before
.
If neither after
nor before
are provided and the rule is created, it
should be added as the most important user defined rule among rules of
the same kind.
When creating push rules, they MUST be enabled by default.
kind
The kind of rule
ruleId
The identifier for the rule. If the string starts with a dot ("."),
the request MUST be rejected as this is reserved for server-default
rules. Slashes ("/") and backslashes ("\") are also not allowed.
before
Use 'before' with a rule_id
as its value to make the new rule the
next-most important rule with respect to the given user defined rule.
It is not possible to add a rule relative to a predefined server rule.
after
This makes the new rule the next-less important rule relative to the
given user defined rule. It is not possible to add a rule relative
to a predefined server rule.
actions
The action(s) to perform when the conditions for this rule are met.
conditions
The conditions that must hold true for an event in order for a
rule to be applied to an event. A rule with no conditions
always matches. Only applicable to underride
and override
rules.
pattern
Only applicable to content
rules. The glob-style pattern to match against.
Implementation
Future<void> setPushRule(
PushRuleKind kind,
String ruleId,
List<Object?> actions, {
String? before,
String? after,
List<PushCondition>? conditions,
String? pattern,
}) async {
final requestUri = Uri(
path:
'_matrix/client/v3/pushrules/global/${Uri.encodeComponent(kind.name)}/${Uri.encodeComponent(ruleId)}',
queryParameters: {
if (before != null) 'before': before,
if (after != null) 'after': after,
},
);
final request = Request('PUT', baseUri!.resolveUri(requestUri));
request.headers['authorization'] = 'Bearer ${bearerToken!}';
request.headers['content-type'] = 'application/json';
request.bodyBytes = utf8.encode(
jsonEncode({
'actions': actions.map((v) => v).toList(),
if (conditions != null)
'conditions': conditions.map((v) => v.toJson()).toList(),
if (pattern != null) 'pattern': pattern,
}),
);
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 ignore(json);
}