-
Notifications
You must be signed in to change notification settings - Fork 5
/
reviewer_track_unseen.py
118 lines (90 loc) · 4.09 KB
/
reviewer_track_unseen.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# -*- coding: utf-8 -*-
"""
Copyright: Steve AW <steveawa@gmail.com>
License: GNU GPL, version 3 or later; http://www.gnu.org/copyleft/gpl.html
"""
from PyQt4.QtCore import SIGNAL
from anki.hooks import addHook, wrap
from anki.sched import Scheduler
from aqt.reviewer import Reviewer
__author__ = 'Steve'
def add_unseen_tags_to_selected(self):
#self is browser
selected_cids = self.selectedCards()
#self.mw.progress.start()
self.mw.checkpoint("Add Unseen Tags")
self.model.beginReset()
for cid in selected_cids:
unseen_card = self.col.getCard(cid)
unseen_note = unseen_card.note()
unseen_note.addTag("nsN")
unseen_note.addTag("ns%s" % unseen_card.ord)
unseen_note.flush()
self.model.endReset()
self.mw.requireReset()
#self.mw.progress.finish()
def remove_unseen_tags_from_selected(self):
#self is browser
#There is a chance this will miss some if card numbers have changed
selected_cids = self.selectedCards()
for cid in selected_cids:
unseen_card = self.col.getCard(cid)
unseen_note = unseen_card.note()
# unseen_note.delTag("nsN")
# unseen_note.delTag("ns%s" % unseen_card.ord)
# unseen_note.flush()
self._remove_unseen_tags_for_card_and_note(unseen_card, unseen_note)
def change_background_color(self):
#self is reviewer
#$("#f"+i).css("background", cols[i]
pot_unseen_card = self.card
pot_unseen_note = pot_unseen_card.note()
if pot_unseen_note.hasTag("nsN") or pot_unseen_note.hasTag("ns%s" % pot_unseen_card.ord):
#We have to remove this, and play nicely with other addons that may fiddle with background
self.web.eval('document.body.style.backgroundColor = "#DCDCFF"')
def wipe_background_for_nextCard(self):
#do this early enough so that any addon applying colour changes
#does it after
self.web.eval('document.body.style.backgroundColor = "#FFFFFF"')
def _remove_unseen_tags_for_card_and_note(pot_unseen_card, pot_unseen_note):
if pot_unseen_note.hasTag("nsN") or pot_unseen_note.hasTag("ns%s" % pot_unseen_card.ord):
pot_unseen_note.delTag("nsN")
pot_unseen_note.delTag("ns%s" % pot_unseen_card.ord)
pot_unseen_note.flush()
def _remove_unseen_tags(self):
pot_unseen_card = self.card
pot_unseen_note = pot_unseen_card.note()
_remove_unseen_tags_for_card_and_note(pot_unseen_card, pot_unseen_note)
def answer_card_removing_unseen_tags(self, ease):
#self is reviewer
#Keep these guards in place ... not sure why?
if self.mw.state != "review":
return
if self.state != "answer":
return
_remove_unseen_tags(self)
def suspend_cards_removing_unseen_tags(self, ids):
#self is Scheduler
for cid in ids:
sus_card = self.col.getCard(cid)
sus_note = sus_card.note()
_remove_unseen_tags_for_card_and_note(sus_card, sus_note)
def show_all_unseen_cards(self):
#self is browser
self.form.searchEdit.lineEdit().setText("tag:ns*")
self.onSearch()
def setup_browser_menu(browser):
unseen_menu = browser.form.menuEdit.addMenu("Unseen Card Tracking")
a = unseen_menu.addAction('Add Unseen ("ns*") Tags To Selected Cards')
browser.connect(a, SIGNAL("triggered()"), lambda b=browser: add_unseen_tags_to_selected(b))
a = unseen_menu.addAction('Remove Unseen ("ns*") Tags From Selected Cards')
browser.connect(a, SIGNAL("triggered()"), lambda b=browser: remove_unseen_tags_from_selected(b))
a = unseen_menu.addAction('Show All Unseen Cards')
browser.connect(a, SIGNAL("triggered()"), lambda b=browser: show_all_unseen_cards(b))
#todo: menu action to set search string to show all
addHook("browser.setupMenus", setup_browser_menu)
Reviewer._answerCard = wrap(Reviewer._answerCard, answer_card_removing_unseen_tags, "before")
Reviewer._showQuestion = wrap(Reviewer._showQuestion, change_background_color, "after")
Reviewer.nextCard = wrap(Reviewer.nextCard, wipe_background_for_nextCard, "before")
#By wrapping this, we cover suspending cards/notes etc
Scheduler.suspendCards = wrap(Scheduler.suspendCards, suspend_cards_removing_unseen_tags, "before")