mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-15 05:33:53 +01:00
Move methods that call add_push_rule to PushRuleStore (#12772)
Signed-off-by: Adam Roddick <ajroddick@tuta.io>
This commit is contained in:
parent
0d17357fcd
commit
37935b5183
2 changed files with 52 additions and 51 deletions
1
changelog.d/12772.misc
Normal file
1
changelog.d/12772.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Move methods that call `add_push_rule` to the `PushRuleStore` class.
|
|
@ -243,57 +243,6 @@ class PushRulesWorkerStore(
|
||||||
|
|
||||||
return results
|
return results
|
||||||
|
|
||||||
async def copy_push_rule_from_room_to_room(
|
|
||||||
self, new_room_id: str, user_id: str, rule: dict
|
|
||||||
) -> None:
|
|
||||||
"""Copy a single push rule from one room to another for a specific user.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
new_room_id: ID of the new room.
|
|
||||||
user_id : ID of user the push rule belongs to.
|
|
||||||
rule: A push rule.
|
|
||||||
"""
|
|
||||||
# Create new rule id
|
|
||||||
rule_id_scope = "/".join(rule["rule_id"].split("/")[:-1])
|
|
||||||
new_rule_id = rule_id_scope + "/" + new_room_id
|
|
||||||
|
|
||||||
# Change room id in each condition
|
|
||||||
for condition in rule.get("conditions", []):
|
|
||||||
if condition.get("key") == "room_id":
|
|
||||||
condition["pattern"] = new_room_id
|
|
||||||
|
|
||||||
# Add the rule for the new room
|
|
||||||
await self.add_push_rule( # type: ignore[attr-defined]
|
|
||||||
user_id=user_id,
|
|
||||||
rule_id=new_rule_id,
|
|
||||||
priority_class=rule["priority_class"],
|
|
||||||
conditions=rule["conditions"],
|
|
||||||
actions=rule["actions"],
|
|
||||||
)
|
|
||||||
|
|
||||||
async def copy_push_rules_from_room_to_room_for_user(
|
|
||||||
self, old_room_id: str, new_room_id: str, user_id: str
|
|
||||||
) -> None:
|
|
||||||
"""Copy all of the push rules from one room to another for a specific
|
|
||||||
user.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
old_room_id: ID of the old room.
|
|
||||||
new_room_id: ID of the new room.
|
|
||||||
user_id: ID of user to copy push rules for.
|
|
||||||
"""
|
|
||||||
# Retrieve push rules for this user
|
|
||||||
user_push_rules = await self.get_push_rules_for_user(user_id)
|
|
||||||
|
|
||||||
# Get rules relating to the old room and copy them to the new room
|
|
||||||
for rule in user_push_rules:
|
|
||||||
conditions = rule.get("conditions", [])
|
|
||||||
if any(
|
|
||||||
(c.get("key") == "room_id" and c.get("pattern") == old_room_id)
|
|
||||||
for c in conditions
|
|
||||||
):
|
|
||||||
await self.copy_push_rule_from_room_to_room(new_room_id, user_id, rule)
|
|
||||||
|
|
||||||
@cachedList(
|
@cachedList(
|
||||||
cached_method_name="get_push_rules_enabled_for_user",
|
cached_method_name="get_push_rules_enabled_for_user",
|
||||||
list_name="user_ids",
|
list_name="user_ids",
|
||||||
|
@ -866,3 +815,54 @@ class PushRuleStore(PushRulesWorkerStore):
|
||||||
|
|
||||||
def get_max_push_rules_stream_id(self) -> int:
|
def get_max_push_rules_stream_id(self) -> int:
|
||||||
return self._push_rules_stream_id_gen.get_current_token()
|
return self._push_rules_stream_id_gen.get_current_token()
|
||||||
|
|
||||||
|
async def copy_push_rule_from_room_to_room(
|
||||||
|
self, new_room_id: str, user_id: str, rule: dict
|
||||||
|
) -> None:
|
||||||
|
"""Copy a single push rule from one room to another for a specific user.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
new_room_id: ID of the new room.
|
||||||
|
user_id : ID of user the push rule belongs to.
|
||||||
|
rule: A push rule.
|
||||||
|
"""
|
||||||
|
# Create new rule id
|
||||||
|
rule_id_scope = "/".join(rule["rule_id"].split("/")[:-1])
|
||||||
|
new_rule_id = rule_id_scope + "/" + new_room_id
|
||||||
|
|
||||||
|
# Change room id in each condition
|
||||||
|
for condition in rule.get("conditions", []):
|
||||||
|
if condition.get("key") == "room_id":
|
||||||
|
condition["pattern"] = new_room_id
|
||||||
|
|
||||||
|
# Add the rule for the new room
|
||||||
|
await self.add_push_rule(
|
||||||
|
user_id=user_id,
|
||||||
|
rule_id=new_rule_id,
|
||||||
|
priority_class=rule["priority_class"],
|
||||||
|
conditions=rule["conditions"],
|
||||||
|
actions=rule["actions"],
|
||||||
|
)
|
||||||
|
|
||||||
|
async def copy_push_rules_from_room_to_room_for_user(
|
||||||
|
self, old_room_id: str, new_room_id: str, user_id: str
|
||||||
|
) -> None:
|
||||||
|
"""Copy all of the push rules from one room to another for a specific
|
||||||
|
user.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
old_room_id: ID of the old room.
|
||||||
|
new_room_id: ID of the new room.
|
||||||
|
user_id: ID of user to copy push rules for.
|
||||||
|
"""
|
||||||
|
# Retrieve push rules for this user
|
||||||
|
user_push_rules = await self.get_push_rules_for_user(user_id)
|
||||||
|
|
||||||
|
# Get rules relating to the old room and copy them to the new room
|
||||||
|
for rule in user_push_rules:
|
||||||
|
conditions = rule.get("conditions", [])
|
||||||
|
if any(
|
||||||
|
(c.get("key") == "room_id" and c.get("pattern") == old_room_id)
|
||||||
|
for c in conditions
|
||||||
|
):
|
||||||
|
await self.copy_push_rule_from_room_to_room(new_room_id, user_id, rule)
|
||||||
|
|
Loading…
Reference in a new issue