Damien Elmes
a93145c4c7
handle preview repeat in deck list
2020-07-30 09:11:13 +10:00
Damien Elmes
71dbbd9fa8
set schema on collection creation
2020-07-03 11:55:27 +10:00
Damien Elmes
618fc65282
handle revlog entries with negative review times
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
fd258d15c5
some initial work on updating the graphs
2020-06-29 15:48:00 +10:00
Damien Elmes
710e5ecce2
formatting fix
2020-06-22 11:58:31 +10:00
Damien Elmes
cec1fdece5
move revlog out of sync code, and add enums
...
and remove type=4, which does not appear to be used
2020-06-16 16:31:36 +10:00
Damien Elmes
f5694a7e4a
migrate card stats to backend
...
Currently this renders the HTML directly like the previous Python
implementation - doing it in JS would probably make more sense in the
future.
2020-06-15 17:22:16 +10:00
Damien Elmes
965fd848d1
on upgrade, mark decks modified that are renamed
2020-06-14 14:48:58 +10:00
Damien Elmes
d5cd9af53b
fix review cards with high intervals not being reset properly
...
would lead to a "fixed .. with invalid card property" message that
didn't go away
2020-06-09 20:11:26 +10:00
Damien Elmes
75471224fa
add progress to db check
2020-06-08 21:07:36 +10:00
Damien Elmes
e74e5c604b
add daily count updating to backend
2020-06-05 19:49:53 +10:00
Damien Elmes
c5e65d02e1
add note/card removal to backend
2020-06-04 18:21:04 +10:00
Damien Elmes
d7a2e78c0b
change sync label to indicate sync state
...
- blue for normal sync, red for full sync required
- refactor status fetching code so we don't hold a collection lock
during the network request, which slows things down
- fix sync spinner restarting when returning to deck list
2020-06-02 13:23:01 +10:00
Damien Elmes
1c52d11133
rework usn handling in sync
2020-06-01 13:57:10 +10:00
Damien Elmes
0787381a99
login/full up/full down plugged in
2020-06-01 13:57:10 +10:00
Damien Elmes
c4032c0176
another snapshot of sync work
...
progress handler is going to need to be reworked to function across
threads
2020-06-01 13:57:10 +10:00
Damien Elmes
2114fdf6f5
more syncing work
...
no checks yet
2020-06-01 13:57:10 +10:00
Damien Elmes
91e3256e6a
move dupe check to backend
2020-05-24 19:48:56 +10:00
Damien Elmes
01ebe964e9
bytes->blob in sql
2020-05-18 13:36:45 +10:00
Damien Elmes
336349d8d1
update before_upload()
2020-05-17 14:13:21 +10:00
Damien Elmes
a682865169
move deck config to protobuf
2020-05-17 13:28:41 +10:00
Damien Elmes
e85911c4e4
add option to limit deck tree counts to a particular node
2020-05-17 08:38:49 +10:00
Damien Elmes
17efa85d75
update rusqlite
2020-05-16 19:49:08 +10:00
Damien Elmes
cbfc9d5a87
handle default deck and filtered deck suppression in the backend
2020-05-15 21:21:10 +10:00
Damien Elmes
14c0a5891b
fetch template and note fields in backend during normal card render
...
Saves having to serialize the note fields and q/a templates, which
is particularly a win when rendering question/answer in the browse
screen.
Also some work towards being able to preview notes without having to
commit them to the database.
2020-05-13 10:38:49 +10:00
Damien Elmes
21ac2c14a7
handle scheduling preferences in the backend
2020-05-12 21:13:34 +10:00
Damien Elmes
befa66fb27
fix default rollover
2020-05-12 21:13:34 +10:00
Damien Elmes
dc9200e639
add tests for the other checks, and fix new card due limiting
2020-05-12 21:13:34 +10:00
Damien Elmes
bdf5daa422
add tests for card fixes; implement deck recovery
2020-05-12 21:13:34 +10:00
Damien Elmes
c227298565
stop using memory for sqlite temp store
...
On large collections this can end up consuming hundreds of megabytes
of RAM on operations like a vacuum.
2020-05-12 21:13:34 +10:00
Damien Elmes
d7f9bccd1e
rewrite DB check
...
- notes with wrong field count are now recovered instead of
being deleted
- notes with missing note types are now recovered
- notes with missing cards are now recovered
- recover_missing_deck() still needs implementing
- checks required
2020-05-12 21:13:34 +10:00
Damien Elmes
b03dcd2643
fetch notes in nid order
...
May reduce the amount of seeking on conventional disks. Chunking and
fetching batches of notes at once would improve things further, at the
cost of more memory use.
2020-05-12 21:13:34 +10:00
Damien Elmes
667f9e6554
bulk tag add/remove/update; canonify on note save
...
also remove the tag list updated hook - we'll need a better solution in
the future than having the library code call back into the GUI code
2020-05-12 21:13:34 +10:00
Damien Elmes
ad1c519d1c
move find&replace to backend
2020-05-12 21:13:34 +10:00
Damien Elmes
2d0a6283e4
add an index on notes(mid) so we can avoid the tablescan
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
97e857a41c
add browserCollapsed as part of tree build
2020-05-12 21:13:33 +10:00
Damien Elmes
611959e5a8
switch primary key to deck id
2020-05-12 21:13:33 +10:00
Damien Elmes
87551574c0
add partial index on odid, and search odid as well
...
the odid != 0 check in cards_for_deck.sql is necessary for sqlite
to be able to take advantage of the index
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
cbfe20712e
add (currently disabled) check for missing/empty decks on card add
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
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
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
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
7ff6226a0e
always fetch full notetype
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
4a2256aecb
the start of note adding, and note type changes
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
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
65f12eeda2
add stock note types in backend
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
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
b7696e6381
merge the 12-14 upgrade code
2020-04-10 17:46:57 +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
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
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
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
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
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
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
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
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
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
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
Damien Elmes
6aced5f125
handle fields with embedded nuls
2020-03-24 14:53:33 +10:00
Damien Elmes
b7fdb8aeb4
fix setting of wal
2020-03-23 13:52:57 +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
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
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
e0e7560d2b
add regexp() to sqlite
2020-03-21 10:23:11 +10:00
Damien Elmes
9810b584d5
support sorting on note type, card template and decks
2020-03-20 21:15:23 +10:00
Damien Elmes
c3c56d7cf2
fix decks
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
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
eef158b20c
add field_at_index() sql func
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
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