Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/PluginCache.as
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
24 changes: 23 additions & 1 deletion src/Update.as
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
void PluginUninstallAsync(ref@ metaPlugin)
{
auto plugin = cast<Meta::Plugin@>(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;

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand All @@ -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];
Expand Down
5 changes: 5 additions & 0 deletions src/UpdateCheck.as
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down