- Merge the base/client/server model class trees into a single tree.
- Move the model into the UI process.
- Autogenerate model boilerplate code.
- Replace commands by arbitrary mutations directly from the UI.
- Assorted other cleanups.
- Mostly internal refactoring without user visible changes.
- Optimize the IPC code a bit, which makes it a bit faster.
- Shutting down is a bit more reliable.
Replace untyped CallbackRegistry by:
- explicitly declared Callback objects for each target.
- CallbackMap for maps of uniform callbacks.
Changed noisicaa.ui to use the same signature for callbacks.
Moved common code for synthetic attributes (e.g. project.duration) up into noisicaa.model.
- Move basic model code into noisicaa.model.
- Change internal property storage to protobufs.
- Commands also use protobufs.
- All serializations uses protobufs.
- Object are managed by a Pool object.
- Object references are stored as object IDs and dereferenced lazily.
Also:
- Everything is pylint clean.
- noisicaa.music and most of noisicaa.ui are now mypy strict.
- Generate mypy stubs for generated protobuf code.
- Cleaned up some obsolete cruft.
- Some improvements to runtests.
There are probably issues, when the user tries to close the tab while the project is still loading.
Can't test this now, because opening more than one tab doesn't even work...
- Player is per sheet (to make playback state management easier later on).
- Pipeline changes are tunneled through the Sheet object to each connected player.
- SheetView in the UI creates and owns the server-side player.
Needs async setup/cleanup for some UI objects.
Fix/comment-out tests.