Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Add the master push rule for the break-my-push button. Allow server d…
Browse files Browse the repository at this point in the history
…efault rules to be disabled by default.
  • Loading branch information
dbkr committed Mar 10, 2015
1 parent 8916acb commit 04f8478
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 33 deletions.
6 changes: 5 additions & 1 deletion synapse/push/__init__.py
Expand Up @@ -105,7 +105,11 @@ def _actions_for_event(self, ev):
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

Expand Down
58 changes: 49 additions & 9 deletions synapse/push/baserules.py
Expand Up @@ -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]
Expand All @@ -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',
Expand All @@ -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',
Expand Down Expand Up @@ -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',
Expand Down
5 changes: 4 additions & 1 deletion synapse/rest/client/v1/push_rule.py
Expand Up @@ -156,9 +156,12 @@ def on_GET(self, request):

template_rule = _rule_to_template(r)
if template_rule:
template_rule['enabled'] = True
if r['rule_id'] in enabled_map:
template_rule['enabled'] = enabled_map[r['rule_id']]
elif 'enabled' in r:
template_rule['enabled'] = r['enabled']
else:
template_rule['enabled'] = True
rulearray.append(template_rule)

path = request.postpath[1:]
Expand Down
27 changes: 5 additions & 22 deletions synapse/storage/push_rule.py
Expand Up @@ -56,17 +56,6 @@ def get_push_rules_enabled_for_user(self, user_name):
{r['rule_id']: False if r['enabled'] == 0 else True for r in results}
)

@defer.inlineCallbacks
def get_push_rule_enabled_by_user_rule_id(self, user_name, rule_id):
results = yield self._simple_select_list(
PushRuleEnableTable.table_name,
{'user_name': user_name, 'rule_id': rule_id},
['enabled']
)
if not results:
defer.returnValue(True)
defer.returnValue(results[0])

@defer.inlineCallbacks
def add_push_rule(self, before, after, **kwargs):
vals = copy.copy(kwargs)
Expand Down Expand Up @@ -217,17 +206,11 @@ def delete_push_rule(self, user_name, rule_id):

@defer.inlineCallbacks
def set_push_rule_enabled(self, user_name, rule_id, enabled):
if enabled:
yield self._simple_delete_one(
PushRuleEnableTable.table_name,
{'user_name': user_name, 'rule_id': rule_id}
)
else:
yield self._simple_upsert(
PushRuleEnableTable.table_name,
{'user_name': user_name, 'rule_id': rule_id},
{'enabled': False}
)
yield self._simple_upsert(
PushRuleEnableTable.table_name,
{'user_name': user_name, 'rule_id': rule_id},
{'enabled': enabled}
)


class RuleNotFoundException(Exception):
Expand Down

0 comments on commit 04f8478

Please sign in to comment.