Add basic custom data directory support

This commit is contained in:
Dean Herbert
2020-05-04 17:01:05 +09:00
parent bcf7b160db
commit 6621d363da
3 changed files with 139 additions and 2 deletions

View File

@ -0,0 +1,30 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using osu.Framework.Configuration;
using osu.Framework.Platform;
namespace osu.Game.Configuration
{
public class StorageConfigManager : IniConfigManager<StorageConfig>
{
protected override string Filename => "storage.ini";
public StorageConfigManager(Storage storage)
: base(storage)
{
}
protected override void InitialiseDefaults()
{
base.InitialiseDefaults();
Set(StorageConfig.FullPath, string.Empty);
}
}
public enum StorageConfig
{
FullPath,
}
}

View File

@ -132,6 +132,8 @@ namespace osu.Game
dependencies.Cache(contextFactory = new DatabaseContextFactory(Storage));
dependencies.CacheAs(Storage);
var largeStore = new LargeTextureStore(Host.CreateTextureLoaderStore(new NamespacedResourceStore<byte[]>(Resources, @"Textures")));
largeStore.AddStore(Host.CreateTextureLoaderStore(new OnlineStore()));
dependencies.Cache(largeStore);
@ -300,8 +302,13 @@ namespace osu.Game
{
base.SetHost(host);
if (Storage == null)
Storage = host.Storage;
var storageConfig = new StorageConfigManager(host.Storage);
var customStoragePath = storageConfig.Get<string>(StorageConfig.FullPath);
Storage = !string.IsNullOrEmpty(customStoragePath)
? new CustomStorage(customStoragePath, host)
: host.Storage;
if (LocalConfig == null)
LocalConfig = new OsuConfigManager(Storage);
@ -353,5 +360,17 @@ namespace osu.Game
public override bool ChangeFocusOnClick => false;
}
}
/// <summary>
/// A storage pointing to an absolute location specified by the user to store game data files.
/// </summary>
private class CustomStorage : NativeStorage
{
public CustomStorage(string fullPath, GameHost host)
: base(string.Empty, host)
{
BasePath = fullPath;
}
}
}
}