We've changed the way the "recover files" option works:
* Now it's an option that is always available (so we can open files
even from sessions that were correctly closed in the past)
* We can open sessions from other Aseprite versions (as in a "best
effort" approach, if it works, ok, if it doesn't -> contact user
support)
* Added the gfx::ColorSpace field in doc::ImageSpec
* Removed some methods like Sprites::add(width, height, etc.)
* Prefer methods with ImageSpec as argument (which now includes the color space)
Added a new "weak lock" concept to RWLock/Document class. The background
thread that saves data recovery information can obtain this "weak lock"
which can be unlocked by the UI thread in any moment (i.e. when the user
needs the document immediately for UI.)
In this way we can test on each moment how the information is being
saved and will be recovered. We can find bugs with missing or invalid
doc::Object::incrementVersion() calls.
Changes:
* Add DataRecoveryView
* Split SubObjectsIO into an interface and SubObjectsFromSprite
* Add a "setId" parameter to some doc::read_* functions (we need this
functionality from session recovery)
Changes:
* Move classes related to data recovery into app/crash/ directory/namespace
* Rename app::Backup to app::crash::Session
* Rename app::DataRecovery to app::crash::DataRecovery
* Add base::list_files()
* Add base::get_current_process_id() and base::is_process_running()
* Remove base::TempDir
* Save one session for each running process
* Remove sessions that are empty when the program starts