Commit graph

613 commits

Author SHA1 Message Date
Damien Elmes
d1cc4684d2 hook the empty cards code up to the GUI 2020-05-12 21:13:33 +10:00
Damien Elmes
d812853656 sort empty cards by notetype name 2020-05-12 21:13:33 +10:00
Damien Elmes
ed4c75c6c1 don't include non-empty notes in the list 2020-05-12 21:13:33 +10:00
Damien Elmes
c989e23012 handle negative due numbers when gathering existing cards 2020-05-12 21:13:33 +10:00
Damien Elmes
21d7df9473 empty card handling 2020-05-12 21:13:33 +10:00
Damien Elmes
4edeca6ed9 fix use counts not including unused note types 2020-05-12 21:13:33 +10:00
Damien Elmes
4cc070a240 note type removal 2020-05-12 21:13:33 +10:00
Damien Elmes
7106af61ff update template on field removals as well 2020-05-12 21:13:33 +10:00
Damien Elmes
3b07885911 handle changed sort field index 2020-05-12 21:13:33 +10:00
Damien Elmes
549f98340a update template when fields renamed 2020-05-12 21:13:33 +10:00
Damien Elmes
8dad5cc3ab switch to owned strings in ParsedTemplate
will make it easier to cache the parsed results in the future,
and handle field renames & other transformations
2020-05-12 21:13:33 +10:00
Damien Elmes
6578767c4e only compare to previous note type if it exists 2020-05-12 21:13:33 +10:00
Damien Elmes
b7bfe57de1 adjust sort index on save 2020-05-12 21:13:33 +10:00
Damien Elmes
c8cbc13bba start on exposing notes and individual note type methods
changes to note:

- add_note() now takes a provided deck id instead of looking it up
in the notetype
- note type use counts fetched using a single table scan
- make sure note type changes are persisted
- expose optionalness of ords in templates and fields json
2020-05-12 21:13:33 +10:00
Damien Elmes
f95fe72795 mod schema if field/templates changed
Instead of throwing an error if schema not marked as changed,
just mark it changed, as that way it can be included as part of
the same transaction.
2020-05-12 21:13:33 +10:00
Damien Elmes
eaecfca7d1 normal note types now generate a dummy card if required
In the cloze deletion case, we already created a dummy card 0 when
no cloze deletions were found. This change makes normal note types
behave the same way - if no cards would be generated, a dummy card
0 is added to allow the note to be added.

This also applies when modifying note types - it is now possible
to delete card templates even if some notes only use that template,
as a dummy card 0 will be generated for notes that end up with no
cards left.
2020-05-12 21:13:33 +10:00
Damien Elmes
db09122ec5 use default deck for new note types 2020-05-12 21:13:33 +10:00
Damien Elmes
9451d0e9ef cloze generation 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
3af6905ad0 fix infinite loop on unclosed {{/<% 2020-05-12 21:13:33 +10:00
Damien Elmes
0c8763edf3 cache notetypes 2020-05-12 21:13:33 +10:00
Damien Elmes
7ff6226a0e always fetch full notetype 2020-05-12 21:13:33 +10:00
Damien Elmes
d47e83c989 embed enum to avoid conflicts 2020-05-12 21:13:33 +10:00
Damien Elmes
6b8a45bcb6 more work towards note adding
Still a prototype at this stage - we'll likely want a caching layer
for note types, and I'm not sure of the merit of having fields in
a separate table, since they're almost always required.
2020-05-12 21:13:33 +10:00
Damien Elmes
da09c7781e handle legacy syntax in parser instead of modifying original template
Simplifies things for the caller, and ensures legacy handling doesn't
get accidentally forgotten
2020-05-12 21:13:33 +10:00
Damien Elmes
4a2256aecb the start of note adding, and note type changes 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
53fc3c2f9a move latex header and styling into separate files 2020-05-12 21:13:33 +10:00
Damien Elmes
3807dcacd5 native struct for CardTemplate 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
4566a35085 expose stock notetypes 2020-05-12 21:13:33 +10:00
Damien Elmes
65f12eeda2 add stock note types in backend 2020-05-12 21:13:33 +10:00
Damien Elmes
5e49ace907 add default note type translations to ftl 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
8a423e05fe ignore empty sound tags
https://github.com/ankitects/anki/pull/612
2020-05-12 20:53:50 +10:00
evandrocoan
49bb585338 Also bump rslib version on make_check
f2b1796e22
2020-05-11 13:29:12 -03:00
Damien Elmes
f2b1796e22 update crate version
make check was missing this
2020-05-11 20:41:16 +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
evandrocoan
d62787aa49 Fixed rspy check not being called
# Conflicts:
#	Makefile
2020-05-01 22:51:17 -03:00
Damien Elmes
2c102f87c4 update rslib version 2020-05-02 10:46:58 +10:00
Damien Elmes
4c0d80ceae tolerate decks with missing mtime exported by third party software 2020-05-02 10:18:08 +10:00
Damien Elmes
722df62452 fix some clippy lints 2020-05-02 08:55:27 +10:00
Damien Elmes
e2c57b54a2 reset due on load if outside i32 bounds
Some third party clients that create apkg files appear to be saving
a millisecond timestamp into this column. While this could also be
solved by increasing this field to a 64 bit number, some older clients
expect this column to be a 32 bit number.
2020-04-30 11:57:35 +10:00
Damien Elmes
f2876cbd42 preserve entities when stripping HTML for MathJax
https://anki.tenderapp.com/discussions/ankidesktop/40987-how-to-render-angled-brackets
2020-04-30 11:17:38 +10:00
Damien Elmes
65a9eaa418 expose clock hack via env var
closes #594
2020-04-30 09:33:02 +10:00
Damien Elmes
76d60430d9 report filename when unable to read data 2020-04-30 08:02:08 +10:00
Damien Elmes
07b9671012 don't throw an error when a file is greater than MAXPATH
https://anki.tenderapp.com/discussions/ankidesktop/40931-check-media-error
2020-04-30 08:01:45 +10:00
Damien Elmes
39070abb89 drop type answer requirement special case
While it makes no sense to have the typing box on the front without
another non-empty field, "the front of this card is empty" when
a typing box is on the template seems to be confusing some users, so
it is clearer to show them the box.
2020-04-29 21:29:16 +10:00
Damien Elmes
6d404f1999 AnkiDroid expects timer to be an integer
https://github.com/ankidroid/Anki-Android/issues/6089#issuecomment-621110598
2020-04-29 20:52:00 +10:00
evandrocoan
15deb17737 Added an warning that rslib/build.rs is automatically generated file 2020-04-29 01:21:49 -03:00
Damien Elmes
91248aa8cf bump version 2020-04-28 08:57:56 +10:00
evandrocoan
e85c48298c Fixed make clean rule not working on Windows 2020-04-26 03:02:02 -03: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
93152043e1 report the missing filename in media check
https://anki.tenderapp.com/discussions/ankidesktop/40578-check-media-error
2020-04-17 17:17:42 +10:00
Damien Elmes
e051d8ab75 older clients require 'separate' on filtered decks
the deckconf['new']['separate' property is unused, but older code
assumes filtered['separate'] exists, even though it doesn't do anything
with it

https://anki.tenderapp.com/discussions/beta-testing/1868-anki-2124-beta#comment_48240796
2020-04-15 15:02:12 +10:00
Damien Elmes
f5f2782e3b embed sort kind enum to avoid future namespace conflicts 2020-04-14 20:31:10 +10:00
Damien Elmes
351c7b6a82 fix dyn being serialized as bool
If you were running from git in the last ~30 hours, please load
your collection using the latest git, review one card, then force
a full upload to fix compatibility with other clients.
2020-04-10 18:07:59 +10:00
Damien Elmes
b7696e6381 merge the 12-14 upgrade code 2020-04-10 17:46:57 +10:00
Damien Elmes
9b66ecd12d add socks support 2020-04-09 14:28:36 +10:00
Damien Elmes
76ecc9739e update rusqlite 2020-04-09 12:45:51 +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
29d66cb717 skip terminal logging unless LOGTERM defined
seems to be quite slow on Windows
2020-04-07 10:25:47 +10:00
Damien Elmes
68142ed32e Cow<str> workaround no longer required 2020-04-07 10:08:03 +10:00
Damien Elmes
b0ea1c24d0 update rusqlite for param count assert fix 2020-04-07 08:54:57 +10:00
Damien Elmes
f4a6a12c6f avoid warning on int sortBackwards from older Anki versions 2020-04-06 17:11:03 +10:00
Damien Elmes
02d0d9a670 add separate json error 2020-04-06 16:29:31 +10:00
Damien Elmes
a9fd2da243 log to the terminal as well 2020-04-06 15:57:13 +10:00
Damien Elmes
913c5b9854 use bytes for deck config proto 2020-04-06 15:39:47 +10:00
Damien Elmes
6471adafcc use bytes for config proto 2020-04-06 15:39:47 +10:00
Damien Elmes
3ef959856f display warning when config load fails 2020-04-06 15:39:47 +10:00
Damien Elmes
d05722aa82 use blobs for config 2020-04-06 15:39:47 +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
3c7eabc51e add flag to skip downgrade on collection close
Disabled for now; when enabled it will allow faster collection
open and close in the normal case, while continuing to downgrade
when exporting or doing a full sync.

Also, when downgrading is disabled, the journal mode is no longer
changed back to delete.
2020-04-04 17:21:45 +10:00
Damien Elmes
ea2a3d7586 use separate schema version for tag changes
Will prevent issues if user upgrades after an unclean shutdown
2020-04-04 10:14:51 +10:00
Damien Elmes
6c9a6cde2b use case folding when sorting in canonify 2020-04-03 19:34:46 +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
07c414692e preserve mtime/usn when syncing deck config, and add snake_case names 2020-04-03 19:34:46 +10:00
Damien Elmes
83c50488fd use support URL and point to source repo 2020-04-03 08:44:59 +10:00
evandrocoan
30107ab09d Created the GitHub Actions step Upload to PyPi to run only on
tagged releases of anki:
https://anki.tenderapp.com/discussions/ankidesktop/40025-anki-in-python-package-index
2020-04-02 02:57:34 -03:00
Damien Elmes
001226050d fix is:due search 2020-04-02 09:33:05 +10:00
Damien Elmes
ddefffceda return interrupted err when media sync aborted 2020-04-01 21:40:14 +10:00
Damien Elmes
f195296106 fix push-i18n-ftl 2020-04-01 18:20:31 +10:00
Damien Elmes
8f427dbbd7 FString -> TR 2020-04-01 18:16:43 +10:00
Damien Elmes
15ba839003 translate default deck config name 2020-04-01 17:49:25 +10:00
Damien Elmes
7e7ac42384 add fixme 2020-04-01 17:36:33 +10:00
Damien Elmes
7b201fe7e6 ignore .DS_Store in trash
https://anki.tenderapp.com/discussions/ankidesktop/40035-anki-2123-on-macos-ds_store-files-in-new-anki-trash
2020-04-01 13:37:57 +10:00
Damien Elmes
5bb4d798c1 add some timeouts
I'm waiting to hear back from the reqwests author on the best way to
handle this. For now, this change just adds short timeouts
to the quick requests, and will wait for up to an hour when sending/
receiving files to allow for the slow connection+large file case.
2020-04-01 10:03:54 +10:00
Damien Elmes
284ee0860b allow aborting a media sync while http req in flight
The progress handling code needs a rethink, as we now have two separate
ways to flag that the media sync should abort. In the future, it may
make sense to switch to polling the backend for progress, instead of
passing a callback in.
2020-04-01 09:49:25 +10:00
Damien Elmes
cffe146397 split deck config into separate SQL table
- on collection load, the schema is upgraded to 12
- on collection close, the changes are reversed so older clients
can continue to open the collection
- in the future, we could potentially skip the reversal except
when exporting/doing a full sync
- the same approach should work for decks, note types and tags in the
future too
- the deck list code needs updating to cache the deck confs for the
life of the call
2020-03-30 20:01:16 +10:00
Damien Elmes
089a68eb43 move deck conf handling to backend 2020-03-30 14:39:46 +10:00
Damien Elmes
d41124343d initial work on undo support 2020-03-29 17:52:16 +10:00
Damien Elmes
3924dedbb7 remove usn cache
SqliteStorage no longer contains any mutable state
2020-03-29 12:50:38 +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
c4a78ffd82 roll back the vec cache changes
prepare_cached() is sufficiently fast, and allowing the vec cache
to persist across calls is complicated due to lifetime restrictions
2020-03-29 09:26:09 +10:00
Damien Elmes
cb03c87f8b Revert "add benchmark for vec cache"
This reverts commit 0247d65ccd.
2020-03-29 09:16:11 +10:00
Damien Elmes
36314f3b6f Merge pull request #528 from evandroforks/create_actions_for_windows_macos
Create actions for Windows and Mac OS
2020-03-27 15:26:22 +10:00
Damien Elmes
fc846ac4e4 use add_card() 2020-03-27 15:11:07 +10:00
Damien Elmes
1112fc8e8b add (unused) add_card, and move sql to separate files 2020-03-27 14:48:25 +10:00
Damien Elmes
0247d65ccd add benchmark for vec cache
test storage::sqlite::bench::bench_hash_cache ... bench:         399 ns/iter (+/- 27)
test storage::sqlite::bench::bench_no_cache   ... bench:       4,854 ns/iter (+/- 499)
test storage::sqlite::bench::bench_vec_cache  ... bench:           0 ns/iter (+/- 0)
2020-03-27 09:59:48 +10:00
Damien Elmes
d1c44ec06d store cached statements in a vec instead of separate optionals 2020-03-27 09:51:19 +10:00
evandrocoan
f1fe0209f6 Merge remote-tracking branch 'danielelmes/master' into create_actions_for_windows_macos 2020-03-26 19:31:01 -03:00
Damien Elmes
62be1b2688 update card in transaction 2020-03-27 07:58:25 +10:00
Damien Elmes
e28fdde984 handle mtime/usn bump in backend, and tweak integer sizes 2020-03-26 20:55:04 +10:00
Damien Elmes
aa33bf85ef report invalid type/queue 2020-03-26 19:32:35 +10:00
Damien Elmes
0510ab7c9c update_card() 2020-03-26 18:54:20 +10:00
Damien Elmes
b2fba4e1ff use backend to get card 2020-03-26 17:47:43 +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
3395a565a6 newtype NoteID 2020-03-26 14:42:43 +10:00
Damien Elmes
bb0b817d9c use a macro for newtype defs 2020-03-26 13:50:20 +10:00
Damien Elmes
d95cb93d7a usn newtype 2020-03-26 13:06:02 +10:00
Damien Elmes
bfc0287e51 use newtypes for distinguishing between second and millisecond stamps 2020-03-26 12:59:51 +10:00
evandrocoan
964cc1a11a Merge remote-tracking branch 'danielelmes/master' into create_actions_for_windows_macos
# Conflicts:
#	.github/scripts/trailing-newlines.sh
#	.github/workflows/checks.yml
#	Makefile
#	pylib/Makefile
#	qt/Makefile
#	qt/tools/typecheck-setup.sh
#	rspy/Makefile
2020-03-24 22:49:49 -03:00
Damien Elmes
2bd99127e9 add newline to mear clearly separate different ftl files 2020-03-25 08:53:42 +10:00
Damien Elmes
6aced5f125 handle fields with embedded nuls 2020-03-24 14:53:33 +10:00
evandrocoan
4fcecaed9f Created the .github/workflows/windows.yml
# Conflicts:
#	.github/scripts/trailing-newlines.sh
#	Makefile
#	qt/tools/typecheck-setup.sh
#	react/Makefile
#	rspy/Makefile
#	svelte/Makefile
#	tslib/Makefile
2020-03-23 19:51:03 -03: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
4563fe36bc rename long filenames in fields if files renamed in a previous sync 2020-03-23 18:38:45 +10:00
Damien Elmes
b7fdb8aeb4 fix setting of wal 2020-03-23 13:52:57 +10:00
Damien Elmes
17f7a69830 handle trailing whitespace inside group 2020-03-22 18:52:44 +10:00
Damien Elmes
7c91d3e414 accept now_mins_west for v2 legacy timing as well 2020-03-22 17:33:14 +10:00
Damien Elmes
e02f032a47 use backend for v1 and v2 cutoff calculations
this should also fix the CI failures, which were happening because
the datetime module wasn't matching the shifted time.time()
2020-03-22 14:28:26 +10:00
Damien Elmes
01f9845b27 exclude autogenerated src from build deps
prevents unnecessary rebuilds
2020-03-22 03:39:38 +00:00
Damien Elmes
c0a4a1cb66 possible fix for CI failure 2020-03-22 13:17:00 +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
2060577ede handle collections with sortBackwards set to 0 instead of a bool 2020-03-22 10:26:09 +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
0a6c5dd240 don't require wildcard for unicode case folding in search 2020-03-21 12:44:56 +10:00
Damien Elmes
982e1a811d add unicase collation
sqlite's like is hard-coded to use ASCII comparisons, so we can't
take advantage of this yet
2020-03-21 12:40:20 +10:00
Damien Elmes
9dd5fef0a1 support regex searches 2020-03-21 12:00:48 +10:00
Damien Elmes
e0e7560d2b add regexp() to sqlite 2020-03-21 10:23:11 +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
551aa135d6 check for child decks case-insensitively 2020-03-21 07:57:07 +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
089e059951 tolerate some string IDs 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
4f1c85bf8a add v1 and v2 legacy timing code 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
3b6fef5613 add card queue/type enums 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
1b2af8054a field_checksum needs to strip HTML 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
Damien Elmes
82dbbe7211 add string about waiting for completion 2020-03-20 21:15:23 +10:00
Damien Elmes
5a20d9da79 release mutex before beginning media sync
And check media sync is not running on close
2020-03-20 21:15:23 +10:00
Damien Elmes
a321efe9db fix media sync being logged to console 2020-03-20 21:15:23 +10:00
Damien Elmes
5aba5c3ab9 drop the separate i18n backend 2020-03-20 21:15:23 +10:00
Damien Elmes
e5f883d1c3 support opening and closing the DB while keeping backend alive
This is safer than just dropping the backend, as .close() will
block if something else is holding the mutex. Also means we can
drop the extra I18nBackend code.

Media syncing still needs fixing.
2020-03-20 21:15:23 +10:00
Damien Elmes
c710580604 move media folder/db paths into collection
this breaks background media syncing for now
2020-03-20 21:15:23 +10:00
Damien Elmes
8c8674f57b drop unused col_path 2020-03-20 21:15:23 +10:00
Damien Elmes
3cacc00fc3 make the collection optional 2020-03-20 21:15:23 +10:00
Damien Elmes
116f7fa3f1 support first_row_only 2020-03-20 21:15:23 +10:00
Damien Elmes
7e5f713f05 proper implementation of executemany(); drop executescript() 2020-03-20 21:15:23 +10:00
Damien Elmes
121687ea91 wrap the collection in a mutex so DB access is thread safe 2020-03-20 21:15:23 +10:00
Damien Elmes
e72d21e09e move note code into notes.rs, add ability to rollback when unchanged 2020-03-20 21:15:23 +10:00
Damien Elmes
3f3a45e2ba add Collection struct, and get media check working again
- media check no longer needs collection to be closed
- use savepoints for operations initiated by Rust, so they are
atomic without forcing a commit
2020-03-20 21:15:23 +10:00
Damien Elmes
700d713f80 add begin/commit/rollback, and support creating collections
all but one unit test is now passing
2020-03-20 21:15:23 +10:00
Damien Elmes
bd7ded18c3 drop the protobuf prototype 2020-03-20 21:15:23 +10:00
Damien Elmes
38d4ea5311 use (or)json for DB bridge
Some initial testing with orjson indicates performance varies from
slightly better than pysqlite to about 2x slower depending on the type
of query.

Performance could be improved by building the Python list in rspy
instead of sending back json that needs to be decoded, but it may make
more sense to rewrite the hotspots in Rust instead. More testing is
required in any case.
2020-03-20 21:15:23 +10:00
Damien Elmes
a129b8f8cf initial work on DB handling in Rust
committing the Protobuf implementation for posterity, but will replace
it with json, as Protobuf measures about 6x slower for some workloads
like 'select * from notes'
2020-03-20 21:15:23 +10:00
Damien Elmes
1d6c084c2b fix clippy lint on other platforms 2020-03-19 10:58:52 +10:00
Damien Elmes
0d9ea33389 bump version 2020-03-19 10:46:01 +10:00
Damien Elmes
eae07af576 correctly handle NFD content in media DB from older Anki versions 2020-03-19 10:20:42 +10:00
Damien Elmes
29f625b61e add helper to duplicate a fluent string 2020-03-12 19:53:44 +10:00
Damien Elmes
0651aaa229 add media check window title, use consistent formatting in template 2020-03-12 18:02:22 +10:00
Damien Elmes
28edff2a5e fix fallback preferences being used instead of English
Check needs to be done regardless of if we found a regional variant
or not.
2020-03-12 18:02:15 +10:00
Damien Elmes
b198ba8073 ignore remote file links in media check 2020-03-10 13:46:52 +10:00
Damien Elmes
e512199ace add restore media action 2020-03-10 13:35:09 +10:00
Damien Elmes
cac9ccfa0d add empty trash action in aqt 2020-03-10 12:49:40 +10:00
Damien Elmes
a6b1a32378 don't clean up the trash folder automatically
The media check now reports if any files are in the trash folder,
and a method has been exposed to clear the trash.
2020-03-10 12:02:38 +10:00
Damien Elmes
005a8831e1 add basic log rotation 2020-03-10 10:33:14 +10:00
Damien Elmes
387207cd86 log sync errors 2020-03-10 09:43:48 +10:00
Damien Elmes
80065f3ce2 tweak logging 2020-03-10 09:30:05 +10:00
Damien Elmes
6f9079a341 don't try to read file data when file marked as a deletion
If the user hadn't used the media check to clean up files with
invalid names on disk,  the long filename would break the 'automatically
rename long filenames when syncing' functionality, causing the original
long filename to be uploaded to AnkiWeb as an addition instead of
a deletion
2020-03-10 09:29:36 +10:00
Damien Elmes
0a8fe2959c fix missing newline in ftl files
https://anki.tenderapp.com/discussions/beta-testing/1836-problem-with-new-translations
2020-03-09 18:58:41 +10:00
Damien Elmes
f6d5d4ea26 rspy version 2020-03-06 19:15:02 +10:00
Damien Elmes
0aa0c42d20 update to failure 0.1.7 2020-03-06 15:08:58 +10:00
Damien Elmes
2e4fb4401f fix incorrect mark_collection_modified()
- usn shouldn't be changed
- mtime is in milliseconds
2020-03-05 14:55:03 +10:00
Damien Elmes
0b4a7c1d10 work around bug in failure crate 2020-03-05 11:06:44 +10:00
Damien Elmes
ba97457e8a add nfd tag fix to db check
we already normalize in the editor and importing, so perhaps these
tags were from an old version

https://anki.tenderapp.com/discussions/ankidesktop/39120-bug-filter-do-not-work-with-tags-which-contain-german-letters-like
2020-03-01 11:21:25 +10:00
Damien Elmes
c97b37b7ae make logging explicit, and support logging to a file 2020-02-29 20:44:01 +10:00
Damien Elmes
36372991f7 bump rust toolchain for 1.41.1 fixes 2020-02-29 19:42:30 +10:00
Damien Elmes
42781a696f remove some unused imports 2020-02-29 15:21:11 +10:00
Damien Elmes
e26860ad04 don't require a media scan after media deleted inside Anki 2020-02-29 14:45:16 +10:00
Damien Elmes
0810d9d5e0 fix display of years 2020-02-28 17:14:35 +10:00
Damien Elmes
7cfe33a099 fix rerun-if-changed paths 2020-02-27 20:52:17 +10:00
Damien Elmes
2f92c9a803 add support for embedding the qt translations 2020-02-27 20:38:34 +10:00
Damien Elmes
2de865d7f0 migrate strings with trailing newlines to fluent 2020-02-27 20:36:40 +10:00
Damien Elmes
3c304927c8 Merge pull request #465 from alanhdu/rust-deps
Upgrade some rust deps
2020-02-27 14:13:26 +10:00
Alan Du
a6751c893b Update blake3 to 0.2 2020-02-26 22:50:48 -05:00
Alan Du
a6441dd4e0 Update prost-build version to 0.6
This is the same version as Prost, and lets us reduce the number of deps
we have to compile
2020-02-26 22:48:16 -05:00
evandrocoan
4a2456f62f Merge remote-tracking branch 'danielelmes/master' into fix_windows_build
# Conflicts:
#	Makefile
2020-02-27 00:20:34 -03:00
Damien Elmes
3dc0567f89 add string for media log title, and add button in prefs to access it 2020-02-27 12:22:24 +10:00
Damien Elmes
5337ea457a extra newline in network details 2020-02-27 11:22:48 +10:00
Damien Elmes
f20a23b1a9 use debug description for untranslated errors; fix template error 2020-02-27 11:07:18 +10:00
Damien Elmes
b030f2b40b info is superfluous 2020-02-27 10:53:49 +10:00
Damien Elmes
83d894ac87 return a localized error for all error kinds
some errors are not yet localized, but now the Python code
doesn't need to think about which property to use
2020-02-27 10:46:24 +10:00
Damien Elmes
21c94c623c add comment to sync.ftl 2020-02-27 09:18:49 +10:00
Damien Elmes
59328d9ade tweak rounding
- avoid rounding minutes
- round the seconds taken in the card info screen
- provide different precise and imprecise modes, since we need
to display seconds to multiple decimals in some areas
2020-02-25 17:29:06 +10:00
evandrocoan
2d316748a7 Merge remote-tracking branch 'danielelmes/master' into fix_windows_build
# Conflicts:
#	Makefile
2020-02-25 03:16:57 -03:00
evandrocoan
9e690f80e7 Renamed FIND_EXEC to FIND, replaced IS_WINDOWS by specific commands
as PYTHON_BIN, ACTIVE_SCRIPT and INSTALL_PYAUDIO.
Fixed echo statements not using @ to suppress double message output.
Deprecated the usage of ECHOCMD := /bin/echo -e because it has no
effect: https://stackoverflow.com/questions/60387684/how-to-make-the-makefile-echos-to-use-bin-echo-e

# Conflicts:
#	Makefile
2020-02-25 03:15:11 -03:00
Damien Elmes
64851afa5e cap answer buttons to 1 decimal place
we can switch to NUMBER() instead in the future, but will need
to update all the translations at the same time
2020-02-25 13:24:29 +10:00