RumovZ
2e54817870
Move whitespace check for tags from to sqlwriter
...
Instead of not parsing a tag containing whitespace, check for spaces
when writing sql and if there are any, explicitly match nothing.
2020-11-15 11:54:21 +01:00
RumovZ
022efd5956
Always use regex for tag search
...
Don't distinguish between the glob and no-glob cases when comparing
tags but always use regexp. Thus, avoid problems with SQL wildcards in
registered tags.
2020-11-15 09:52:00 +01:00
RumovZ
d65b1f96f7
Fix tests for new search parsing (and reformat)
2020-11-14 19:13:09 +01:00
RumovZ
59f0010783
Fix whitespace in write_tag and parser/whitespac0
2020-11-14 19:10:56 +01:00
RumovZ
baf3dd9dde
For deck searches, unescape quotes only
...
For now, revert to the old handling of deck names using text_to_re from
text.rs and have parser.rs only unescape quotes.
2020-11-14 19:06:37 +01:00
RumovZ
c27175238c
Fix 'escaped' parser for empty string
...
Fix a bug where 'escaped' parsers (nom) accepted the empty
string by wrapping them in 'verify' parsers.
2020-11-14 18:28:24 +01:00
RumovZ
e09486d088
Fix bugs and inconsistencies in the search parser
2020-11-12 17:27:50 +01:00
Andreas Reis
81d6d21ae3
cleanup / renames
...
・ soundRegexps → sound_regexps
・ htmlRegexps → html_media_regexps
・ HTML_TAGS → HTML_MEDIA_TAGS
・ escapeImages → escape_media_filenames + alias
・ strip_html_preserving_image_filenames → strip_html_preserving_media_filenames
2020-11-10 14:53:04 +01:00
Damien Elmes
791894d2d0
fix new clippy lints
2020-10-09 21:35:53 +10:00
Damien Elmes
61bbe6a604
fix * handling in unqualifed text as well
...
https://forums.ankiweb.net/t/anki-2-1-desktop-searching-with-only-when-limited-to-a-field/3789/4
2020-09-29 21:18:19 +10:00
Damien Elmes
2e7c71b415
fix escaping of * in field search
...
mentioned in
https://github.com/ankitects/anki/pull/769
2020-09-27 16:04:08 +10:00
Damien Elmes
4d66bafc51
stop is:due gathering learning cards that are not due yet
...
https://forums.ankiweb.net/t/how-to-avoid-rebuilding-filtered-decks-to-skip-learning-cards-steps/3551/
2020-09-21 11:41:54 +10:00
Damien Elmes
f32d773e25
set_deck()
2020-09-03 17:42:46 +10:00
Damien Elmes
f7d4bf8489
support did:[deck id] search
2020-09-03 16:43:22 +10:00
Damien Elmes
7c169daa95
move card sorting and resetting to backend
2020-09-03 15:54:15 +10:00
Damien Elmes
396081d329
move filtered deck empty/fill to backend
...
emptying of individual card ids still to be done
2020-09-02 17:56:23 +10:00
Damien Elmes
988b3c00c1
move unbury/unsuspend routines into backend
2020-09-01 10:24:38 +10:00
Damien Elmes
4894025cfc
add separate sched/user bury searches, and fix bury enums
2020-09-01 10:24:38 +10:00
Damien Elmes
b9f6bde2dc
catch leading/trailing boolean operators
...
https://forums.ankiweb.net/t/is-it-only-me-anki-giving-corrupt-collection-error/2424/20
2020-08-27 09:59:29 +10:00
Damien Elmes
cb821a9e3c
fix globs not working in bulk tag add/remove
2020-08-17 18:14:00 +10:00
Damien Elmes
3da7884e19
reject double comma in id list
...
https://forums.ankiweb.net/t/anki-2-1-29-and-below-2-small-bugs/1496
2020-07-29 13:05:34 +10:00
Damien Elmes
d35bc85ead
is:review should include relearning cards
...
https://forums.ankiweb.net/t/anki-2-1-28-beta/629/36
This issue appears to have existed since the V2 scheduler was
introduced - the old Python search code was ignoring Relearn as well.
2020-07-09 11:07:50 +10:00
Damien Elmes
8cfafdbc32
supported edited:n
...
https://forums.ankiweb.net/t/feature-request-advanced-broswer-search-by-edited/268
2020-07-01 10:17:57 +10:00
Damien Elmes
06d9f64dea
lint fixes
2020-06-29 15:53:56 +10:00
Damien Elmes
4be8e7923a
fix partially quoted text not handling escaped quotes
...
https://forums.ankiweb.net/t/how-to-search-for-cards-containing-quotes/500/10
2020-06-29 15:48:01 +10:00
Damien Elmes
4d88b6521d
cards added graph
2020-06-29 15:48:01 +10:00
Damien Elmes
1e9901e9bd
experiment with exposing raw card/revlog data to frontend
2020-06-29 15:48:00 +10:00
Damien Elmes
6d7be475e6
catch invalid regex in search
...
https://github.com/ankitects/anki/pull/652
2020-06-09 11:46:07 +10:00
Damien Elmes
c78e8425aa
automatically omit notes or cards table when possible
2020-05-19 11:27:02 +10:00
Damien Elmes
c77bc74a2b
rename SortMode arg to match enum
2020-05-12 21:13:34 +10:00
Damien Elmes
0a87b1ef2c
support disabling unicode normalization in notes
2020-05-12 21:13:34 +10:00
Damien Elmes
7ef72aba04
use the backend for the deck due tree
...
- approx 3x faster on a large test deck
- counts are no longer capped to 1000 in the tree
2020-05-12 21:13:33 +10:00
Damien Elmes
46e0469991
rework aux table sorting
...
Instead of inserting text into the aux table and sorting on the fly
(which does a binary sort), we insert the ids in unicase-sorted order,
and then sort based on the automatically assigned rowids - giving
us faster sorts, and proper unicase folding.
2020-05-12 21:13:33 +10:00
Damien Elmes
c727a9e3f1
fix case sensitivity of notetype/template searches
2020-05-12 21:13:33 +10:00
Damien Elmes
c9db36bc82
update searching code to use decks table
2020-05-12 21:13:33 +10:00
Damien Elmes
24ef0cc6f1
add separate decks table, and start on moving deck handling to Rust
...
The Python tests are passing, but there are still a number of issues
to work through, and the table/protobuf schema is not yet finalized.
2020-05-12 21:13:33 +10:00
Damien Elmes
d810ba5db9
template changes and card generation
...
Cloze cards are not yet supported, missing decks are not handled,
and more testing is still required.
2020-05-12 21:13:33 +10:00
Damien Elmes
0c8763edf3
cache notetypes
2020-05-12 21:13:33 +10:00
Damien Elmes
6e554e6585
add separate search_notes_only()
2020-05-12 21:13:33 +10:00
Damien Elmes
cbb76290c2
start work on field changes, and add search_cards to col
2020-05-12 21:13:33 +10:00
Damien Elmes
638e69af91
move note db code to storage
2020-05-12 21:13:33 +10:00
Damien Elmes
91767fc87b
native struct for NoteField
...
ord is made optional so we can keep track of changes in the future
2020-05-12 21:13:33 +10:00
Damien Elmes
9c41210cf4
use native struct for NoteType
2020-05-12 21:13:33 +10:00
Damien Elmes
96300f5858
migrate the schema11 usages to new structs/sql queries
2020-05-12 21:13:33 +10:00
Damien Elmes
4b39a8b727
move schema11 note type code into separate file
2020-05-12 21:13:33 +10:00
Damien Elmes
475478cec5
split note types into separate tables
...
- store the config in protobuf instead of json
- still loading+saving in bulk for now
- code using the schema11 structs needs to be migrated
2020-05-12 21:13:33 +10:00
Damien Elmes
36ac3244c2
fix a unit test
2020-05-08 17:27:41 +10:00
Damien Elmes
a1e7690f35
fix dupe search with included formatting
...
https://anki.tenderapp.com/discussions/ankidesktop/41286-2125-doesnt-show-duplicates
2020-05-08 15:26:45 +10:00
Damien Elmes
811bcda14c
support globbing chars inside word boundary search
2020-04-25 09:43:08 +10:00
Damien Elmes
2f8396a951
add w: shortcut for searching on word boundaries
2020-04-25 08:48:01 +10:00
Damien Elmes
0538d9b764
(de)serialize decks in backend
2020-04-09 12:41:59 +10:00
Damien Elmes
bca49bd054
load/save note types in backend
...
This allows us to normalize bad data, and is the first step towards
splitting note types into separate tables.
2020-04-08 10:05:07 +10:00
Damien Elmes
b5022ad354
store config in separate DB table
...
- mtime is tracked on each key individually, which will allow
merging of config changes when syncing in the future
- added col.(get|set|remove)_config()
- in order to support existing code that was mutating returned
values (eg col.conf["something"]["another"] = 5), the returned list/dict
will be automatically wrapped so that when the value is dropped, it
will save the mutated item back to the DB if it's changed. Code that
is fetching lists/dicts from the config like so:
col.conf["foo"]["bar"] = baz
col.setMod()
will continue to work in most case, but should be gradually updated to:
conf = col.get_config("foo")
conf["bar"] = baz
col.set_config("foo", conf)
2020-04-06 15:39:47 +10:00
Damien Elmes
9bce844df7
fix duplicates search
2020-04-04 17:38:35 +10:00
Damien Elmes
ac54f85840
update tag handling
...
- tag list stored in a separate DB table
- non-wildcard searches now do full unicode case folding
(eg tag:masse matches 'Maße')
- wildcard matches do simple unicode case folding
- some functions haven't been updated yet, so ascii folding will
continue to be used in some operations
2020-04-03 19:34:46 +10:00
Damien Elmes
001226050d
fix is:due search
2020-04-02 09:33:05 +10:00
Damien Elmes
cbbbced59e
cache timing_today in collection, update it when cutover reached
2020-03-29 12:26:24 +10:00
Damien Elmes
0451a4d4e0
drop separate RequestContext/StorageContext
2020-03-29 12:12:35 +10:00
Damien Elmes
1af3de6f70
DeckID, CardID
2020-03-26 15:10:40 +10:00
Damien Elmes
4150480709
NoteTypeID
2020-03-26 15:00:24 +10:00
Damien Elmes
7a67f73183
convert asc to desc instead of appending desc to the end of the order
...
as the latter doesn't work when sorting on more than one column
https://anki.tenderapp.com/discussions/beta-testing/1868-anki-2124-beta#comment_48174812
2020-03-23 19:53:57 +10:00
Damien Elmes
17f7a69830
handle trailing whitespace inside group
2020-03-22 18:52:44 +10:00
Damien Elmes
b8aaa8fba4
add enum for controlling sort order
...
eg col.find_cards("", order=BuiltinSortKind.CARD_DUE)
2020-03-22 12:59:24 +10:00
Damien Elmes
e22c3f6723
remove debugging line
2020-03-21 18:29:04 +10:00
Damien Elmes
3392fe8708
increase the rated search cap to 365, and allow searches for ease 0
...
An add-on appears to use ease 0 when rescheduling cards, and it may
make sense for Anki to do the same in the future as well.
2020-03-21 16:05:17 +10:00
Damien Elmes
cf50821d3b
add search that ignores combining chars
...
On a test of a ~40k card collection, the 'ignore accents' add-on
takes about 1150ms, and this code takes about 70ms.
2020-03-21 15:15:59 +10:00
Damien Elmes
32efd1789b
support regexp search in single field
2020-03-21 13:06:46 +10:00
Damien Elmes
d53c8f18ad
support wildcard in field*:val search
2020-03-21 12:45:25 +10:00
Damien Elmes
9dd5fef0a1
support regex searches
2020-03-21 12:00:48 +10:00
Damien Elmes
861139ea9e
support deck:"foo bar" style searches
2020-03-21 09:34:24 +10:00
Damien Elmes
0089f0149a
add note searching
2020-03-21 09:00:05 +10:00
Damien Elmes
a1853db3d8
fix formatting and unit test
2020-03-21 08:17:24 +10:00
Damien Elmes
e060e0daee
handle escaped tag searches and tag:* special case
2020-03-21 08:09:28 +10:00
Damien Elmes
798ea78a37
don't crash when card:0 passed in
2020-03-21 07:56:55 +10:00
Damien Elmes
25c4b8466e
handle * in single-field search
2020-03-21 07:56:32 +10:00
Damien Elmes
c173e4a175
fix ease search
2020-03-21 07:56:09 +10:00
Damien Elmes
23717089e9
add the ability to provide a custom sort order; use backend for find
2020-03-21 07:55:21 +10:00
Damien Elmes
46851d7aa9
support sorting on tags
...
I don't personally understand it, but some users seem to want it.
2020-03-20 21:15:23 +10:00
Damien Elmes
9810b584d5
support sorting on note type, card template and decks
2020-03-20 21:15:23 +10:00
Damien Elmes
a004563d19
search order
2020-03-20 21:15:23 +10:00
Damien Elmes
13f726fe8f
fix is:new/is:review
2020-03-20 21:15:23 +10:00
Damien Elmes
46cd7f23f5
added needs to use milliseconds
2020-03-20 21:15:23 +10:00
Damien Elmes
1e21fa325b
handle empty searches and leading/trailing whitespace
2020-03-20 21:15:23 +10:00
Damien Elmes
61391a760c
add remaining tests and fix some clippy lints
2020-03-20 21:15:23 +10:00
Damien Elmes
ed009e4fbb
fix rated and state searches
2020-03-20 21:15:23 +10:00
Damien Elmes
986f6c4437
fix tags, more tests
2020-03-20 21:15:23 +10:00
Damien Elmes
274e0ef315
fix cards
2020-03-20 21:15:23 +10:00
Damien Elmes
c3c56d7cf2
fix decks
2020-03-20 21:15:23 +10:00
Damien Elmes
518836e434
fix added
2020-03-20 21:15:23 +10:00
Damien Elmes
3fb5066152
fix qualified search
2020-03-20 21:15:23 +10:00
Damien Elmes
ac8534f4ee
fix escape handling, and handle sql wildcards
2020-03-20 21:15:23 +10:00
Damien Elmes
8f38ad8aa2
avoid extra sql binding in unqualified search
2020-03-20 21:15:23 +10:00
Damien Elmes
b087ebc845
start on search tests
2020-03-20 21:15:23 +10:00
Damien Elmes
f36857ae27
prototype of integration
...
no ordering yet, and no tests
2020-03-20 21:15:23 +10:00
Damien Elmes
6c469a96eb
finish the remaining searches
...
Searches that require multiple deck or note type lookups won't perform
very well at the moment - it either needs caching or to be split up
at the DB level.
Nothing tested yet.
2020-03-20 21:15:23 +10:00
Damien Elmes
a85646bb05
ctx->req
2020-03-20 21:15:23 +10:00
Damien Elmes
3227fc1b9b
add timing to search
2020-03-20 21:15:23 +10:00
Damien Elmes
1b2ebfcf6f
deck searching
...
A bit more complicated than it needs to be, as we don't have the
full deck manager infrastructure yet.
2020-03-20 21:15:23 +10:00
Damien Elmes
91270251bf
address some clippy lints
2020-03-20 21:15:23 +10:00
Damien Elmes
490e2b3cd3
move html stripping out of field_checksum into caller
2020-03-20 21:15:23 +10:00
Damien Elmes
eef158b20c
add field_at_index() sql func
2020-03-20 21:15:23 +10:00
Damien Elmes
445fa4876a
more searching work
2020-03-20 21:15:23 +10:00
Damien Elmes
4217031780
separate out template ordinal and name search
2020-03-20 21:15:23 +10:00
Damien Elmes
0b33131971
use .eq_ignore_ascii_case() to avoid allocating
2020-03-20 21:15:23 +10:00
Damien Elmes
819d432e12
start of searching sql
2020-03-20 21:15:23 +10:00
Damien Elmes
4014e054a9
ensure rated ease in range
2020-03-20 21:15:23 +10:00
Damien Elmes
28defd2b3c
ensure id list not empty
2020-03-20 21:15:23 +10:00
Damien Elmes
02af7b2ab1
decode search terms in parser
2020-03-20 21:15:23 +10:00
Damien Elmes
c12ebc6124
split up searches with a qualifier
2020-03-20 21:15:23 +10:00
Damien Elmes
43f21b8135
basic search parsing
2020-03-20 21:15:23 +10:00