Merge pull request #945 from RumovZ/dyndeck-search

Normalize dyndeck search and handle exception
This commit is contained in:
Damien Elmes 2021-01-26 09:24:56 +10:00 committed by GitHub
commit 0a0de2ce7b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 17 deletions

View file

@ -10,8 +10,6 @@ from dataclasses import dataclass
from operator import itemgetter from operator import itemgetter
from typing import List, Sequence, Tuple, cast from typing import List, Sequence, Tuple, cast
from markdown import markdown
import aqt import aqt
import aqt.forms import aqt.forms
from anki.cards import Card from anki.cards import Card
@ -64,6 +62,7 @@ from aqt.utils import (
saveSplitter, saveSplitter,
saveState, saveState,
shortcut, shortcut,
show_invalid_search_error,
showInfo, showInfo,
showWarning, showWarning,
tooltip, tooltip,
@ -91,14 +90,6 @@ class SearchContext:
card_ids: Optional[Sequence[int]] = None card_ids: Optional[Sequence[int]] = None
def show_invalid_search_error(err: Exception):
"Render search errors in markdown, then display a warning."
text = str(err)
if isinstance(err, InvalidInput):
text = markdown(text)
showWarning(text)
# Data model # Data model
########################################################################## ##########################################################################

View file

@ -5,6 +5,7 @@ from typing import List, Optional
import aqt import aqt
from anki.lang import without_unicode_isolation from anki.lang import without_unicode_isolation
from anki.rsbackend import InvalidInput
from aqt.qt import * from aqt.qt import *
from aqt.utils import ( from aqt.utils import (
TR, TR,
@ -13,6 +14,7 @@ from aqt.utils import (
openHelp, openHelp,
restoreGeom, restoreGeom,
saveGeom, saveGeom,
show_invalid_search_error,
showWarning, showWarning,
tr, tr,
) )
@ -114,25 +116,27 @@ class DeckConf(QDialog):
else: else:
d["delays"] = None d["delays"] = None
terms = [[f.search.text(), f.limit.value(), f.order.currentIndex()]] search = self.mw.col.backend.normalize_search(f.search.text())
terms = [[search, f.limit.value(), f.order.currentIndex()]]
if f.secondFilter.isChecked(): if f.secondFilter.isChecked():
terms.append( search_2 = self.mw.col.backend.normalize_search(f.search_2.text())
[f.search_2.text(), f.limit_2.value(), f.order_2.currentIndex()] terms.append([search_2, f.limit_2.value(), f.order_2.currentIndex()])
)
d["terms"] = terms d["terms"] = terms
d["previewDelay"] = f.previewDelay.value() d["previewDelay"] = f.previewDelay.value()
self.mw.col.decks.save(d) self.mw.col.decks.save(d)
return True
def reject(self): def reject(self):
self.ok = False self.ok = False
QDialog.reject(self) QDialog.reject(self)
def accept(self): def accept(self):
if not self.saveConf(): try:
self.saveConf()
except InvalidInput as err:
show_invalid_search_error(err)
return return
if not self.mw.col.sched.rebuild_filtered_deck(self.deck["id"]): if not self.mw.col.sched.rebuild_filtered_deck(self.deck["id"]):
if askUser(tr(TR.DECKS_THE_PROVIDED_SEARCH_DID_NOT_MATCH)): if askUser(tr(TR.DECKS_THE_PROVIDED_SEARCH_DID_NOT_MATCH)):

View file

@ -9,9 +9,11 @@ import subprocess
import sys import sys
from typing import TYPE_CHECKING, Any, List, Optional, Union, cast from typing import TYPE_CHECKING, Any, List, Optional, Union, cast
from markdown import markdown
import anki import anki
import aqt import aqt
from anki.rsbackend import TR # pylint: disable=unused-import from anki.rsbackend import TR, InvalidInput # pylint: disable=unused-import
from anki.utils import invalidFilename, isMac, isWin, noBundledLibs, versionWithBuild from anki.utils import invalidFilename, isMac, isWin, noBundledLibs, versionWithBuild
from aqt.qt import * from aqt.qt import *
from aqt.theme import theme_manager from aqt.theme import theme_manager
@ -67,6 +69,14 @@ def showCritical(text, parent=None, help="", title="Anki", textFormat=None):
return showInfo(text, parent, help, "critical", title=title, textFormat=textFormat) return showInfo(text, parent, help, "critical", title=title, textFormat=textFormat)
def show_invalid_search_error(err: Exception):
"Render search errors in markdown, then display a warning."
text = str(err)
if isinstance(err, InvalidInput):
text = markdown(text)
showWarning(text)
def showInfo( def showInfo(
text, text,
parent=False, parent=False,