mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00
Add helper functions for search strings in col
This commit is contained in:
parent
b15bb4289e
commit
51e1e82a9a
1 changed files with 74 additions and 1 deletions
|
@ -25,7 +25,20 @@ from anki.errors import AnkiError
|
||||||
from anki.media import MediaManager, media_paths_from_col_path
|
from anki.media import MediaManager, media_paths_from_col_path
|
||||||
from anki.models import ModelManager
|
from anki.models import ModelManager
|
||||||
from anki.notes import Note
|
from anki.notes import Note
|
||||||
from anki.rsbackend import TR, DBError, FormatTimeSpanContext, Progress, RustBackend, pb
|
from anki.rsbackend import ( # pylint: disable=unused-import
|
||||||
|
TR,
|
||||||
|
BackendNoteTypeID,
|
||||||
|
ConcatSeparator,
|
||||||
|
DBError,
|
||||||
|
DupeIn,
|
||||||
|
FilterToSearchIn,
|
||||||
|
FormatTimeSpanContext,
|
||||||
|
InvalidInput,
|
||||||
|
NamedFilter,
|
||||||
|
Progress,
|
||||||
|
RustBackend,
|
||||||
|
pb,
|
||||||
|
)
|
||||||
from anki.sched import Scheduler as V1Scheduler
|
from anki.sched import Scheduler as V1Scheduler
|
||||||
from anki.schedv2 import Scheduler as V2Scheduler
|
from anki.schedv2 import Scheduler as V2Scheduler
|
||||||
from anki.tags import TagManager
|
from anki.tags import TagManager
|
||||||
|
@ -467,6 +480,66 @@ class Collection:
|
||||||
findNotes = find_notes
|
findNotes = find_notes
|
||||||
findReplace = find_and_replace
|
findReplace = find_and_replace
|
||||||
|
|
||||||
|
# Search Strings
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
# Helper function for the backend's search string operations.
|
||||||
|
# Pass search strings as 'searches' to normalize.
|
||||||
|
# Pass multiple to concatenate (defaults to 'and').
|
||||||
|
# Pass 'negate=True' to negate the end result.
|
||||||
|
# May raise InvalidInput.
|
||||||
|
def search_string(
|
||||||
|
self,
|
||||||
|
*,
|
||||||
|
negate: bool = False,
|
||||||
|
concat_by_or: bool = False,
|
||||||
|
searches: Optional[List[str]] = None,
|
||||||
|
name: Optional["FilterToSearchIn.NamedFilterValue"] = None,
|
||||||
|
tag: Optional[str] = None,
|
||||||
|
deck: Optional[str] = None,
|
||||||
|
note: Optional[str] = None,
|
||||||
|
template: Optional[int] = None,
|
||||||
|
dupe: Optional[Tuple[int, str]] = None,
|
||||||
|
forgot_in: Optional[int] = None,
|
||||||
|
added_in: Optional[int] = None,
|
||||||
|
due_in: Optional[int] = None,
|
||||||
|
) -> str:
|
||||||
|
filters = searches or []
|
||||||
|
|
||||||
|
def append_filter(filter_in):
|
||||||
|
filters.append(self.backend.filter_to_search(filter_in))
|
||||||
|
|
||||||
|
if name:
|
||||||
|
append_filter(FilterToSearchIn(name=name))
|
||||||
|
if tag:
|
||||||
|
append_filter(FilterToSearchIn(tag=tag))
|
||||||
|
if deck:
|
||||||
|
append_filter(FilterToSearchIn(deck=deck))
|
||||||
|
if note:
|
||||||
|
append_filter(FilterToSearchIn(note=note))
|
||||||
|
if template:
|
||||||
|
append_filter(FilterToSearchIn(template=template))
|
||||||
|
if dupe:
|
||||||
|
dupe_in = DupeIn(mid=BackendNoteTypeID(ntid=dupe[0]), text=dupe[1])
|
||||||
|
append_filter(FilterToSearchIn(dupe=dupe_in))
|
||||||
|
if forgot_in:
|
||||||
|
append_filter(FilterToSearchIn(forgot_in=forgot_in))
|
||||||
|
if added_in:
|
||||||
|
append_filter(FilterToSearchIn(added_in=added_in))
|
||||||
|
if due_in:
|
||||||
|
append_filter(FilterToSearchIn(due_in=due_in))
|
||||||
|
if concat_by_or:
|
||||||
|
sep = ConcatSeparator.OR
|
||||||
|
else:
|
||||||
|
sep = ConcatSeparator.AND
|
||||||
|
search_string = self.backend.concatenate_searches(sep=sep, searches=filters)
|
||||||
|
if negate:
|
||||||
|
search_string = self.backend.negate_search(search_string)
|
||||||
|
return search_string
|
||||||
|
|
||||||
|
def replace_search_term(self, search: str, replacement: str) -> str:
|
||||||
|
return self.backend.replace_search_term(search=search, replacement=replacement)
|
||||||
|
|
||||||
# Config
|
# Config
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue