mirror of
https://github.com/osukey/osukey.git
synced 2025-08-06 08:03:52 +09:00
Update skin implementations to match new structures
This commit is contained in:
@ -25,7 +25,7 @@ namespace osu.Game.Skinning
|
|||||||
resources,
|
resources,
|
||||||
// A default legacy skin may still have a skin.ini if it is modified by the user.
|
// A default legacy skin may still have a skin.ini if it is modified by the user.
|
||||||
// We must specify the stream directly as we are redirecting storage to the osu-resources location for other files.
|
// We must specify the stream directly as we are redirecting storage to the osu-resources location for other files.
|
||||||
new LegacySkinResourceStore(skin, resources.Files).GetStream("skin.ini")
|
new LegacyDatabasedSkinResourceStore(skin, resources.Files).GetStream("skin.ini")
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Configuration.CustomColours["SliderBall"] = new Color4(2, 170, 255, 255);
|
Configuration.CustomColours["SliderBall"] = new Color4(2, 170, 255, 255);
|
||||||
@ -42,7 +42,7 @@ namespace osu.Game.Skinning
|
|||||||
|
|
||||||
public static SkinInfo Info { get; } = new SkinInfo
|
public static SkinInfo Info { get; } = new SkinInfo
|
||||||
{
|
{
|
||||||
ID = SkinInfo.CLASSIC_SKIN, // this is temporary until database storage is decided upon.
|
ID = osu.Game.Skinning.SkinInfo.CLASSIC_SKIN, // this is temporary until database storage is decided upon.
|
||||||
Name = "osu!classic",
|
Name = "osu!classic",
|
||||||
Creator = "team osu!",
|
Creator = "team osu!",
|
||||||
InstantiationInfo = typeof(DefaultLegacySkin).GetInvariantInstantiationInfo()
|
InstantiationInfo = typeof(DefaultLegacySkin).GetInvariantInstantiationInfo()
|
||||||
|
@ -26,7 +26,7 @@ namespace osu.Game.Skinning
|
|||||||
private readonly IStorageResourceProvider resources;
|
private readonly IStorageResourceProvider resources;
|
||||||
|
|
||||||
public DefaultSkin(IStorageResourceProvider resources)
|
public DefaultSkin(IStorageResourceProvider resources)
|
||||||
: this(SkinInfo.Default, resources)
|
: this(osu.Game.Skinning.SkinInfo.Default, resources)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,6 +77,6 @@ namespace osu.Game.Skinning
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static SkinInfo createSkinInfo(BeatmapInfo beatmapInfo) =>
|
private static SkinInfo createSkinInfo(BeatmapInfo beatmapInfo) =>
|
||||||
new SkinInfo { Name = beatmapInfo.ToString(), Creator = beatmapInfo.Metadata?.Author.Username };
|
new SkinInfo { Name = beatmapInfo.ToString(), Creator = beatmapInfo.Metadata?.Author.Username ?? string.Empty };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
49
osu.Game/Skinning/LegacyDatabasedSkinResourceStore.cs
Normal file
49
osu.Game/Skinning/LegacyDatabasedSkinResourceStore.cs
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
// 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 System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using osu.Framework.Extensions;
|
||||||
|
using osu.Framework.IO.Stores;
|
||||||
|
using osu.Game.Database;
|
||||||
|
using osu.Game.Extensions;
|
||||||
|
using Realms;
|
||||||
|
|
||||||
|
namespace osu.Game.Skinning
|
||||||
|
{
|
||||||
|
public class LegacyDatabasedSkinResourceStore : ResourceStore<byte[]>
|
||||||
|
{
|
||||||
|
private readonly ILive<SkinInfo> source;
|
||||||
|
|
||||||
|
public LegacyDatabasedSkinResourceStore(SkinInfo source, IResourceStore<byte[]> underlyingStore)
|
||||||
|
: base(underlyingStore)
|
||||||
|
{
|
||||||
|
this.source = source.ToLive();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override IEnumerable<string> GetFilenames(string name)
|
||||||
|
{
|
||||||
|
foreach (string filename in base.GetFilenames(name))
|
||||||
|
{
|
||||||
|
string path = getPathForFile(filename.ToStandardisedPath());
|
||||||
|
if (path != null)
|
||||||
|
yield return path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string getPathForFile(string filename) =>
|
||||||
|
source.PerformRead(s =>
|
||||||
|
{
|
||||||
|
if (s.IsManaged)
|
||||||
|
{
|
||||||
|
// avoid enumerating all files if this is a managed realm instance.
|
||||||
|
return s.Files.Filter(@"Filename ==[c] $0", filename).FirstOrDefault()?.File.GetStoragePath();
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.Files.FirstOrDefault(f => string.Equals(f.Filename, filename, StringComparison.OrdinalIgnoreCase))?.File.GetStoragePath();
|
||||||
|
});
|
||||||
|
|
||||||
|
public override IEnumerable<string> GetAvailableResources() => source.PerformRead(s => s.Files.Select(f => f.Filename));
|
||||||
|
}
|
||||||
|
}
|
@ -51,7 +51,7 @@ namespace osu.Game.Skinning
|
|||||||
|
|
||||||
[UsedImplicitly(ImplicitUseKindFlags.InstantiatedWithFixedConstructorSignature)]
|
[UsedImplicitly(ImplicitUseKindFlags.InstantiatedWithFixedConstructorSignature)]
|
||||||
public LegacySkin(SkinInfo skin, IStorageResourceProvider resources)
|
public LegacySkin(SkinInfo skin, IStorageResourceProvider resources)
|
||||||
: this(skin, new LegacySkinResourceStore(skin, resources.Files), resources, "skin.ini")
|
: this(skin, new LegacyDatabasedSkinResourceStore(skin, resources.Files), resources, "skin.ini")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,9 +13,9 @@ namespace osu.Game.Skinning
|
|||||||
{
|
{
|
||||||
public class LegacySkinResourceStore : ResourceStore<byte[]>
|
public class LegacySkinResourceStore : ResourceStore<byte[]>
|
||||||
{
|
{
|
||||||
private readonly IHasRealmFiles source;
|
private readonly IHasNamedFiles source;
|
||||||
|
|
||||||
public LegacySkinResourceStore(IHasRealmFiles source, IResourceStore<byte[]> underlyingStore)
|
public LegacySkinResourceStore(IHasNamedFiles source, IResourceStore<byte[]> underlyingStore)
|
||||||
: base(underlyingStore)
|
: base(underlyingStore)
|
||||||
{
|
{
|
||||||
this.source = source;
|
this.source = source;
|
||||||
@ -32,7 +32,7 @@ namespace osu.Game.Skinning
|
|||||||
}
|
}
|
||||||
|
|
||||||
private string getPathForFile(string filename) =>
|
private string getPathForFile(string filename) =>
|
||||||
source.Files.FirstOrDefault(f => string.Equals(f.Filename, filename, StringComparison.OrdinalIgnoreCase))?.FileInfo.GetStoragePath();
|
source.Files.FirstOrDefault(f => string.Equals(f.Filename, filename, StringComparison.OrdinalIgnoreCase))?.File.GetStoragePath();
|
||||||
|
|
||||||
public override IEnumerable<string> GetAvailableResources() => source.Files.Select(f => f.Filename);
|
public override IEnumerable<string> GetAvailableResources() => source.Files.Select(f => f.Filename);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user