All checks were successful
Build / Compute Version (push) Successful in 5s
Build / Build Nuget package (CringeBootstrap.Abstractions) (push) Successful in 1m24s
Build / Build Nuget package (NuGet) (push) Successful in 2m8s
Build / Build Nuget package (CringePlugins) (push) Successful in 3m21s
Build / Build Nuget package (SharedCringe) (push) Successful in 2m32s
Build / Build Launcher (push) Successful in 3m31s
Add profiles to Config Error handling for package resolution Remove debug code from wndproc hook
71 lines
1.8 KiB
C#
71 lines
1.8 KiB
C#
using CringePlugins.Config;
|
|
using CringePlugins.Resolver;
|
|
using NuGet.Versioning;
|
|
using System.Collections.Immutable;
|
|
using System.Xml.Serialization;
|
|
|
|
namespace CringePlugins.Compatability;
|
|
|
|
[XmlType("PluginConfig")]
|
|
public class PluginLoaderConfig
|
|
{
|
|
[XmlArrayItem("Id")]
|
|
public string[] Plugins { get; set; } = [];
|
|
|
|
[XmlArrayItem("Profile")]
|
|
public PluginLoaderProfile[] Profiles { get; set; } = [];
|
|
|
|
public PackagesConfig Migrate(PackagesConfig old)
|
|
{
|
|
var pluginsBuilder = ImmutableArray.CreateBuilder<PackageReference>();
|
|
var defaultVersion = new NuGetVersion(1, 0, 0);
|
|
foreach (var plugin in Plugins)
|
|
{
|
|
if (!IsValidId(plugin))
|
|
continue;
|
|
|
|
pluginsBuilder.Add(new PackageReference($"Plugin.{plugin.Replace('/', '.')}",
|
|
new(defaultVersion)));
|
|
}
|
|
|
|
var profiles = new Dictionary<string, ImmutableArray<PackageReference>>();
|
|
foreach (var profile in Profiles)
|
|
{
|
|
var builder = ImmutableArray.CreateBuilder<PackageReference>();
|
|
foreach (var plugin in profile.Plugins)
|
|
{
|
|
if (!IsValidId(plugin))
|
|
continue;
|
|
|
|
builder.Add(new PackageReference($"Plugin.{plugin.Replace('/', '.')}",
|
|
new(defaultVersion)));
|
|
}
|
|
|
|
profiles[profile.Name] = builder.ToImmutable();
|
|
}
|
|
|
|
return old with
|
|
{
|
|
Packages = pluginsBuilder.ToImmutableArray(),
|
|
Profiles = profiles
|
|
};
|
|
}
|
|
|
|
private static bool IsValidId(string pluginId)
|
|
{
|
|
var count = 0;
|
|
foreach (var c in pluginId)
|
|
{
|
|
if (c != '/')
|
|
continue;
|
|
|
|
count++;
|
|
|
|
if (count > 1)
|
|
return false;
|
|
}
|
|
|
|
return count == 1;
|
|
}
|
|
}
|