anki/rslib
Damien Elmes 6b0fe4b381 undoable ops now return changes directly; add new *_ops.py files
- Introduced a new transact() method that wraps the return value
in a separate struct that describes the changes that were made.
- Changes are now gathered from the undo log, so we don't need to
guess at what was changed - eg if update_note() is called with identical
note contents, no changes are returned. Card changes will only be set
if cards were actually generated by the update_note() call, and tag
will only be set if a new tag was added.
- mw.perform_op() has been updated to expect the op to return the changes,
or a structure with the changes in it, and it will use them to fire the
change hook, instead of fetching the changes from undo_status(), so there
is no risk of race conditions.
- the various calls to mw.perform_op() have been split into separate
files like card_ops.py. Aside from making the code cleaner, this works
around a rather annoying issue with mypy. Because we run it with
no_strict_optional, mypy is happy to accept an operation that returns None,
despite the type signature saying it requires changes to be returned.
Turning no_strict_optional on for the whole codebase is not practical
at the moment, but we can enable it for individual files.

Still todo:
- The cursor keeps moving back to the start of a field when typing -
we need to ignore the refresh hook when we are the initiator.
- The busy cursor icon should probably be delayed a few hundreds ms.
- Still need to think about a nicer way of handling saveNow()
- op_made_changes(), op_affects_study_queue() might be better embedded
as properties in the object instead
2021-03-19 19:45:21 +10:00
..
.cargo initial Bazel conversion 2020-11-01 14:26:58 +10:00
build split out remaining rpc methods 2021-03-11 17:04:32 +10:00
cargo roll back slog-term due to Windows break (2/2) 2021-03-10 13:28:32 +10:00
src undoable ops now return changes directly; add new *_ops.py files 2021-03-19 19:45:21 +10:00
templates migrate card stats to backend 2020-06-15 17:22:16 +10:00
tests/support initial Bazel conversion 2020-11-01 14:26:58 +10:00
.clang-format add .clang-format so VS Code preserves formatting style on .proto save 2021-01-12 18:47:08 +10:00
.gitignore initial Bazel conversion 2020-11-01 14:26:58 +10:00
backend.proto undoable ops now return changes directly; add new *_ops.py files 2021-03-19 19:45:21 +10:00
BUILD.bazel add strum crate 2021-03-10 11:53:27 +10:00
Cargo.toml roll back slog-term due to Windows break (2/2) 2021-03-10 13:28:32 +10:00
clang_format.bzl NF: add AGPL licence missing in some file 2021-01-31 21:50:21 +01:00
proto_format.py NF: add AGPL licence missing in some file 2021-01-31 21:50:21 +01:00
README.md add some code editing/completion docs 2020-12-16 14:16:08 +10:00
rustfmt.bzl NF: add AGPL licence missing in some file 2021-01-31 21:50:21 +01:00

Anki's Rust code.

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