diff --git a/src/DesktopMagic/DataContexts/PluginEntryDataContext.cs b/src/DesktopMagic/DataContexts/PluginEntryDataContext.cs index c13876f..9fd8356 100644 --- a/src/DesktopMagic/DataContexts/PluginEntryDataContext.cs +++ b/src/DesktopMagic/DataContexts/PluginEntryDataContext.cs @@ -35,7 +35,8 @@ internal class PluginEntryDataContext(PluginMetadata pluginMetadata, ICommand co public string? Path => path; - public bool IsLocalPlugin => string.IsNullOrWhiteSpace(pluginMetadata.ProfileUri?.ToString()); + public bool IsLocalPlugin => pluginMetadata.IsLocalPlugin; + public ICommand Command => command; public ButtonData InstallUninstallButtonData => new(mode == Mode.Install ? PackIconKind.Download : PackIconKind.Remove, GetInstallUninstallButtonText(), true, Command); diff --git a/src/DesktopMagic/Plugins/PluginManager.xaml.cs b/src/DesktopMagic/Plugins/PluginManager.xaml.cs index 13a8922..f9ad05a 100644 --- a/src/DesktopMagic/Plugins/PluginManager.xaml.cs +++ b/src/DesktopMagic/Plugins/PluginManager.xaml.cs @@ -113,6 +113,7 @@ public partial class PluginManager : Window foreach (string pluginPath in Directory.GetDirectories(pluginsPath)) { string pluginMetadataPath = Path.Combine(pluginPath, "metadata.json"); + if (!File.Exists(pluginMetadataPath)) { continue; @@ -128,17 +129,18 @@ public partial class PluginManager : Window pluginManagerDataContext.InstalledPlugins.Add(new PluginEntryDataContext(pluginMetadata, new CommandHandler(async () => await Remove(pluginPath, pluginMetadata.Id)), PluginEntryDataContext.Mode.Uninstall, pluginPath)); _ = pluginIds.Add(pluginMetadata.Id); - if (string.IsNullOrEmpty(pluginMetadata.ProfileUri?.ToString())) + if (pluginMetadata.IsLocalPlugin) { continue; } Mod mod = await modIoClient.Games[ModIoGameId].Mods[pluginMetadata.Id].Get(); - if (DateTimeOffset.FromUnixTimeSeconds(mod.DateUpdated).DateTime > pluginMetadata.Updated && !pluginMetadata.Tags.Contains("Does Not Support Unloading")) + if (DateTimeOffset.FromUnixTimeSeconds(mod.DateUpdated).DateTime > pluginMetadata.Updated && pluginMetadata.SupportsUnloading) { await Remove(pluginPath, pluginMetadata.Id); await Install(mod); + pluginManagerDataContext.IsLoading = true; } } diff --git a/src/DesktopMagic/Plugins/PluginMetadata.cs b/src/DesktopMagic/Plugins/PluginMetadata.cs index 6c799ae..9bd42da 100644 --- a/src/DesktopMagic/Plugins/PluginMetadata.cs +++ b/src/DesktopMagic/Plugins/PluginMetadata.cs @@ -31,6 +31,12 @@ public class PluginMetadata public List Tags { get; set; } = []; + [JsonIgnore] + public bool SupportsUnloading => !Tags.Contains("Does Not Support Unloading"); + + [JsonIgnore] + public bool IsLocalPlugin => string.IsNullOrWhiteSpace(ProfileUri?.ToString()); + public PluginMetadata(Mod mod) { Name = mod.Name ?? mod.Id.ToString(); diff --git a/src/DesktopMagic/Plugins/PluginWindow.xaml.cs b/src/DesktopMagic/Plugins/PluginWindow.xaml.cs index f064020..c370585 100644 --- a/src/DesktopMagic/Plugins/PluginWindow.xaml.cs +++ b/src/DesktopMagic/Plugins/PluginWindow.xaml.cs @@ -218,17 +218,17 @@ public partial class PluginWindow : Window { Assembly dll; - if (PluginMetadata.Tags.Contains("Does Not Support Unloading")) - { - dll = Assembly.LoadFrom($"{PluginFolderPath}\\main.dll"); - } - else + if (PluginMetadata.SupportsUnloading) { byte[] assemblyData = File.ReadAllBytes($"{PluginFolderPath}\\main.dll"); using MemoryStream assemblyStream = new(assemblyData); dll = assemblyLoadContext.LoadFromStream(assemblyStream); } + else + { + dll = Assembly.LoadFrom($"{PluginFolderPath}\\main.dll"); + } Type? instanceType = Array.Find(dll.GetTypes(), type => type.GetTypeInfo().BaseType == typeof(Plugin));