diff --git a/qt/.pylintrc b/qt/.pylintrc index 608b97226..557c113be 100644 --- a/qt/.pylintrc +++ b/qt/.pylintrc @@ -5,6 +5,7 @@ ignore = forms,hooks_gen.py [TYPECHECK] ignored-modules=win32file,pywintypes,socket,win32pipe,winrt,pyaudio +ignored-classes=FilterToSearchIn [REPORTS] output-format=colorized diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index 8de44a1c0..9d5f434cf 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -1015,13 +1015,31 @@ QTableView {{ gridline-color: {grid} }} subm.addChild( self._simpleFilters( ( - (tr(TR.ACTIONS_NEW), SearchTerm(new=True)), - (tr(TR.SCHEDULING_LEARNING), SearchTerm(learn=True)), - (tr(TR.SCHEDULING_REVIEW), SearchTerm(review=True)), - (tr(TR.FILTERING_IS_DUE), SearchTerm(due=True)), + ( + tr(TR.ACTIONS_NEW), + SearchTerm(card_state=SearchTerm.CardState.NEW), + ), + ( + tr(TR.SCHEDULING_LEARNING), + SearchTerm(card_state=SearchTerm.CardState.LEARN), + ), + ( + tr(TR.SCHEDULING_REVIEW), + SearchTerm(card_state=SearchTerm.CardState.REVIEW), + ), + ( + tr(TR.FILTERING_IS_DUE), + SearchTerm(card_state=SearchTerm.CardState.DUE), + ), None, - (tr(TR.BROWSING_SUSPENDED), SearchTerm(suspended=True)), - (tr(TR.BROWSING_BURIED), SearchTerm(buried=True)), + ( + tr(TR.BROWSING_SUSPENDED), + SearchTerm(card_state=SearchTerm.CardState.SUSPENDED), + ), + ( + tr(TR.BROWSING_BURIED), + SearchTerm(card_state=SearchTerm.CardState.BURIED), + ), None, (tr(TR.ACTIONS_RED_FLAG), SearchTerm(flag=Flag.RED)), (tr(TR.ACTIONS_ORANGE_FLAG), SearchTerm(flag=Flag.ORANGE)), diff --git a/qt/aqt/customstudy.py b/qt/aqt/customstudy.py index 58198bf77..4610f9910 100644 --- a/qt/aqt/customstudy.py +++ b/qt/aqt/customstudy.py @@ -175,23 +175,28 @@ class CustomStudy(QDialog): dyn["resched"] = True elif i == RADIO_PREVIEW: search = self.mw.col.build_search_string( - SearchTerm(new=True), SearchTerm(added_in_days=spin) + SearchTerm(card_state=SearchTerm.CardState.NEW), + SearchTerm(added_in_days=spin), ) dyn["terms"][0] = [search, DYN_MAX_SIZE, DYN_OLDEST] dyn["resched"] = False elif i == RADIO_CRAM: type = f.cardType.currentRow() if type == TYPE_NEW: - terms = self.mw.col.build_search_string(SearchTerm(new=True)) + terms = self.mw.col.build_search_string( + SearchTerm(card_state=SearchTerm.CardState.NEW) + ) ord = DYN_ADDED dyn["resched"] = True elif type == TYPE_DUE: - terms = self.mw.col.build_search_string(SearchTerm(due=True)) + terms = self.mw.col.build_search_string( + SearchTerm(card_state=SearchTerm.CardState.DUE) + ) ord = DYN_DUE dyn["resched"] = True elif type == TYPE_REVIEW: terms = self.mw.col.build_search_string( - SearchTerm(new=True), negate=True + SearchTerm(card_state=SearchTerm.CardState.NEW), negate=True ) ord = DYN_RANDOM dyn["resched"] = True diff --git a/qt/aqt/dyndeckconf.py b/qt/aqt/dyndeckconf.py index 1a0242835..1ea32670f 100644 --- a/qt/aqt/dyndeckconf.py +++ b/qt/aqt/dyndeckconf.py @@ -47,9 +47,13 @@ class DeckConf(QDialog): self.initialSetup() self.loadConf() if search: - search = self.mw.col.build_search_string(search, SearchTerm(due=True)) + search = self.mw.col.build_search_string( + search, SearchTerm(card_state=SearchTerm.CardState.DUE) + ) self.form.search.setText(search) - search_2 = self.mw.col.build_search_string(search, SearchTerm(new=True)) + search_2 = self.mw.col.build_search_string( + search, SearchTerm(card_state=SearchTerm.CardState.NEW) + ) self.form.search_2.setText(search_2) self.form.search.selectAll() diff --git a/rslib/backend.proto b/rslib/backend.proto index 90b11dded..0bb4b5d97 100644 --- a/rslib/backend.proto +++ b/rslib/backend.proto @@ -789,6 +789,14 @@ message FilterToSearchIn { uint32 days = 1; Rating rating = 2; } + enum CardState { + NEW = 0; + LEARN = 1; + REVIEW = 2; + DUE = 3; + SUSPENDED = 4; + BURIED = 5; + } oneof filter { string tag = 1; string deck = 2; @@ -803,12 +811,7 @@ message FilterToSearchIn { bool whole_collection = 11; bool current_deck = 12; Flag flag = 13; - bool new = 14; - bool learn = 15; - bool review = 16; - bool due = 17; - bool suspended = 18; - bool buried = 19; + CardState card_state = 14; } } diff --git a/rslib/src/backend/mod.rs b/rslib/src/backend/mod.rs index 297c649c6..f536f431e 100644 --- a/rslib/src/backend/mod.rs +++ b/rslib/src/backend/mod.rs @@ -328,12 +328,11 @@ impl From for Node<'_> { }), Filter::WholeCollection(_) => Node::Search(SearchNode::WholeCollection), Filter::CurrentDeck(_) => Node::Search(SearchNode::Deck("current".into())), - Filter::New(_) => Node::Search(SearchNode::State(StateKind::New)), - Filter::Learn(_) => Node::Search(SearchNode::State(StateKind::Learning)), - Filter::Review(_) => Node::Search(SearchNode::State(StateKind::Review)), - Filter::Due(_) => Node::Search(SearchNode::State(StateKind::Due)), - Filter::Suspended(_) => Node::Search(SearchNode::State(StateKind::Suspended)), - Filter::Buried(_) => Node::Search(SearchNode::State(StateKind::Buried)), + Filter::CardState(state) => Node::Search(SearchNode::State( + pb::filter_to_search_in::CardState::from_i32(state) + .unwrap_or_default() + .into(), + )), Filter::Flag(flag) => match Flag::from_i32(flag).unwrap_or(Flag::Any) { Flag::Without => Node::Search(SearchNode::Flag(0)), Flag::Any => Node::Not(Box::new(Node::Search(SearchNode::Flag(0)))), @@ -368,6 +367,19 @@ impl From for EaseKind { } } +impl From for StateKind { + fn from(k: pb::filter_to_search_in::CardState) -> Self { + match k { + pb::filter_to_search_in::CardState::New => StateKind::New, + pb::filter_to_search_in::CardState::Learn => StateKind::Learning, + pb::filter_to_search_in::CardState::Review => StateKind::Review, + pb::filter_to_search_in::CardState::Due => StateKind::Due, + pb::filter_to_search_in::CardState::Suspended => StateKind::Suspended, + pb::filter_to_search_in::CardState::Buried => StateKind::Buried, + } + } +} + impl BackendService for Backend { fn latest_progress(&self, _input: Empty) -> BackendResult { let progress = self.progress_state.lock().unwrap().last_progress;