Add ability to import data from external osu!lazer installations
Solves an issue where users can't import data from a different osu!lazer install. As discussed in #35547, there is currently no way to do this.
The new importer:
- Reads the source
client.realm - Copies data from the source realm to current realm
- Copies over
files/folder from source folder to current folder
This takes a few minutes depending on the size of the old install, and the speed of the disk.
https://github.com/user-attachments/assets/0412e1a2-d2a5-40fa-8f38-98b9396cd956
This is a bit of a niche one, but also very cool that it can be done quite simply (and very isolated). I'm not against having this as a feature.
There's 2 things that i think should be improved.
- Mimic the first run setup import page, allowing the user to choose what to import (toggles for the 4 categories)
- An option to delete the other installation as it imports or after it's done, or a footnote about how this doesn't delete the other install, so the user knows they have to do it themselves.
Also, since the import notification does not differentiate what is being imported. I'd do away with the notification spam and only use a single "files imported" one. (I think the setup wizard import does differentiate though...?)
I tried to match the UX to the way osu! imports stable hence why the previous install doesn't get deleted. Since the files are hardlinked (where they can) with peppy's fix, it doesn't eat up additional disk space
As for the notifications, they only looked spammy in the video because the test dataset was tiny. On a real install, the steps take actual time, so I think keeping them separate gives more transparency to the user.
I also tidied up the UI so it looks a bit cleaner now:
I'm not too fussed about the deleting part, it's a decision for the osu team in the end. My reasoning was that, in my mind, syncing stable and lazer and syncing two lazer installs are two different things. You might want to use two different clients, but why would you need another lazer install tha has less files than your now synced one? But i can see now that deleting user files in such a way might be bad UX depending on the use case or system configuration.
@yorunoken before i dive in and give a full review, can you update the UI components to use the newer "Form" component style? It doesn't make too much sense to add new screens to the game using the old style when we're trying to migrate away.
of course, I also followed same design as FileImportScreen since they have similar functionality.
was also proposing using things like FormButton, fwiw.
I want a way to tell the user how many beatmaps are going to be imported (since it looks good and also how importing from stable works), but it's kind of awkward with the Form components because you can't change Caption or HintText after initialization, that's why I didn't use them