summary refs log tree commit diff
path: root/synapse/push/push_rule_evaluator.py
diff options
context:
space:
mode:
authorDavid Baker <dave@matrix.org>2017-10-10 15:23:00 +0100
committerDavid Baker <dave@matrix.org>2017-10-10 15:23:00 +0100
commit0f1eb3e914a1e47e441bd8bfb7d523882646fb6e (patch)
treeddac381da32915a648d3e1985efa08f78658e31c /synapse/push/push_rule_evaluator.py
parentThere was already a constant for this (diff)
downloadsynapse-0f1eb3e914a1e47e441bd8bfb7d523882646fb6e.tar.xz
Use notification levels in power_levels
Rather than making the condition directly require a specific power
level. This way the level require to notify a room can be configured
per room.
Diffstat (limited to 'synapse/push/push_rule_evaluator.py')
-rw-r--r--synapse/push/push_rule_evaluator.py20
1 files changed, 14 insertions, 6 deletions
diff --git a/synapse/push/push_rule_evaluator.py b/synapse/push/push_rule_evaluator.py
index 7cf777f16f..5011bef4f1 100644
--- a/synapse/push/push_rule_evaluator.py
+++ b/synapse/push/push_rule_evaluator.py
@@ -33,8 +33,15 @@ def _room_member_count(ev, condition, room_member_count):
     return _test_ineq_condition(condition, room_member_count)
 
 
-def _sender_power_level(ev, condition, power_level):
-    return _test_ineq_condition(condition, power_level)
+def _sender_notification_permission(ev, condition, sender_power_level, power_levels):
+    notif_level_key = condition.get('key')
+    if notif_level_key is None:
+        return False
+
+    notif_levels = power_levels.get('notifications', {})
+    room_notif_level = notif_levels.get(notif_level_key, 50)
+
+    return sender_power_level >= room_notif_level;
 
 
 def _test_ineq_condition(condition, number):
@@ -74,10 +81,11 @@ def tweaks_for_actions(actions):
 
 
 class PushRuleEvaluatorForEvent(object):
-    def __init__(self, event, room_member_count, sender_power_level):
+    def __init__(self, event, room_member_count, sender_power_level, power_levels):
         self._event = event
         self._room_member_count = room_member_count
         self._sender_power_level = sender_power_level
+        self._power_levels = power_levels
 
         # Maps strings of e.g. 'content.body' -> event["content"]["body"]
         self._value_cache = _flatten_dict(event)
@@ -91,9 +99,9 @@ class PushRuleEvaluatorForEvent(object):
             return _room_member_count(
                 self._event, condition, self._room_member_count
             )
-        elif condition['kind'] == 'sender_power_level':
-            return _sender_power_level(
-                self._event, condition, self._sender_power_level
+        elif condition['kind'] == 'sender_notification_permission':
+            return _sender_notification_permission(
+                self._event, condition, self._sender_power_level, self._power_levels,
             )
         else:
             return True