From a460aefa1f6faca89a47491c86598365a5c9ea1c Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Dec 2020 19:58:27 +1100 Subject: [PATCH] add PluginsManager --- Flow.Launcher.sln | 16 +++++++ ...Flow.Launcher.Plugin.PluginsManager.csproj | 30 ++++++++++++ .../Main.cs | 10 ++++ .../Plugins.cs | 13 ++++++ .../PluginsManager.cs | 46 +++++++++++++++++++ .../PluginsManifest.cs | 35 ++++++++++++++ .../plugin.json | 14 ++++++ 7 files changed, 164 insertions(+) create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManifest.cs create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/plugin.json diff --git a/Flow.Launcher.sln b/Flow.Launcher.sln index 6196aa5df..22086b0bd 100644 --- a/Flow.Launcher.sln +++ b/Flow.Launcher.sln @@ -20,6 +20,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher", "Flow.Launc {59BD9891-3837-438A-958D-ADC7F91F6F7E} = {59BD9891-3837-438A-958D-ADC7F91F6F7E} {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0} = {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0} {F35190AA-4758-4D9E-A193-E3BDF6AD3567} = {F35190AA-4758-4D9E-A193-E3BDF6AD3567} + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE} = {70CB72BC-1CD6-453D-9CA5-F7E2441426FE} {9B130CC5-14FB-41FF-B310-0A95B6894C37} = {9B130CC5-14FB-41FF-B310-0A95B6894C37} {FDED22C8-B637-42E8-824A-63B5B6E05A3A} = {FDED22C8-B637-42E8-824A-63B5B6E05A3A} {A3DCCBCA-ACC1-421D-B16E-210896234C26} = {A3DCCBCA-ACC1-421D-B16E-210896234C26} @@ -71,6 +72,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Plugin.Explor EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Plugin.ProcessKiller", "Plugins\Flow.Launcher.Plugin.ProcessKiller\Flow.Launcher.Plugin.ProcessKiller.csproj", "{588088F4-3262-4F9F-9663-A05DE12534C3}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Flow.Launcher.Plugin.PluginsManager", "Plugins\Flow.Launcher.Plugin.PluginManager\Flow.Launcher.Plugin.PluginsManager.csproj", "{70CB72BC-1CD6-453D-9CA5-F7E2441426FE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -298,6 +301,18 @@ Global {588088F4-3262-4F9F-9663-A05DE12534C3}.Release|x64.Build.0 = Release|Any CPU {588088F4-3262-4F9F-9663-A05DE12534C3}.Release|x86.ActiveCfg = Release|Any CPU {588088F4-3262-4F9F-9663-A05DE12534C3}.Release|x86.Build.0 = Release|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|x64.ActiveCfg = Debug|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|x64.Build.0 = Debug|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|x86.ActiveCfg = Debug|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|x86.Build.0 = Debug|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|Any CPU.Build.0 = Release|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|x64.ActiveCfg = Release|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|x64.Build.0 = Release|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|x86.ActiveCfg = Release|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -316,6 +331,7 @@ Global {59BD9891-3837-438A-958D-ADC7F91F6F7E} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} {F9C4C081-4CC3-4146-95F1-E102B4E10A5F} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} {588088F4-3262-4F9F-9663-A05DE12534C3} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {F26ACB50-3F6C-4907-B0C9-1ADACC1D0DED} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj b/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj new file mode 100644 index 000000000..b1d0c6f68 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj @@ -0,0 +1,30 @@ + + + + Library + netcoreapp3.1 + true + true + true + false + + + + ..\..\Output\Debug\Plugins\Flow.Launcher.Plugin.PluginsManager + + + + ..\..\Output\Release\Plugins\Flow.Launcher.Plugin.PluginsManager + + + + + + + + + + PreserveNewest + + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs new file mode 100644 index 000000000..36e40bf1b --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Flow.Launcher.Plugin.PluginsManager +{ + class Main + { + } +} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs new file mode 100644 index 000000000..f6538b7ef --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Flow.Launcher.Plugin.PluginsManager +{ + internal class Plugin + { + public string Name { get; set; } + public string Url { get; set; } + public string Version { get; set; } + } +} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs new file mode 100644 index 000000000..055e027ad --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs @@ -0,0 +1,46 @@ +using Flow.Launcher.Infrastructure.Http; +using System; +using System.Collections.Generic; +using System.Net; +using System.Text; + +namespace Flow.Launcher.Plugin.PluginsManager +{ + internal class PluginsManager + { + internal void PluginInstall(Plugin plugin) + { + if (PluginExists()) + { + //prompt user if want to install + + return; + } + + PluginDowload(plugin.Url, ""); + } + + private void PluginDowload(string downloadUrl, string toFilePath) + { + using (var wc = new WebClient { Proxy = Http.WebProxy() }) + { + wc.DownloadFile(downloadUrl, toFilePath); + } + } + + internal void PluginUpdate() + { + + } + + internal bool PluginExists() + { + return false; + } + + internal void PluginsManifestSiteOpen() + { + + } + } +} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManifest.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManifest.cs new file mode 100644 index 000000000..d470a996c --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManifest.cs @@ -0,0 +1,35 @@ +using Flow.Launcher.Infrastructure.Http; +using Flow.Launcher.Infrastructure.Logger; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Net; +using System.Text; + +namespace Flow.Launcher.Plugin.PluginsManager +{ + class PluginsManifest + { + public List Plugins { get; private set; } + public PluginsManifest() + { + var json = string.Empty; + + using (var wc = new WebClient { Proxy = Http.WebProxy() }) + { + try + { + json = wc.DownloadString("https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher.PluginsManifest/main/plugins.json"); + } + catch (Exception e) + { + Log.Exception("|PluginManagement.GetManifest|Encountered error trying to download plugins manifest", e); + + Plugins = new List(); + } + } + + Plugins = !string.IsNullOrEmpty(json) ? JsonConvert.DeserializeObject>(json) : new List(); + } + } +} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginManager/plugin.json new file mode 100644 index 000000000..327011ac3 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/plugin.json @@ -0,0 +1,14 @@ +{ + "ID": "9f8f9b14-2518-4907-b211-35ab6290dee7", + "ActionKeywords": [ + "pm" + ], + "Name": "Plugins Manager", + "Description": "Management of installing, uninstalling or updating Flow Launcher plugins", + "Author": "Jeremy Wu", + "Version": "1.0.0", + "Language": "csharp", + "Website": "https://github.com/Flow-Launcher/Flow.Launcher", + "ExecuteFileName": "Flow.Launcher.Plugin.PluginsManager.dll", + "IcoPath": "Images\\pluginsmanager.png" +}