Fix TypeError when deck list or overview refreshes during optimal retention

Caused by legacy code blocking the main thread.

https://forums.ankiweb.net/t/anki-23-10-beta/34912/79
This commit is contained in:
Damien Elmes 2023-09-30 15:38:11 +10:00
parent d16faacd0f
commit 0ef28853fd
3 changed files with 28 additions and 13 deletions

View file

@ -29,5 +29,5 @@ class DummyScheduler(SchedulerBaseWithLegacy):
def active_decks(self) -> list[DeckId]:
return []
def counts(self) -> list[int]:
return [0, 0, 0]
def counts(self) -> tuple[int, int, int]:
return (0, 0, 0)

View file

@ -146,12 +146,21 @@ class DeckBrowser:
def _renderPage(self, reuse: bool = False) -> None:
if not reuse:
self._dueTree = self.mw.col.sched.deck_due_tree()
def success(tree: DeckTreeNode) -> None:
self._dueTree = tree
self.__renderPage(None)
return
QueryOp(
parent=self.mw,
op=lambda col: col.sched.deck_due_tree(),
success=success,
).run_in_background()
else:
self.web.evalWithCallback("window.pageYOffset", self.__renderPage)
def __renderPage(self, offset: int) -> None:
def __renderPage(self, offset: int | None) -> None:
content = DeckBrowserContent(
tree=self._renderDeckTree(self._dueTree),
stats=self._renderStats(),

View file

@ -12,6 +12,7 @@ from anki.scheduler import UnburyDeck
from aqt import gui_hooks
from aqt.deckdescription import DeckDescriptionDialog
from aqt.deckoptions import display_options_for_deck
from aqt.operations import QueryOp
from aqt.operations.scheduling import (
empty_filtered_deck,
rebuild_filtered_deck,
@ -61,6 +62,7 @@ class Overview:
self.refresh()
def refresh(self) -> None:
def success(_counts: tuple) -> None:
self._refresh_needed = False
self.mw.col.reset()
self._renderPage()
@ -68,6 +70,10 @@ class Overview:
self.mw.web.setFocus()
gui_hooks.overview_did_refresh(self)
QueryOp(
parent=self.mw, op=lambda col: col.sched.counts(), success=success
).run_in_background()
def refresh_if_needed(self) -> None:
if self._refresh_needed:
self.refresh()