Files
se-launcher/CringePlugins/Compatability/PluginLoaderConfig.cs
pas2704 c25bf3bb3d
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
Implement Migration of PluginLoader configs (UI is temporary atm)
Add profiles to Config
Error handling for package resolution
Remove debug code from wndproc hook
2024-11-09 18:23:40 -05:00

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;
}
}