diff options
author | David Baker <dave@matrix.org> | 2015-03-10 17:26:25 +0000 |
---|---|---|
committer | David Baker <dave@matrix.org> | 2015-03-10 17:26:25 +0000 |
commit | 04f8478aaa02d11ce079d1eaeabcfba88b1fcee7 (patch) | |
tree | 5ca8117876ce9507421c5e4c53c117a7171e6577 /synapse/push | |
parent | These aren't defined for redacted events so don't crash (diff) | |
download | synapse-04f8478aaa02d11ce079d1eaeabcfba88b1fcee7.tar.xz |
Add the master push rule for the break-my-push button. Allow server default rules to be disabled by default.
Diffstat (limited to '')
-rw-r--r-- | synapse/push/__init__.py | 6 | ||||
-rw-r--r-- | synapse/push/baserules.py | 58 |
2 files changed, 54 insertions, 10 deletions
diff --git a/synapse/push/__init__.py b/synapse/push/__init__.py index 3da0ce8703..c98aca60b9 100644 --- a/synapse/push/__init__.py +++ b/synapse/push/__init__.py @@ -105,7 +105,11 @@ class Pusher(object): room_member_count += 1 for r in rules: - if r['rule_id'] in enabled_map and not enabled_map[r['rule_id']]: + if r['rule_id'] in enabled_map: + r['enabled'] = enabled_map[r['rule_id']] + elif 'enabled' not in r: + r['enabled'] = True + if not r['enabled']: continue matches = True diff --git a/synapse/push/baserules.py b/synapse/push/baserules.py index 6e333a3d21..bf6ee67100 100644 --- a/synapse/push/baserules.py +++ b/synapse/push/baserules.py @@ -6,36 +6,63 @@ def list_with_base_rules(rawrules, user_name): # shove the server default rules for each kind onto the end of each current_prio_class = PRIORITY_CLASS_INVERSE_MAP.keys()[-1] + + ruleslist.extend(make_base_prepend_rules( + user_name, PRIORITY_CLASS_INVERSE_MAP[current_prio_class] + )) + for r in rawrules: if r['priority_class'] < current_prio_class: while r['priority_class'] < current_prio_class: - ruleslist.extend(make_base_rules( + ruleslist.extend(make_base_append_rules( user_name, PRIORITY_CLASS_INVERSE_MAP[current_prio_class] )) current_prio_class -= 1 + if current_prio_class > 0: + ruleslist.extend(make_base_prepend_rules( + user_name, + PRIORITY_CLASS_INVERSE_MAP[current_prio_class] + )) ruleslist.append(r) while current_prio_class > 0: - ruleslist.extend(make_base_rules( + ruleslist.extend(make_base_append_rules( user_name, PRIORITY_CLASS_INVERSE_MAP[current_prio_class] )) current_prio_class -= 1 + if current_prio_class > 0: + ruleslist.extend(make_base_prepend_rules( + user_name, + PRIORITY_CLASS_INVERSE_MAP[current_prio_class] + )) return ruleslist -def make_base_rules(user, kind): +def make_base_append_rules(user, kind): rules = [] if kind == 'override': - rules = make_base_override_rules() + rules = make_base_append_override_rules() elif kind == 'underride': - rules = make_base_underride_rules(user) + rules = make_base_append_underride_rules(user) elif kind == 'content': - rules = make_base_content_rules(user) + rules = make_base_append_content_rules(user) + + for r in rules: + r['priority_class'] = PRIORITY_CLASS_MAP[kind] + r['default'] = True # Deprecated, left for backwards compat + + return rules + +def make_base_prepend_rules(user, kind): + rules = [] + + if kind == 'override': + rules = make_base_prepend_override_rules() for r in rules: r['priority_class'] = PRIORITY_CLASS_MAP[kind] @@ -44,7 +71,7 @@ def make_base_rules(user, kind): return rules -def make_base_content_rules(user): +def make_base_append_content_rules(user): return [ { 'rule_id': 'global/content/.m.rule.contains_user_name', @@ -68,7 +95,20 @@ def make_base_content_rules(user): ] -def make_base_override_rules(): +def make_base_prepend_override_rules(): + return [ + { + 'rule_id': 'global/override/.m.rule.master', + 'enabled': False, + 'conditions': [], + 'actions': [ + "dont_notify" + ] + } + ] + + +def make_base_append_override_rules(): return [ { 'rule_id': 'global/override/.m.rule.call', @@ -142,7 +182,7 @@ def make_base_override_rules(): ] -def make_base_underride_rules(user): +def make_base_append_underride_rules(user): return [ { 'rule_id': 'global/underride/.m.rule.invite_for_me', |