forked from open-spaced-repetition/fsrs4anki-helper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreset.py
59 lines (50 loc) · 2.01 KB
/
reset.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
from .utils import *
def reset(did):
custom_scheduler = check_fsrs4anki(mw.col.all_config())
if custom_scheduler is None:
return
version = get_version(custom_scheduler)
if version[0] < 3:
showWarning("Require FSRS4Anki version >= 3.0.0")
return
deck_parameters = get_deck_parameters(custom_scheduler)
if deck_parameters is None:
return
if not askUser("""Undo all changes made by rescheduling.
It will set the interval and due of all cards to the original value set when ratings (not the previous rescheduling).
Are you sure?"""):
return
skip_decks = get_skip_decks(custom_scheduler) if version[1] >= 12 else []
mw.checkpoint("Resetting")
mw.progress.start()
cnt = 0
reseted_cards = set()
decks = sorted(mw.col.decks.all(), key=lambda item: item['name'], reverse=True)
for deck in decks:
if any([deck['name'].startswith(i) for i in skip_decks]):
reseted_cards = reseted_cards.union(mw.col.find_cards(f"\"deck:{deck['name']}\" \"is:review\"".replace('\\', '\\\\')))
continue
if did is not None:
deck_name = mw.col.decks.get(did)['name']
if not deck['name'].startswith(deck_name):
continue
for cid in mw.col.find_cards(f"\"deck:{deck['name']}\" \"is:review\" -\"is:learn\" -\"is:suspended\"".replace('\\', '\\\\')):
if cid not in reseted_cards:
reseted_cards.add(cid)
else:
continue
card = mw.col.get_card(cid)
if card.custom_data == '':
continue
revlogs = filter_revlogs(mw.col.card_stats_data(cid).revlog)
if len(revlogs) == 0:
continue
reset_ivl_and_due(cid, revlogs)
card = mw.col.get_card(cid)
card.custom_data = json.dumps({})
card.flush()
cnt += 1
mw.progress.finish()
mw.col.reset()
mw.reset()
tooltip(f"""{cnt} cards reseted.""")