From b1c16ed4a08ef461f0d1b112f5388340d27696a0 Mon Sep 17 00:00:00 2001 From: Ezio Date: Sat, 14 Feb 2026 12:48:58 -0700 Subject: [PATCH 1/3] write cache pretty --- src/PluginCache.as | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PluginCache.as b/src/PluginCache.as index 921dfc9..8213f52 100644 --- a/src/PluginCache.as +++ b/src/PluginCache.as @@ -67,7 +67,7 @@ namespace PluginCache } js["installed"] = jsInstalled; - Json::ToFile(pathInstalled, js); + Json::ToFile(pathInstalled, js, true); if (Setting_VerboseLog) { trace("Saved PluginCache.json"); From 248729eda88e3c24705fa5fcb901e6b79dcc642a Mon Sep 17 00:00:00 2001 From: Ezio Date: Sat, 14 Feb 2026 12:52:26 -0700 Subject: [PATCH 2/3] don't try to update folder plugins --- src/UpdateCheck.as | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/UpdateCheck.as b/src/UpdateCheck.as index 1ffb937..94684a2 100644 --- a/src/UpdateCheck.as +++ b/src/UpdateCheck.as @@ -83,6 +83,11 @@ void CheckForUpdatesAsync() continue; } + auto plugin = Meta::GetPluginFromSiteID(siteId); + if (plugin !is null and plugin.Type != Meta::PluginType::Zip) { + continue; + } + warn("New plugin update available for " + info.m_name + ": " + info.m_version.ToString() + " -> " + siteVersion); UI::ShowNotification( From 798757974898f02ba331c2714de4ab28db5cabeb Mon Sep 17 00:00:00 2001 From: Ezio Date: Sat, 28 Mar 2026 19:57:08 -0600 Subject: [PATCH 3/3] more safeguards, hopefully this is enough --- src/Update.as | 24 +++++++++++++++++++++++- src/UpdateCheck.as | 2 +- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/Update.as b/src/Update.as index e0062cf..76ac196 100644 --- a/src/Update.as +++ b/src/Update.as @@ -1,6 +1,11 @@ void PluginUninstallAsync(ref@ metaPlugin) { auto plugin = cast(metaPlugin); + if (plugin.Type != Meta::PluginType::Zip) { + warn("Can't uninstall plugin, not a zip: " + plugin.Name); + return; + } + string pluginSourcePath = plugin.SourcePath; string pluginIdentifier = plugin.ID; @@ -56,6 +61,11 @@ void PluginUpdateAsync(ref@ update) // If the plugin is currently loaded auto installedPlugin = Meta::GetPluginFromSiteID(au.m_siteID); if (installedPlugin !is null) { + if (installedPlugin.Type != Meta::PluginType::Zip) { + warn("Unable to update plugin " + installedPlugin.Name + " because it is not a zip!"); + return; + } + // Gather dependency index and start topological sort auto index = Meta::PluginIndex(); index.AddTree(installedPlugin); @@ -93,17 +103,25 @@ void UpdateAllPluginsAsync() for (uint i = 0; i < g_availableUpdates.Length; i++) { auto au = g_availableUpdates[i]; auto installedPlugin = Meta::GetPluginFromSiteID(au.m_siteID); - if (installedPlugin !is null) { + if (installedPlugin !is null && installedPlugin.Type == Meta::PluginType::Zip) { index.AddTree(installedPlugin); } } auto sortedPlugins = index.TopologicalSort(); + uint[] removeIndices; + // Uninstall and install the new version of each plugin for (uint i = 0; i < g_availableUpdates.Length; i++) { auto au = g_availableUpdates[i]; auto installedPlugin = Meta::GetPluginFromSiteID(au.m_siteID); if (installedPlugin !is null) { + if (installedPlugin.Type != Meta::PluginType::Zip) { + warn("Unable to update plugin " + installedPlugin.Name + " because it is not a zip!"); + removeIndices.InsertLast(i); + continue; + } + // Uninstall the plugin (this will also unload dependents) PluginUninstallAsync(installedPlugin); @installedPlugin = null; @@ -120,6 +138,10 @@ void UpdateAllPluginsAsync() } } + for (uint i = 0; i < removeIndices.Length; i++) { + g_availableUpdates.RemoveAt(removeIndices[i]); + } + // Load all plugins in the sorted index for (uint i = 0; i < sortedPlugins.Length; i++) { auto item = sortedPlugins[i]; diff --git a/src/UpdateCheck.as b/src/UpdateCheck.as index 94684a2..da35c37 100644 --- a/src/UpdateCheck.as +++ b/src/UpdateCheck.as @@ -84,7 +84,7 @@ void CheckForUpdatesAsync() } auto plugin = Meta::GetPluginFromSiteID(siteId); - if (plugin !is null and plugin.Type != Meta::PluginType::Zip) { + if (plugin !is null && plugin.Type != Meta::PluginType::Zip) { continue; }