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"); 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 1ffb937..da35c37 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 && plugin.Type != Meta::PluginType::Zip) { + continue; + } + warn("New plugin update available for " + info.m_name + ": " + info.m_version.ToString() + " -> " + siteVersion); UI::ShowNotification(