mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
add check downloaded plugin zip has same or lesser version
This commit is contained in:
parent
a796ac4c61
commit
ebf9ef1d80
2 changed files with 22 additions and 0 deletions
|
|
@ -14,6 +14,7 @@
|
|||
<system:String x:Key="plugin_pluginsmanager_install_in_progress">Plugin installation in progress. Please wait...</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_install_success_restart">Plugin successfully installed. Restarting Flow, please wait...</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_install_errormetadatafile">Unable to find the plugin.json metadata file from the extracted zip file.</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_install_error_duplicate">Error: A plugin which has the same or greater version with {0} already exists.</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_install_error_title">Error installing plugin</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_install_error_subtitle">Error occured while trying to install {0}</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_update_noresult_title">No update available</system:String>
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ using System.Collections.Generic;
|
|||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
|
|
@ -438,6 +439,17 @@ namespace Flow.Launcher.Plugin.PluginsManager
|
|||
string.Format("Unable to find plugin.json from the extracted zip file, or this path {0} does not exist", pluginFolderPath));
|
||||
}
|
||||
|
||||
if (SameOrLesserPluginVersionExists(metadataJsonFilePath))
|
||||
{
|
||||
MessageBox.Show(string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_error_duplicate"), plugin.Name),
|
||||
Context.API.GetTranslation("plugin_pluginsmanager_install_error_title"));
|
||||
|
||||
throw new InvalidOperationException(
|
||||
string.Format("A plugin with the same ID and version already exists, " +
|
||||
"or the version is greater than this downloaded plugin {0}",
|
||||
plugin.Name));
|
||||
}
|
||||
|
||||
var directory = string.IsNullOrEmpty(plugin.Version) ? $"{plugin.Name}-{Guid.NewGuid()}" : $"{plugin.Name}-{plugin.Version}";
|
||||
var newPluginPath = Path.Combine(DataLocation.PluginsDirectory, directory);
|
||||
|
||||
|
|
@ -532,5 +544,14 @@ namespace Flow.Launcher.Plugin.PluginsManager
|
|||
|
||||
return new List<Result>();
|
||||
}
|
||||
|
||||
private bool SameOrLesserPluginVersionExists(string metadataPath)
|
||||
{
|
||||
var newMetadata = JsonSerializer.Deserialize<PluginMetadata>(File.ReadAllText(metadataPath));
|
||||
return Context.API.GetAllPlugins()
|
||||
.Any(x => x.Metadata.ID == newMetadata.ID
|
||||
&& (x.Metadata.Version == newMetadata.Version)
|
||||
|| newMetadata.Version.CompareTo(x.Metadata.Version) < 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue