Henrik Giesel
1e74e79a1f
Coerce resched:days as well
2021-01-11 17:25:42 +01:00
Henrik Giesel
00acdd3bf7
Satisfy rslib unit tests
2021-01-11 17:18:40 +01:00
Henrik Giesel
fc52046808
Remove EaseKind impl in favor of transforming to sql in function
2021-01-11 17:10:17 +01:00
Henrik Giesel
fe15df1c4f
Introduce "resched:n" instead of 0 and a flag for "rated"
2021-01-11 16:40:30 +01:00
Henrik Giesel
08e6f5982e
Modify default behavior of rated searches to exclude manual
2021-01-11 16:40:30 +01:00
Damien Elmes
4b98ce0145
Merge pull request #917 from hgiesel/querynozero3
...
Coerce added/edited:0 to 1, Constrain rated:n to 1-365
2021-01-11 16:24:12 +10:00
Henrik Giesel
5b1bf8a10e
Fix formatting
2021-01-10 16:38:20 +01:00
Henrik Giesel
40ab80f70e
Add a few rslib unit tests
2021-01-10 16:29:10 +01:00
Henrik Giesel
027677ac6d
Remove coercion in write_rated
2021-01-10 16:23:53 +01:00
Henrik Giesel
d7513fd33d
Coerce added/edited:0 to 1, constrain rated:n to 1 <= 365
2021-01-10 16:16:17 +01:00
Damien Elmes
cbd4439f30
Merge pull request #913 from RumovZ/fix-write-template
...
Fix ordinal case in write_template
2021-01-10 08:58:00 +10:00
RumovZ
0bf7ad0951
Merge branch 'master' into backend-filters
...
Adapt new formatting.
2021-01-09 19:03:43 +01:00
RumovZ
4911757177
Fix ordinal case in write_template
...
Internal card ordinals start at 0, so add 1 again when writing a
template search string from a parsed ordinal.
2021-01-09 17:30:12 +01:00
abdo
a30a2638ce
Hierarchical tags
2021-01-09 17:10:13 +03:00
RumovZ
455b693623
Provide filter searches through backend
2021-01-09 10:50:08 +01:00
Damien Elmes
a055663046
reformat .sql files
2021-01-09 14:08:55 +10:00
Damien Elmes
4b9e5f425b
Merge pull request #904 from hgiesel/propdue
...
Streamlining `is:due`, `prop:due`, and the FutureDue graph
2021-01-08 16:34:53 +10:00
Henrik Giesel
66da8549cd
Add comment about integer division
2021-01-07 20:10:25 +01:00
Henrik Giesel
6f9adbe8fd
Restate rslib unit test
2021-01-07 19:56:36 +01:00
Henrik Giesel
8fcf88e606
Search for Learn and PreviewRepeat cards when using prop:due
2021-01-07 19:01:10 +01:00
Henrik Giesel
0d02b1f2f0
Include PreviewRepeat cards in is:due
2021-01-07 17:24:10 +01:00
RumovZ
991a3c1596
Add native enum for concatenate_search's separator
2021-01-07 12:50:57 +01:00
RumovZ
b8f7bb8807
Add Position in PropertyKind match of writer.rs
2021-01-06 23:29:09 +01:00
RumovZ
ac4d254793
Merge branch 'master' of https://github.com/ankitects/anki into norm-search
2021-01-06 20:57:24 +01:00
RumovZ
0b1eec9cd8
Add tests for writer.rs
...
Also minor adjustments to concatenate_searches.
2021-01-06 19:39:34 +01:00
RumovZ
1c257047b6
Implement replace_search_term
2021-01-06 14:03:43 +01:00
RumovZ
5a9e905b22
Implement concatenate_searches
...
Fix minor stuff in writer.rs.
2021-01-06 14:00:47 +01:00
RumovZ
576ffc2b0a
Implement negate_search
2021-01-06 13:57:35 +01:00
Henrik Giesel
453dad18fe
Change meaning of "is:learn" to filter on type, not queue
2021-01-05 17:36:55 +01:00
abdo
85a1c732db
Rename prop:order to prop:pos
2021-01-02 13:35:10 +03:00
abdo
ab8736b37f
Support prop:order to search for new cards by order
2021-01-01 04:36:51 +03:00
Damien Elmes
5a87175127
fix clippy error in unit test
2020-12-31 09:48:05 +10:00
RumovZ
6ad500db55
Make function names more explicit and add docs
2020-12-29 11:18:49 +01:00
RumovZ
6a2f1fc6aa
Make normalized search syntax more explicit
...
Also fix a bug with NoCombining and WordBoundary searches.
2020-12-29 11:06:53 +01:00
RumovZ
54964c5fa6
Don't escape isolated -
2020-12-22 11:52:17 +01:00
RumovZ
08c77107a0
Fix format and tests
2020-12-22 11:32:53 +01:00
RumovZ
b7d49d26d2
Expose search writer
2020-12-22 11:06:55 +01:00
RumovZ
37c4ac6524
Add search writer
2020-12-22 11:04:38 +01:00
cecini
77a94c8a45
Update rslib dep nom
2020-12-15 08:19:52 +00:00
Damien Elmes
ae742417a1
fix filtered decks not honoring sort order
...
https://forums.ankiweb.net/t/2-1-36-filtered-decks-bug/5649/
2020-12-09 22:50:49 +10:00
Damien Elmes
00f827f976
fix duplicate search not checking first field
...
Thanks to abdo for the initial solution. Closes #838
2020-11-30 09:27:10 +10:00
RumovZ
6c3c617b64
Comment fix
2020-11-27 22:12:36 +01:00
RumovZ
59bbbd53b8
Revert implementation of r: prefix
2020-11-27 22:10:37 +01:00
Damien Elmes
775dae874d
fix new Clippy lints
2020-11-25 09:12:19 +10:00
Damien Elmes
29b3ee13e8
fix clippy lints
2020-11-24 20:13:05 +10:00
RumovZ
a6fe08f662
Revert changes to normalisation handling
...
Handle norm calls individually in write_search_node_to_sql again.
2020-11-18 23:46:27 +01:00
RumovZ
6290e09b89
Implement the prefix r: to search for raw input
2020-11-18 22:26:51 +01:00
RumovZ
f05e70a03e
Merge branch 'master' into rework-search-parser
...
Conflicts:
rslib/src/search/sqlwriter.rs
2020-11-18 09:04:04 +01:00
RumovZ
add3fea6c3
Make - escapable
...
Treat unescaped - as before but make it escapable with \ to distinguish
the literal from the negator.
2020-11-17 18:38:27 +01:00
RumovZ
64bf14f1e9
Split unescaping between parser and writer
...
* Unescape wildcards in writer instead of parser.
* Move text conversion functions to text.rs.
* Implicitly norm when converting text.
* Revert to using collection when comparing tags but add escape support.
2020-11-17 12:49:37 +01:00
abdo
35bfd20240
Make dupe search operate on non-stripped text
...
See https://github.com/ankitects/anki/pull/822/
2020-11-16 04:01:04 +03:00
RumovZ
c4bea9e3c0
Use enforced re to parse deck
...
Fix write_deck not recognising escaped deck name separators:
\:\: -> ::
2020-11-15 21:32:36 +01:00
RumovZ
065d9e939b
Annotate RegEx for invalid-escape check
2020-11-15 14:22:16 +01:00
RumovZ
e1ddc3d63a
Extend tests for new search parsing
...
(Also fix indentation)
2020-11-15 12:00:20 +01:00
RumovZ
6d4d1369d4
Fix escape check for escaped backslash
2020-11-15 11:57:11 +01:00
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