|
|
@ -20,6 +20,7 @@ from twisted.internet import defer |
|
|
|
from .push_rule_evaluator import PushRuleEvaluatorForEvent |
|
|
|
from .push_rule_evaluator import PushRuleEvaluatorForEvent |
|
|
|
|
|
|
|
|
|
|
|
from synapse.api.constants import EventTypes |
|
|
|
from synapse.api.constants import EventTypes |
|
|
|
|
|
|
|
from synapse.visibility import filter_events_for_clients_context |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
logger = logging.getLogger(__name__) |
|
|
@ -66,6 +67,17 @@ class BulkPushRuleEvaluator: |
|
|
|
def action_for_event_by_user(self, event, context): |
|
|
|
def action_for_event_by_user(self, event, context): |
|
|
|
actions_by_user = {} |
|
|
|
actions_by_user = {} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# None of these users can be peeking since this list of users comes |
|
|
|
|
|
|
|
# from the set of users in the room, so we know for sure they're all |
|
|
|
|
|
|
|
# actually in the room. |
|
|
|
|
|
|
|
user_tuples = [ |
|
|
|
|
|
|
|
(u, False) for u in self.rules_by_user.keys() |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
filtered_by_user = yield filter_events_for_clients_context( |
|
|
|
|
|
|
|
self.store, user_tuples, [event], {event.event_id: context} |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
room_members = yield self.store.get_joined_users_from_context( |
|
|
|
room_members = yield self.store.get_joined_users_from_context( |
|
|
|
event, context |
|
|
|
event, context |
|
|
|
) |
|
|
|
) |
|
|
@ -75,14 +87,6 @@ class BulkPushRuleEvaluator: |
|
|
|
condition_cache = {} |
|
|
|
condition_cache = {} |
|
|
|
|
|
|
|
|
|
|
|
for uid, rules in self.rules_by_user.items(): |
|
|
|
for uid, rules in self.rules_by_user.items(): |
|
|
|
if event.sender == uid: |
|
|
|
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not event.is_state(): |
|
|
|
|
|
|
|
is_ignored = yield self.store.is_ignored_by(event.sender, uid) |
|
|
|
|
|
|
|
if is_ignored: |
|
|
|
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
display_name = None |
|
|
|
display_name = None |
|
|
|
profile_info = room_members.get(uid) |
|
|
|
profile_info = room_members.get(uid) |
|
|
|
if profile_info: |
|
|
|
if profile_info: |
|
|
@ -94,6 +98,13 @@ class BulkPushRuleEvaluator: |
|
|
|
if event.type == EventTypes.Member and event.state_key == uid: |
|
|
|
if event.type == EventTypes.Member and event.state_key == uid: |
|
|
|
display_name = event.content.get("displayname", None) |
|
|
|
display_name = event.content.get("displayname", None) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
filtered = filtered_by_user[uid] |
|
|
|
|
|
|
|
if len(filtered) == 0: |
|
|
|
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if filtered[0].sender == uid: |
|
|
|
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
|
|
for rule in rules: |
|
|
|
for rule in rules: |
|
|
|
if 'enabled' in rule and not rule['enabled']: |
|
|
|
if 'enabled' in rule and not rule['enabled']: |
|
|
|
continue |
|
|
|
continue |
|
|
|