mirror of
https://github.com/ankitects/anki.git
synced 2025-11-06 12:47:11 -05:00
- 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 |
||
|---|---|---|
| .. | ||
| _backend | ||
| importing | ||
| scheduler | ||
| syncserver | ||
| __init__.py | ||
| BUILD.bazel | ||
| buildinfo.py | ||
| cards.py | ||
| collection.py | ||
| config.py | ||
| consts.py | ||
| db.py | ||
| dbproxy.py | ||
| decks.py | ||
| errors.py | ||
| exporting.py | ||
| find.py | ||
| hooks.py | ||
| hooks_gen.py | ||
| httpclient.py | ||
| lang.py | ||
| latex.py | ||
| media.py | ||
| models.py | ||
| notes.py | ||
| py.typed | ||
| rsbackend.py | ||
| sound.py | ||
| stats.py | ||
| statsbg.py | ||
| stdmodels.py | ||
| storage.py | ||
| sync.py | ||
| tags.py | ||
| template.py | ||
| types.py | ||
| utils.py | ||
| wheel_description.txt | ||