Tidy up osu-stable import process

Now can locate any osu-stable installation using registry lookup (with ample fallbacks). Also uses a much more controlled access method via StableStorage.
This commit is contained in:
Dean Herbert
2017-08-01 15:12:12 +09:00
parent c9c1a628af
commit 941f3f0934
3 changed files with 68 additions and 6 deletions

View File

@ -59,6 +59,11 @@ namespace osu.Game.Beatmaps
/// </summary>
public Action<Notification> PostNotification { private get; set; }
/// <summary>
/// Set a storage with access to an osu-stable install for import purposes.
/// </summary>
public Func<Storage> GetStableStorage { private get; set; }
public BeatmapManager(Storage storage, FileStore files, SQLiteConnection connection, RulesetStore rulesets, IIpcHost importHost = null)
{
beatmaps = new BeatmapStore(connection);
@ -451,19 +456,20 @@ namespace osu.Game.Beatmaps
}
}
/// <summary>
/// This is a temporary method and will likely be replaced by a full-fledged (and more correctly placed) migration process in the future.
/// </summary>
public void ImportFromStable()
{
string stableInstallPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), @"osu!", "Songs");
if (!Directory.Exists(stableInstallPath))
stableInstallPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".osu", "Songs");
var stable = GetStableStorage?.Invoke();
if (!Directory.Exists(stableInstallPath))
if (stable == null)
{
Logger.Log("Couldn't find an osu!stable installation!", LoggingTarget.Information, LogLevel.Error);
Logger.Log("No osu!stable installation available!", LoggingTarget.Information, LogLevel.Error);
return;
}
Import(Directory.GetDirectories(stableInstallPath));
Import(stable.GetDirectories("Songs"));
}
public void DeleteAll()

View File

@ -20,6 +20,7 @@ using osu.Game.Screens.Menu;
using OpenTK;
using System.Linq;
using System.Threading.Tasks;
using osu.Framework.Platform;
using osu.Framework.Threading;
using osu.Game.Graphics;
using osu.Game.Rulesets.Scoring;
@ -47,6 +48,8 @@ namespace osu.Game
private UserProfileOverlay userProfile;
public virtual Storage GetStorageForStableInstall() => null;
private Intro intro
{
get
@ -151,6 +154,7 @@ namespace osu.Game
// hook up notifications to components.
BeatmapManager.PostNotification = n => notificationOverlay?.Post(n);
BeatmapManager.GetStableStorage = GetStorageForStableInstall;
AddRange(new Drawable[] {
new VolumeControlReceptor