Don't reset model on account data pushrules event
This commit is contained in:
parent
99c5346dba
commit
9473e97c61
|
@ -120,6 +120,7 @@ class PushRule(ModelItem):
|
|||
self.kind is PushRuleKind.Content,
|
||||
self.kind is PushRuleKind.Override,
|
||||
self.order,
|
||||
self.id,
|
||||
) < (
|
||||
other.kind is PushRuleKind.Underride,
|
||||
other.kind is PushRuleKind.Sender,
|
||||
|
@ -127,6 +128,7 @@ class PushRule(ModelItem):
|
|||
other.kind is PushRuleKind.Content,
|
||||
other.kind is PushRuleKind.Override,
|
||||
other.order,
|
||||
other.id,
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ from dataclasses import dataclass, field
|
|||
from datetime import datetime, timedelta
|
||||
from html import escape
|
||||
from pathlib import Path
|
||||
from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Union
|
||||
from typing import TYPE_CHECKING, Dict, List, Optional, Set, Tuple, Union
|
||||
from urllib.parse import quote
|
||||
|
||||
import nio
|
||||
|
@ -784,7 +784,6 @@ class NioCallbacks:
|
|||
|
||||
async def onPushRulesEvent(self, ev: nio.PushRulesEvent) -> None:
|
||||
model = self.models[self.user_id, "pushrules"]
|
||||
model.clear() # XXX
|
||||
|
||||
kinds: Dict[PushRuleKind, List[nio.PushRule]] = {
|
||||
PushRuleKind.Override: ev.global_rules.override,
|
||||
|
@ -794,6 +793,22 @@ class NioCallbacks:
|
|||
PushRuleKind.Underride: ev.global_rules.underride,
|
||||
}
|
||||
|
||||
# Remove from model rules that are now deleted.
|
||||
# MUST be done first to avoid having rules sharing the same kind+order.
|
||||
|
||||
new_keys: Set[Tuple[str, str]] = set()
|
||||
|
||||
for kind, rules in kinds.items():
|
||||
for rule in rules:
|
||||
new_keys.add((kind.value, rule.id))
|
||||
|
||||
with model.batch_remove():
|
||||
for key in tuple(model):
|
||||
if key not in new_keys:
|
||||
del model[key]
|
||||
|
||||
# Then, add new rules/modify changed existing ones
|
||||
|
||||
for kind, rules in kinds.items():
|
||||
for order, rule in enumerate(rules):
|
||||
tweaks = {
|
||||
|
|
Loading…
Reference in New Issue
Block a user