diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs
index 88d51eca10..fa65b923fb 100644
--- a/osu.Game/Skinning/SkinManager.cs
+++ b/osu.Game/Skinning/SkinManager.cs
@@ -39,6 +39,31 @@ namespace osu.Game.Skinning
Name = archive.Name
};
+ protected override void Populate(SkinInfo model, ArchiveReader archive)
+ {
+ base.Populate(model, archive);
+ populate(model);
+ }
+
+ ///
+ /// Populate a from its (if possible).
+ ///
+ ///
+ private void populate(SkinInfo model)
+ {
+ Skin reference = GetSkin(model);
+ if (!string.IsNullOrEmpty(reference.Configuration.SkinInfo.Name))
+ {
+ model.Name = reference.Configuration.SkinInfo.Name;
+ model.Creator = reference.Configuration.SkinInfo.Creator;
+ }
+ else
+ {
+ model.Name = model.Name.Replace(".osk", "");
+ model.Creator = "Unknown";
+ }
+ }
+
///
/// Retrieve a instance for the provided
///
@@ -65,6 +90,16 @@ namespace osu.Game.Skinning
if (skin.SkinInfo != CurrentSkinInfo.Value)
throw new InvalidOperationException($"Setting {nameof(CurrentSkin)}'s value directly is not supported. Use {nameof(CurrentSkinInfo)} instead.");
};
+
+ // migrate older imports which didn't have access to skin.ini
+ using (ContextFactory.GetForWrite())
+ {
+ foreach (var skinInfo in ModelStore.ConsumableItems.Where(s => s.Name.EndsWith(".osk")))
+ {
+ populate(skinInfo);
+ Update(skinInfo);
+ }
+ }
}
///