Skip to content

Commit 181d871

Browse files
authored
Merge pull request #249 from taooceros/PluginManagerImprove
Plugin manager improve
2 parents 952a242 + 000bafd commit 181d871

File tree

7 files changed

+245
-155
lines changed

7 files changed

+245
-155
lines changed

Flow.Launcher.Infrastructure/Http/Http.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public static async Task<string> Get([NotNull] string url, string encoding = "UT
5959
Log.Debug($"|Http.Get|Url <{url}>");
6060
var request = WebRequest.CreateHttp(url);
6161
request.Method = "GET";
62-
request.Timeout = 1000;
62+
request.Timeout = 6000;
6363
request.Proxy = WebProxy();
6464
request.UserAgent = UserAgent;
6565
var response = await request.GetResponseAsync() as HttpWebResponse;
@@ -73,5 +73,18 @@ public static async Task<string> Get([NotNull] string url, string encoding = "UT
7373

7474
return content;
7575
}
76+
77+
public static async Task<Stream> GetStreamAsync([NotNull] string url)
78+
{
79+
Log.Debug($"|Http.Get|Url <{url}>");
80+
var request = WebRequest.CreateHttp(url);
81+
request.Method = "GET";
82+
request.Timeout = 6000;
83+
request.Proxy = WebProxy();
84+
request.UserAgent = UserAgent;
85+
var response = await request.GetResponseAsync() as HttpWebResponse;
86+
response = response.NonNull();
87+
return response.GetResponseStream().NonNull();
88+
}
7689
}
77-
}
90+
}

Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,9 @@ internal class ContextMenu : IContextMenu
1010
{
1111
private PluginInitContext Context { get; set; }
1212

13-
private Settings Settings { get; set; }
14-
15-
public ContextMenu(PluginInitContext context, Settings settings)
13+
public ContextMenu(PluginInitContext context)
1614
{
1715
Context = context;
18-
Settings = settings;
1916
}
2017

2118
public List<Result> LoadContextMenus(Result selectedResult)
@@ -58,7 +55,7 @@ public List<Result> LoadContextMenus(Result selectedResult)
5855
? pluginManifestInfo.UrlSourceCode.Replace("/tree/master", "/issues/new/choose")
5956
: pluginManifestInfo.UrlSourceCode;
6057

61-
SharedCommands.SearchWeb.NewBrowserWindow(link);
58+
SharedCommands.SearchWeb.NewTabInBrowser(link);
6259
return true;
6360
}
6461
},
@@ -69,7 +66,7 @@ public List<Result> LoadContextMenus(Result selectedResult)
6966
IcoPath = selectedResult.IcoPath,
7067
Action = _ =>
7168
{
72-
SharedCommands.SearchWeb.NewBrowserWindow("https://github.com/Flow-Launcher/Flow.Launcher.PluginsManifest");
69+
SharedCommands.SearchWeb.NewTabInBrowser("https://github.com/Flow-Launcher/Flow.Launcher.PluginsManifest");
7370
return true;
7471
}
7572
}

Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
using Flow.Launcher.Infrastructure.Storage;
2-
using Flow.Launcher.Infrastructure.UserSettings;
32
using Flow.Launcher.Plugin.PluginsManager.ViewModels;
43
using Flow.Launcher.Plugin.PluginsManager.Views;
54
using System.Collections.Generic;
5+
using System.Linq;
66
using System.Windows.Controls;
7+
using Flow.Launcher.Infrastructure;
8+
using System;
9+
using System.Threading.Tasks;
710

811
namespace Flow.Launcher.Plugin.PluginsManager
912
{
@@ -17,6 +20,10 @@ public class Main : ISettingProvider, IPlugin, ISavable, IContextMenu, IPluginI1
1720

1821
private IContextMenu contextMenu;
1922

23+
internal PluginsManager pluginManager;
24+
25+
private DateTime lastUpdateTime;
26+
2027
public Control CreateSettingPanel()
2128
{
2229
return new PluginsManagerSettings(viewModel);
@@ -27,7 +34,9 @@ public void Init(PluginInitContext context)
2734
Context = context;
2835
viewModel = new SettingsViewModel(context);
2936
Settings = viewModel.Settings;
30-
contextMenu = new ContextMenu(Context, Settings);
37+
contextMenu = new ContextMenu(Context);
38+
pluginManager = new PluginsManager(Context, Settings);
39+
lastUpdateTime = DateTime.Now;
3140
}
3241

3342
public List<Result> LoadContextMenus(Result selectedResult)
@@ -39,17 +48,29 @@ public List<Result> Query(Query query)
3948
{
4049
var search = query.Search.ToLower();
4150

42-
var pluginManager = new PluginsManager(Context, Settings);
43-
44-
if (!string.IsNullOrEmpty(search)
45-
&& ($"{Settings.HotkeyUninstall} ".StartsWith(search) || search.StartsWith($"{Settings.HotkeyUninstall} ")))
46-
return pluginManager.RequestUninstall(search);
51+
if (string.IsNullOrWhiteSpace(search))
52+
return pluginManager.GetDefaultHotKeys();
4753

48-
if (!string.IsNullOrEmpty(search)
49-
&& ($"{Settings.HotkeyUpdate} ".StartsWith(search) || search.StartsWith($"{Settings.HotkeyUpdate} ")))
50-
return pluginManager.RequestUpdate(search);
54+
if ((DateTime.Now - lastUpdateTime).TotalHours > 12) // 12 hours
55+
{
56+
Task.Run(async () =>
57+
{
58+
await pluginManager.UpdateManifest();
59+
lastUpdateTime = DateTime.Now;
60+
});
61+
}
5162

52-
return pluginManager.RequestInstallOrUpdate(search);
63+
return search switch
64+
{
65+
var s when s.StartsWith(Settings.HotKeyInstall) => pluginManager.RequestInstallOrUpdate(s),
66+
var s when s.StartsWith(Settings.HotkeyUninstall) => pluginManager.RequestUninstall(s),
67+
var s when s.StartsWith(Settings.HotkeyUpdate) => pluginManager.RequestUpdate(s),
68+
_ => pluginManager.GetDefaultHotKeys().Where(hotkey =>
69+
{
70+
hotkey.Score = StringMatcher.FuzzySearch(search, hotkey.Title).Score;
71+
return hotkey.Score > 0;
72+
}).ToList()
73+
};
5374
}
5475

5576
public void Save()

Plugins/Flow.Launcher.Plugin.PluginsManager/Models/PluginsManifest.cs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using Flow.Launcher.Infrastructure.Http;
22
using Flow.Launcher.Infrastructure.Logger;
3-
using Newtonsoft.Json;
43
using System;
54
using System.Collections.Generic;
5+
using System.Text.Json;
66
using System.Threading.Tasks;
77

88
namespace Flow.Launcher.Plugin.PluginsManager.Models
@@ -12,21 +12,17 @@ internal class PluginsManifest
1212
internal List<UserPlugin> UserPlugins { get; private set; }
1313
internal PluginsManifest()
1414
{
15-
DownloadManifest();
15+
Task.Run(async () => await DownloadManifest()).Wait();
1616
}
1717

18-
private void DownloadManifest()
18+
internal async Task DownloadManifest()
1919
{
20-
var json = string.Empty;
2120
try
2221
{
23-
var t = Task.Run(
24-
async () =>
25-
json = await Http.Get("https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher.PluginsManifest/main/plugins.json"));
22+
await using var jsonStream = await Http.GetStreamAsync("https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher.PluginsManifest/main/plugins.json")
23+
.ConfigureAwait(false);
2624

27-
t.Wait();
28-
29-
UserPlugins = JsonConvert.DeserializeObject<List<UserPlugin>>(json);
25+
UserPlugins = await JsonSerializer.DeserializeAsync<List<UserPlugin>>(jsonStream).ConfigureAwait(false);
3026
}
3127
catch (Exception e)
3228
{

0 commit comments

Comments
 (0)