From 30f5269304810ef85d9d0254f1222fb13aadbe23 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Thu, 22 Apr 2021 10:55:32 +1000 Subject: [PATCH] hook new deck config screen up behind an env var --- qt/aqt/deckoptions.py | 46 ++++++++++++++++++++++++++++++++ qt/aqt/main.py | 7 ++++- qt/aqt/mediasrv.py | 4 ++- rslib/backend.proto | 1 + rslib/src/backend/ops.rs | 1 + rslib/src/ops.rs | 3 +-- rslib/src/undo/mod.rs | 2 +- ts/deckconfig/DailyLimits.svelte | 11 ++++---- ts/deckconfig/deckconfig.html | 4 ++- 9 files changed, 68 insertions(+), 11 deletions(-) create mode 100644 qt/aqt/deckoptions.py diff --git a/qt/aqt/deckoptions.py b/qt/aqt/deckoptions.py new file mode 100644 index 000000000..2499bdcc8 --- /dev/null +++ b/qt/aqt/deckoptions.py @@ -0,0 +1,46 @@ +# Copyright: Ankitects Pty Ltd and contributors +# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html + +from __future__ import annotations + +import aqt +from aqt.qt import * +from aqt.utils import addCloseShortcut, disable_help_button, restoreGeom, saveGeom +from aqt.webview import AnkiWebView + + +class DeckOptionsDialog(QDialog): + "The new deck configuration screen." + + TITLE = "deckOptions" + silentlyClose = True + + def __init__(self, mw: aqt.main.AnkiQt) -> None: + QDialog.__init__(self, mw, Qt.Window) + self.mw = mw + self._setup_ui() + self.show() + + def _setup_ui(self) -> None: + self.setWindowModality(Qt.ApplicationModal) + self.mw.garbage_collect_on_dialog_finish(self) + self.setMinimumWidth(400) + disable_help_button(self) + restoreGeom(self, self.TITLE) + addCloseShortcut(self) + + self.web = AnkiWebView(title=self.TITLE) + self.web.setVisible(False) + self.web.load_ts_page("deckconfig") + layout = QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.addWidget(self.web) + self.setLayout(layout) + + deck_id = self.mw.col.decks.get_current_id() + self.web.eval(f"anki.deckConfig(document.getElementById('main'), {deck_id});") + + def reject(self) -> None: + self.web = None + saveGeom(self, self.TITLE) + QDialog.reject(self) diff --git a/qt/aqt/main.py b/qt/aqt/main.py index ed9bdb9c1..74801e742 100644 --- a/qt/aqt/main.py +++ b/qt/aqt/main.py @@ -1172,7 +1172,12 @@ title="%s" %s>%s""" % ( if deck["dyn"]: aqt.dialogs.open("FilteredDeckConfigDialog", self, deck_id=deck["id"]) else: - aqt.deckconf.DeckConf(self, deck) + if os.getenv("NEW_DECKCONF"): + from aqt.deckoptions import DeckOptionsDialog + + DeckOptionsDialog(self) + else: + aqt.deckconf.DeckConf(self, deck) def onOverview(self) -> None: self.col.reset() diff --git a/qt/aqt/mediasrv.py b/qt/aqt/mediasrv.py index 9d7530afe..ab43c6f98 100644 --- a/qt/aqt/mediasrv.py +++ b/qt/aqt/mediasrv.py @@ -23,6 +23,7 @@ from anki import hooks from anki.collection import GraphPreferences, OpChanges from anki.decks import UpdateDeckConfigs from anki.utils import devMode, from_json_bytes +from aqt.deckoptions import DeckOptionsDialog from aqt.operations.deck import update_deck_configs from aqt.qt import * from aqt.utils import aqt_data_folder @@ -294,7 +295,8 @@ def update_deck_configs_request() -> bytes: input.ParseFromString(request.data) def on_success(changes: OpChanges) -> None: - print("done", changes) + if isinstance(window := aqt.mw.app.activeWindow(), DeckOptionsDialog): + window.reject() def handle_on_main() -> None: update_deck_configs(parent=aqt.mw, input=input).success( diff --git a/rslib/backend.proto b/rslib/backend.proto index b757385d9..bdf88b6af 100644 --- a/rslib/backend.proto +++ b/rslib/backend.proto @@ -1535,6 +1535,7 @@ message OpChanges { bool tag = 4; bool notetype = 5; bool config = 6; + bool deck_config = 11; bool browser_table = 7; bool browser_sidebar = 8; diff --git a/rslib/src/backend/ops.rs b/rslib/src/backend/ops.rs index 4bbda0a1a..c9c215f51 100644 --- a/rslib/src/backend/ops.rs +++ b/rslib/src/backend/ops.rs @@ -17,6 +17,7 @@ impl From for pb::OpChanges { tag: c.changes.tag, notetype: c.changes.notetype, config: c.changes.config, + deck_config: c.changes.deck_config, browser_table: c.requires_browser_table_redraw(), browser_sidebar: c.requires_browser_sidebar_redraw(), editor: c.requires_editor_redraw(), diff --git a/rslib/src/ops.rs b/rslib/src/ops.rs index e0e3c2b67..4e90735fa 100644 --- a/rslib/src/ops.rs +++ b/rslib/src/ops.rs @@ -86,8 +86,6 @@ pub struct StateChanges { pub notetype: bool, pub config: bool, pub deck_config: bool, - /// covers schema change (and last_sync in the future), but not mtime - pub collection: bool, } #[derive(Debug, Clone, Copy)] @@ -148,5 +146,6 @@ impl OpChanges { c.card || (c.deck && self.op != Op::ExpandCollapse) || (c.config && matches!(self.op, Op::SetCurrentDeck)) + || c.deck_config } } diff --git a/rslib/src/undo/mod.rs b/rslib/src/undo/mod.rs index 749151407..45d0ec43e 100644 --- a/rslib/src/undo/mod.rs +++ b/rslib/src/undo/mod.rs @@ -142,7 +142,7 @@ impl UndoManager { UndoableChange::Queue(_) => {} UndoableChange::Config(_) => changes.config = true, UndoableChange::DeckConfig(_) => changes.deck_config = true, - UndoableChange::Collection(_) => changes.collection = true, + UndoableChange::Collection(_) => {} } } diff --git a/ts/deckconfig/DailyLimits.svelte b/ts/deckconfig/DailyLimits.svelte index 3580914d2..7522a0174 100644 --- a/ts/deckconfig/DailyLimits.svelte +++ b/ts/deckconfig/DailyLimits.svelte @@ -17,10 +17,11 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html ? `Daily limit will be capped to parent limit of ${$parentLimits.newCards}.` : ""; - $: reviewsGreaterThanParent = - $config.reviewsPerDay > $parentLimits.reviews - ? `Daily limit will be capped to parent limit of ${$parentLimits.reviews}.` - : ""; + // with the v2 scheduler, this no longer applies + // $: reviewsGreaterThanParent = + // $config.reviewsPerDay > $parentLimits.reviews + // ? `Daily limit will be capped to parent limit of ${$parentLimits.reviews}.` + // : ""; $: reviewsTooLow = $config.newPerDay * 10 > $config.reviewsPerDay @@ -47,7 +48,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html label={tr.schedulingMaximumReviewsday()} subLabel="The maximum number of reviews cards to show in a day." min={0} - warnings={[reviewsTooLow, reviewsGreaterThanParent]} + warnings={[reviewsTooLow]} defaultValue={defaults.reviewsPerDay} bind:value={$config.reviewsPerDay} /> diff --git a/ts/deckconfig/deckconfig.html b/ts/deckconfig/deckconfig.html index 95957efd6..347a42ad8 100644 --- a/ts/deckconfig/deckconfig.html +++ b/ts/deckconfig/deckconfig.html @@ -13,7 +13,9 @@