-
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathrule.py
68 lines (54 loc) · 1.69 KB
/
rule.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from aqt import mw
from .action import applyActions, reverseAction
from .config import getUserOption
from .trigger import checkTrigger, reverseTrigger
"""True when applying holds. This ensure that a flush triggered by application of the rules does not trigger other rule application"""
currentlyApplying = False
def applyRuleToNote(note, rule):
"""Whether there was a change"""
global currentlyApplying
if currentlyApplying:
return
if rule is None:
return False
currentlyApplying = True
if not checkTrigger(note, rule["trigger"]):
currentlyApplying = False
return False
ret = applyActions(note, rule["action"])
currentlyApplying = False
return ret
def applyRulesToNote(note, rules):
"""Whether there was a change"""
someChange = False
for rule in rules:
someChange = applyRuleToNote(note, rule) or someChange
return someChange
def reverse(rule):
return {**rule,
"trigger": reverseTrigger(rule["trigger"]),
"action": reverseAction(rule["action"]),
}
def updateNote(note):
model = note.note_type()
modelName = model["name"]
rules = getUserOption("rules").get(modelName)
if rules is None:
return 0, {modelName}
iter = 0
while applyRulesToNote(note, rules):
iter += 1
if iter >= 10:
break
return iter, set()
def updateNid(nid):
note = mw.col.getNote(nid)
return updateNote(note)
def updateAll():
nbChanges = 0
missings = set()
for nid in mw.col.findNotes(""):
nbChangeNid, missingNid = updateNid(nid)
nbChanges += nbChangeNid
missings |= missingNid
return nbChanges, missings