Journalling UUIDs
Implements a UUID utility class and uses it to provide the type of jo_id_t. The intent is to remove any realistic possibility of collision between JournallingObject IDs.
This addresses issue #4736 and supersedes PRs #2875 and #4723.
What's been tested to work so far?
- Saving and loading a new project file with automation.
- Saving and loading a new project file with a LFO Controller connection.
What doesn't work?
- ~~RemotePlugin~~ fixed with b1c205c
- Loading project files created with any previous version of LMMS (no update function for replacing int32-IDs with UUIDs).
TODOs?
- Remove workarounds from #4723
- Test more thoroughly (ideally automated)
- Fix anything that doesn't work, obviously.
:robot: Hey, I'm @LmmsBot from github.com/lmms/bot and I made downloads for this pull request, click me to make them magically appear! :tophat:
Linux
- Linux (AppImage):
lmms-1.3.0-alpha.1.223+ga8d48366f-linux-x86_64.AppImage(build link)
Windows
- Windows 32-bit:
lmms-1.3.0-alpha.1.223+ga8d48366f-mingw-win32.exe(build link) - Windows 64-bit:
lmms-1.3.0-alpha.1.223+ga8d48366f-mingw-win64.exe(build link) - Windows 32-bit:
lmms-1.3.0-alpha-msvc2017-win32.exe(build link) - Windows 64-bit:
lmms-1.3.0-alpha-msvc2017-win64.exe(build link)
macOS
:robot:
{"platform_name_to_artifacts": {"Linux": [{"artifact": {"title": {"title": "(AppImage)", "platform_name": "Linux"}, "link": {"link": "https://output.circle-artifacts.com/output/job/16f63bbb-e1c5-41dd-bff6-37fa3a734b09/artifacts/0/lmms-1.3.0-alpha.1.223+ga8d48366f-linux-x86_64.AppImage"}}, "build_link": "https://circleci.com/gh/LMMS/lmms/17601?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link"}], "Windows": [{"artifact": {"title": {"title": "32-bit", "platform_name": "Windows"}, "link": {"link": "https://output.circle-artifacts.com/output/job/e350ca33-ed24-4088-939b-336e930589fc/artifacts/0/lmms-1.3.0-alpha.1.223+ga8d48366f-mingw-win32.exe"}}, "build_link": "https://circleci.com/gh/LMMS/lmms/17604?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link"}, {"artifact": {"title": {"title": "64-bit", "platform_name": "Windows"}, "link": {"link": "https://output.circle-artifacts.com/output/job/f1a22c3a-9769-4173-9be4-b8b91d9976aa/artifacts/0/lmms-1.3.0-alpha.1.223+ga8d48366f-mingw-win64.exe"}}, "build_link": "https://circleci.com/gh/LMMS/lmms/17605?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link"}, {"artifact": {"title": {"title": "32-bit", "platform_name": "Windows"}, "link": {"link": "https://ci.appveyor.com/api/buildjobs/8igbqeygbg5gtw1u/artifacts/build/lmms-1.3.0-alpha-msvc2017-win32.exe"}}, "build_link": "https://ci.appveyor.com/project/Lukas-W/lmms/builds/43991481"}, {"artifact": {"title": {"title": "64-bit", "platform_name": "Windows"}, "link": {"link": "https://ci.appveyor.com/api/buildjobs/vceoc04g1hg41ddm/artifacts/build/lmms-1.3.0-alpha-msvc2017-win64.exe"}}, "build_link": "https://ci.appveyor.com/project/Lukas-W/lmms/builds/43991481"}], "macOS": [{"artifact": {"title": {"title": "", "platform_name": "macOS"}, "link": {"link": "https://output.circle-artifacts.com/output/job/4e93d6aa-b6c7-4b74-956c-290ef266f699/artifacts/0/lmms-1.3.0-alpha.1.223+ga8d48366f-mac10.14.dmg"}}, "build_link": "https://circleci.com/gh/LMMS/lmms/17603?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link"}]}, "commit_sha": "1b4d2f88112ff08d1c7cbe3c3838092767b87aee"}
I like the concept of removing possibilities of collision bw ids (though i don't understand anything about uuids). But since the plan is to get rid of qt, my question is - is it doable without using qt? If not qt, what's the way?
Does this fix the bug of restoring ID of objects when undoing?
Steps to reproduce:
- Create notes (you can undo each note)
- Create a new clip on the same track (track is journalled as a whole)
- Undo create clip (whole track is reloaded, clip gets new ID)
- Unable to undo individual notes now (ID of clip does not match journal, so checkpoints are skipped)