diff --git a/synapse/push/baserules.py b/synapse/push/baserules.py
index 86a2998bcc..85effdfa46 100644
--- a/synapse/push/baserules.py
+++ b/synapse/push/baserules.py
@@ -19,9 +19,11 @@ import copy
def list_with_base_rules(rawrules):
"""Combine the list of rules set by the user with the default push rules
- :param list rawrules: The rules the user has modified or set.
- :returns: A new list with the rules set by the user combined with the
- defaults.
+ Args:
+ rawrules(list): The rules the user has modified or set.
+
+ Returns:
+ A new list with the rules set by the user combined with the defaults.
"""
ruleslist = []
@@ -77,7 +79,7 @@ def make_base_append_rules(kind, modified_base_rules):
rules = []
if kind == 'override':
- rules = BASE_APPEND_OVRRIDE_RULES
+ rules = BASE_APPEND_OVERRIDE_RULES
elif kind == 'underride':
rules = BASE_APPEND_UNDERRIDE_RULES
elif kind == 'content':
@@ -146,7 +148,7 @@ BASE_PREPEND_OVERRIDE_RULES = [
]
-BASE_APPEND_OVRRIDE_RULES = [
+BASE_APPEND_OVERRIDE_RULES = [
{
'rule_id': 'global/override/.m.rule.suppress_notices',
'conditions': [
@@ -160,34 +162,67 @@ BASE_APPEND_OVRRIDE_RULES = [
'actions': [
'dont_notify',
]
- }
-]
-
-
-BASE_APPEND_UNDERRIDE_RULES = [
+ },
+ # NB. .m.rule.invite_for_me must be higher prio than .m.rule.member_event
+ # otherwise invites will be matched by .m.rule.member_event
{
- 'rule_id': 'global/underride/.m.rule.call',
+ 'rule_id': 'global/override/.m.rule.invite_for_me',
'conditions': [
{
'kind': 'event_match',
'key': 'type',
- 'pattern': 'm.call.invite',
- '_id': '_call',
- }
+ 'pattern': 'm.room.member',
+ '_id': '_member',
+ },
+ {
+ 'kind': 'event_match',
+ 'key': 'content.membership',
+ 'pattern': 'invite',
+ '_id': '_invite_member',
+ },
+ {
+ 'kind': 'event_match',
+ 'key': 'state_key',
+ 'pattern_type': 'user_id'
+ },
],
'actions': [
'notify',
{
'set_tweak': 'sound',
- 'value': 'ring'
+ 'value': 'default'
}, {
'set_tweak': 'highlight',
'value': False
}
]
},
+ # Will we sometimes want to know about people joining and leaving?
+ # Perhaps: if so, this could be expanded upon. Seems the most usual case
+ # is that we don't though. We add this override rule so that even if
+ # the room rule is set to notify, we don't get notifications about
+ # join/leave/avatar/displayname events.
+ # See also: https://matrix.org/jira/browse/SYN-607
+ {
+ 'rule_id': 'global/override/.m.rule.member_event',
+ 'conditions': [
+ {
+ 'kind': 'event_match',
+ 'key': 'type',
+ 'pattern': 'm.room.member',
+ '_id': '_member',
+ }
+ ],
+ 'actions': [
+ 'dont_notify'
+ ]
+ },
+ # This was changed from underride to override so it's closer in priority
+ # to the content rules where the user name highlight rule lives. This
+ # way a room rule is lower priority than both but a custom override rule
+ # is higher priority than both.
{
- 'rule_id': 'global/underride/.m.rule.contains_display_name',
+ 'rule_id': 'global/override/.m.rule.contains_display_name',
'conditions': [
{
'kind': 'contains_display_name'
@@ -203,6 +238,33 @@ BASE_APPEND_UNDERRIDE_RULES = [
}
]
},
+]
+
+
+BASE_APPEND_UNDERRIDE_RULES = [
+ {
+ 'rule_id': 'global/underride/.m.rule.call',
+ 'conditions': [
+ {
+ 'kind': 'event_match',
+ 'key': 'type',
+ 'pattern': 'm.call.invite',
+ '_id': '_call',
+ }
+ ],
+ 'actions': [
+ 'notify',
+ {
+ 'set_tweak': 'sound',
+ 'value': 'ring'
+ }, {
+ 'set_tweak': 'highlight',
+ 'value': False
+ }
+ ]
+ },
+ # XXX: once m.direct is standardised everywhere, we should use it to detect
+ # a DM from the user's perspective rather than this heuristic.
{
'rule_id': 'global/underride/.m.rule.room_one_to_one',
'conditions': [
@@ -229,26 +291,22 @@ BASE_APPEND_UNDERRIDE_RULES = [
}
]
},
+ # XXX: this is going to fire for events which aren't m.room.messages
+ # but are encrypted (e.g. m.call.*)...
{
- 'rule_id': 'global/underride/.m.rule.invite_for_me',
+ 'rule_id': 'global/underride/.m.rule.encrypted_room_one_to_one',
'conditions': [
{
- 'kind': 'event_match',
- 'key': 'type',
- 'pattern': 'm.room.member',
- '_id': '_member',
- },
- {
- 'kind': 'event_match',
- 'key': 'content.membership',
- 'pattern': 'invite',
- '_id': '_invite_member',
+ 'kind': 'room_member_count',
+ 'is': '2',
+ '_id': 'member_count',
},
{
'kind': 'event_match',
- 'key': 'state_key',
- 'pattern_type': 'user_id'
- },
+ 'key': 'type',
+ 'pattern': 'm.room.encrypted',
+ '_id': '_encrypted',
+ }
],
'actions': [
'notify',
@@ -261,25 +319,6 @@ BASE_APPEND_UNDERRIDE_RULES = [
}
]
},
- # This is too simple: https://matrix.org/jira/browse/SYN-607
- # Removing for now
- # {
- # 'rule_id': 'global/underride/.m.rule.member_event',
- # 'conditions': [
- # {
- # 'kind': 'event_match',
- # 'key': 'type',
- # 'pattern': 'm.room.member',
- # '_id': '_member',
- # }
- # ],
- # 'actions': [
- # 'notify', {
- # 'set_tweak': 'highlight',
- # 'value': False
- # }
- # ]
- # },
{
'rule_id': 'global/underride/.m.rule.message',
'conditions': [
@@ -296,6 +335,25 @@ BASE_APPEND_UNDERRIDE_RULES = [
'value': False
}
]
+ },
+ # XXX: this is going to fire for events which aren't m.room.messages
+ # but are encrypted (e.g. m.call.*)...
+ {
+ 'rule_id': 'global/underride/.m.rule.encrypted',
+ 'conditions': [
+ {
+ 'kind': 'event_match',
+ 'key': 'type',
+ 'pattern': 'm.room.encrypted',
+ '_id': '_encrypted',
+ }
+ ],
+ 'actions': [
+ 'notify', {
+ 'set_tweak': 'highlight',
+ 'value': False
+ }
+ ]
}
]
@@ -312,7 +370,7 @@ for r in BASE_PREPEND_OVERRIDE_RULES:
r['default'] = True
BASE_RULE_IDS.add(r['rule_id'])
-for r in BASE_APPEND_OVRRIDE_RULES:
+for r in BASE_APPEND_OVERRIDE_RULES:
r['priority_class'] = PRIORITY_CLASS_MAP['override']
r['default'] = True
BASE_RULE_IDS.add(r['rule_id'])
|