Implement Migration of PluginLoader configs (UI is temporary atm)
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
This commit is contained in:
2024-11-09 18:23:40 -05:00
parent 2e4c7f5e15
commit c25bf3bb3d
9 changed files with 126 additions and 16 deletions

View File

@@ -0,0 +1,70 @@
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;
}
}

View File

@@ -0,0 +1,12 @@
using System.Xml.Serialization;
namespace CringePlugins.Compatability;
//https://github.com/sepluginloader/PluginLoader/blob/main/PluginLoader/Profile.cs
[XmlType("Profile")]
public class PluginLoaderProfile
{
public string Key { get; set; } = "";
public string Name { get; set; } = "";
public string[] Plugins { get; set; } = [];
}