Add migration for skins which didn't get a proper name assigned

Also correctly imports new skins
This commit is contained in:
Dean Herbert 2018-03-14 19:35:43 +09:00
parent ec851648da
commit 7272ba2f1b
1 changed files with 35 additions and 0 deletions

View File

@ -39,6 +39,31 @@ public List<SkinInfo> GetAllUsableSkins()
Name = archive.Name
};
protected override void Populate(SkinInfo model, ArchiveReader archive)
{
base.Populate(model, archive);
populate(model);
}
/// <summary>
/// Populate a <see cref="SkinInfo"/> from its <see cref="SkinConfiguration"/> (if possible).
/// </summary>
/// <param name="model"></param>
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";
}
}
/// <summary>
/// Retrieve a <see cref="Skin"/> instance for the provided <see cref="SkinInfo"/>
/// </summary>
@ -65,6 +90,16 @@ public SkinManager(Storage storage, DatabaseContextFactory contextFactory, IIpcH
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);
}
}
}
/// <summary>