/ __init__.py
__init__.py
 1  from anki.hooks import wrap
 2  from aqt import mw
 3  from aqt.operations import CollectionOp
 4  from aqt.reviewer import Reviewer
 5  from aqt.utils import tooltip
 6  from typing import Callable
 7  
 8  def notify_user(cid, is_verbose):
 9      if is_verbose:
10          tooltip("Skipped card #" + str(cid))
11          print("DEBUG: Skipped card #" + str(cid))
12  
13  def process_review_card(self: Reviewer, _old: Callable) -> None:
14      if self.card.type != 0:
15          return _old(self)
16  
17      if not mw or not mw.col or not mw.col.db:
18          raise Exception("Incubator: Anki is not initialized properly")
19      config = mw.addonManager.getConfig(__name__)
20  
21      blocking_siblings = mw.col.find_cards(query=f"\
22          nid:{self.card.nid}\
23          (rated:{config['past_gap']+1} OR prop:due<={config['future_gap']})\
24          ")
25      if blocking_siblings:
26          CollectionOp(mw, lambda col: col.sched.bury_cards([self.card.id])).success(
27              lambda _: notify_user(self.card.id, config['verbose'])
28          ).run_in_background()
29      else:
30          _old(self)
31  
32  Reviewer._showQuestion = wrap(Reviewer._showQuestion, process_review_card, "around")  # type: ignore