Anki/rslib
Damien Elmes 62223499c4 fix errors when undoing/redoing after a queue-invalidating operation
There were a few issues going on here:

- If some operation had invalidated the queues, they were subsequently
recreated with a call to .get_queues() in the undo handling code. This
could happen after the changes to the card had already been reverted,
leading to a queue state that didn't match our expectations.
- More generally, it's not safe to assume our mutations will apply
cleanly after the queue has been rebuilt. The next card will vary
depending on the number of remaining cards when interspersing cards of
different types, and a queue-invalidating operation will have changed
the learning cutoff.

So rather than rebuilding the queues on demand, we now check that they
already exist, and were created at the time we expect. If not, we
invalidate them and skip applying the mutations, and a subsequent
refresh of the UI should rebuild the queues correctly.

As part of this change, the cutoff snapshot has been moved into the
normal answer update object.

One possible downside here is that adding a note during review may cause
a newly due learning card to appear when undoing a different review.
If this proves to be a problem, we could potentially note down the
learning cutoff and apply it when queues are rebuilt later.
2021-08-22 15:32:46 +10:00
..
.cargo initial Bazel conversion 2020-11-01 14:26:58 +10:00
build Remove native HelpPage enum 2021-07-22 16:32:49 +02:00
cargo add linkcheck to Bazel 2021-07-23 20:22:32 +10:00
i18n fix new clippy warning 2021-08-22 15:32:46 +10:00
src fix errors when undoing/redoing after a queue-invalidating operation 2021-08-22 15:32:46 +10:00
templates migrate card stats to backend 2020-06-15 17:22:16 +10:00
tests use separate integration test for links 2021-07-24 10:12:25 +10:00
.gitignore initial Bazel conversion 2020-11-01 14:26:58 +10:00
BUILD.bazel fix reqwest build on Linux again 2021-07-24 10:18:09 +10:00
Cargo.toml Add links.rs for checking and building links 2021-07-22 10:03:03 +02:00
empty.rs add a valid, empty file so the check action works in Rust Analyzer 2021-05-05 15:53:27 +10:00
README.md add some code editing/completion docs 2020-12-16 14:16:08 +10:00
rustfmt.bzl update to the latest rules_rust + security framework update 2021-03-27 19:28:19 +10:00
rustfmt.toml tidy up Rust imports 2021-04-18 18:38:54 +10:00

Anki's Rust code.

backend.proto stores the interfaces used to communicate backend messages between Rust, Python and TypeScript.