Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
398 commits
Select commit Hold shift + click to select a range
29ab9db
fix reloaddata not working and refactor Init code
taooceros Jan 6, 2021
c129b7b
Add constrctor for PluginInitContext
taooceros Jan 6, 2021
63a9e03
format QueryForPlugin code
taooceros Jan 6, 2021
499a0ab
bump PropertyChanged.Fody to 3.3.1
JohnTheGr8 Jan 4, 2021
bc3dfd4
appveyor: publish self-contained
JohnTheGr8 Jan 4, 2021
952a57d
appveyor: collect squrrel artifacts
JohnTheGr8 Jan 5, 2021
b3b64e1
set SatelliteResourceLanguages for plugin projects
JohnTheGr8 Jan 5, 2021
99e0add
appveyor: deploy releases to github
JohnTheGr8 Jan 5, 2021
ce2d5d2
appveyor: remove zip of output from artifacts
JohnTheGr8 Jan 5, 2021
407d8f0
appveyor: simplify deploy conditions
JohnTheGr8 Jan 6, 2021
8b602ce
add default constructor for plugin init context to solve error in tes…
taooceros Jan 7, 2021
2b8c4c3
Merge pull request #275 from JohnTheGr8/release_in_ci
jjw24 Jan 7, 2021
012d2d0
Merge remote-tracking branch 'origin/dev' into PluginPriority
jjw24 Jan 7, 2021
a9aeecd
Merge remote-tracking branch 'upstream/dev' into UpdateJson
taooceros Jan 7, 2021
d0d938b
Add Cancellationtoken for Http.cs
taooceros Jan 7, 2021
a4edbc2
Move WebSearch to Async model
taooceros Jan 7, 2021
f72b716
use string.empty instead of null
taooceros Jan 7, 2021
e1f715e
change commnet
taooceros Jan 7, 2021
b348f1d
Merge pull request #253 from taooceros/UpdateJson
jjw24 Jan 7, 2021
7501a7e
version bump
jjw24 Jan 7, 2021
d223d2c
Merge pull request #281 from Flow-Launcher/version_bump_release
taooceros Jan 7, 2021
2b085db
Merge dev
taooceros Jan 7, 2021
a6609d6
Add Cancellationtoken for downloadasync
taooceros Jan 7, 2021
8a5f98a
Manually handling TaskCancelledException in search suggestion to avio…
taooceros Jan 7, 2021
86a9cf3
Optimize Websearch code
taooceros Jan 7, 2021
971d374
Merge Dev
taooceros Jan 7, 2021
919d5d5
add using for Bing search source
taooceros Jan 7, 2021
1003ce4
move using to more specific place in Google.cs
taooceros Jan 7, 2021
c939924
optimize code in searchsuggestions
taooceros Jan 7, 2021
a8e4c50
Move MatchResult to Flow.Launcher.Plugin so that plugins can utilize …
taooceros Jan 8, 2021
4f35e62
Add Http.Get and Http.GetAsync to IPublicAPI
taooceros Jan 8, 2021
8b813fe
Merge remote-tracking branch 'upstream/dev' into PluginAPIExpand
taooceros Jan 8, 2021
a3975a3
implement the Http method in publicapiinstance
taooceros Jan 8, 2021
bd74a87
add Http.DownloadAsync
taooceros Jan 8, 2021
4f5b2d3
Allow plugin to add & remove actionkeywords
taooceros Jan 8, 2021
6d5ade4
Plugins Manager Slovak translation
kubalav Jan 8, 2021
49560db
copy svg images to output from the main project
JohnTheGr8 Jan 9, 2021
8031ddf
Merge remote-tracking branch 'upstream/dev' into AcronymFuzzy
taooceros Jan 9, 2021
82fc546
Merge remote-tracking branch 'origin/RenderImprovement' into RenderIm…
taooceros Jan 9, 2021
3aa54d1
Merge remote-tracking branch 'upstream/dev' into RenderImprovement
taooceros Jan 9, 2021
5ab54f8
Merge branch 'RenderImprovement' into dev
taooceros Jan 9, 2021
62009ac
Merge remote-tracking branch 'upstream/dev' into DotNet5Upgrade
taooceros Jan 9, 2021
494312a
Merge dev
taooceros Jan 9, 2021
4b9ed75
Merge branch 'DotNet5Upgrade' into dev
taooceros Jan 9, 2021
dd074f4
change publish profile to Net5 one
taooceros Jan 9, 2021
a626e7b
try trim
taooceros Jan 9, 2021
92be6fd
Use Task.Yield to avoid using Parallel.For
taooceros Jan 9, 2021
0fc9f64
image not found issue in build
taooceros Jan 9, 2021
8bd6820
Merge branch 'PluginAsyncModel' into dev
taooceros Jan 9, 2021
b26cf22
Merge pull request #284 from JohnTheGr8/copy_svg_images_to_output
jjw24 Jan 9, 2021
777b0b9
Merge remote-tracking branch 'origin/dev' into PluginPriority
jjw24 Jan 9, 2021
16148d5
Fix Plugins Manager key name in Slovak translation
kubalav Jan 9, 2021
e96b84b
merge PR #283: update Slovak translation
JohnTheGr8 Jan 9, 2021
15a5bba
version bump for PluginsManager
jjw24 Jan 10, 2021
08e163c
Merge branch 'dev' into RenderImprovement
jjw24 Jan 10, 2021
30ececd
Merge remote-tracking branch 'upstream/dev' into RenderImprovement
taooceros Jan 10, 2021
97052b1
fix merge issue
taooceros Jan 10, 2021
691c2b0
increase edittime boundary
taooceros Jan 10, 2021
fc216c6
Merge remote-tracking branch 'origin/RenderImprovement' into RenderIm…
taooceros Jan 10, 2021
db0fcb2
Update README.md
jjw24 Jan 10, 2021
b97834d
update message + window location
jjw24 Jan 11, 2021
b1642cc
priority score variable for clarity and seperation from original score
jjw24 Jan 11, 2021
b9158e5
update typo
jjw24 Jan 11, 2021
96fc134
Merge pull request #276 from taooceros/PluginPriority
jjw24 Jan 11, 2021
94a0477
fix merge issue of result update event
taooceros Jan 12, 2021
3892b59
Remove extra null check (use string.iswhitespaceornull)
taooceros Jan 13, 2021
575ad91
Merge dev
taooceros Jan 13, 2021
fc536aa
make priority score higher
taooceros Jan 13, 2021
c39dfab
fix priority scoring
taooceros Jan 13, 2021
29ff073
Merge pull request #290 from taooceros/PriorityScoreHigher
jjw24 Jan 13, 2021
ca7a8c2
Update README.md
jjw24 Jan 13, 2021
7dab5a2
Merge pull request #289 from Flow-Launcher/update_readme
jjw24 Jan 13, 2021
a4c11df
use ready to run
taooceros Jan 14, 2021
8fe1fbc
Merge dev
taooceros Jan 14, 2021
a882dcd
Merge remote-tracking branch 'upstream/dev' into PluginAsyncModel
taooceros Jan 14, 2021
763b518
Add comment in IPublic, IAsyncPlugin, IReloadable, IAsyncReloadable
taooceros Jan 14, 2021
02211f2
Merge pull request #288 from Flow-Launcher/pluginsmanager_versionbump
jjw24 Jan 14, 2021
3d69998
fix potential duplicate item due to IResultUpdate event
taooceros Jan 14, 2021
c54b678
Merge dev
taooceros Jan 14, 2021
723265a
fix TopMostRecord and UserSelectedRecord due to System.Text.Json cann…
taooceros Jan 15, 2021
6655a8f
optimize code
taooceros Jan 15, 2021
5688f37
Stop ProgressBar animation when Flow is hidden
taooceros Jan 15, 2021
5430756
Merge pull request #293 from taooceros/SelectedCountOptimize
jjw24 Jan 17, 2021
114c12b
formatting and description
jjw24 Jan 17, 2021
d741a98
fixed last index time during init
jjw24 Jan 17, 2021
969265c
fix formatting
jjw24 Jan 17, 2021
539f4bf
add eol
jjw24 Jan 17, 2021
e9e99ab
Merge pull request #267 from taooceros/PluginAsyncModel
jjw24 Jan 17, 2021
4b9936b
Version bump Flow.Launcher.Plugin
jjw24 Jan 17, 2021
1cbe1a9
Merge remote-tracking branch 'upstream/dev' into RenderImprovement
taooceros Jan 17, 2021
3abc77f
Merge remote-tracking branch 'upstream/dev' into RenderImprovement
taooceros Jan 17, 2021
1071f75
Remove unused using
taooceros Jan 17, 2021
5011246
Add scoring to ContextMenu search
taooceros Jan 17, 2021
e2e3f4a
remove extra query building due to merge
taooceros Jan 17, 2021
bf96a60
Only wait PluginManifest downloading for 500ms to allow Flow to be us…
taooceros Jan 17, 2021
d203a7a
Add Cancellation Token
taooceros Jan 17, 2021
415adb7
Optimize Logic
taooceros Jan 17, 2021
2fecfa2
verison bump plugins manager
jjw24 Jan 17, 2021
485b314
Merge pull request #297 from taooceros/PluginManagerManifestTimeout
jjw24 Jan 17, 2021
72e40de
Merge branch 'dev' into versionbump_plugin
jjw24 Jan 17, 2021
ff26bcc
version bump plugins
jjw24 Jan 17, 2021
2643c7d
exclude index search on special chars
jjw24 Jan 18, 2021
ed1bf0e
version bump Explorer plugin
jjw24 Jan 18, 2021
2463582
fix error message not working + increase delay
jjw24 Jan 18, 2021
d7abae1
Add Cancellation token for file system enumeration
taooceros Jan 19, 2021
5db250f
Merge pull request #296 from Flow-Launcher/versionbump_plugin
jjw24 Jan 19, 2021
a0f611c
Merge branch 'dev' into exclude_chars_explorer
jjw24 Jan 19, 2021
0730956
Make pause and resume when progressbarvisibility changed.
taooceros Jan 19, 2021
4f12b80
fix testing
taooceros Jan 19, 2021
89443ba
fix formatting
jjw24 Jan 19, 2021
0de6c4d
Merge pull request #195 from taooceros/RenderImprovement
jjw24 Jan 19, 2021
ba236da
Merge remote-tracking branch 'upstream/dev' into ExplorerPathAsync
taooceros Jan 20, 2021
cd92512
Optimize code
taooceros Jan 20, 2021
1aa119d
fix some legacy code from #195
taooceros Jan 20, 2021
a42c9c0
Added themes.
lemonnuggets Jan 20, 2021
9d126df
Use List replace ObservableCollection to have control toward Capacity
taooceros Jan 20, 2021
912cca6
Use callback to check whether downloading manifest successfully.
taooceros Jan 20, 2021
2ca2041
Increase opacity for blurblack and blurwhite
taooceros Jan 20, 2021
258de01
Allign Gray and Light design with Darker
taooceros Jan 20, 2021
aa281a1
keep BlurBlack add darker version
jjw24 Jan 20, 2021
29a2713
Merge pull request #304 from lemonnuggets/new-themes
jjw24 Jan 20, 2021
a939087
Merge branch 'dev' into fix_errormsg_delay
jjw24 Jan 21, 2021
4e7c9a7
version bump PluginsManager
jjw24 Jan 21, 2021
49d5fae
formatting
jjw24 Jan 21, 2021
79962fb
Merge pull request #300 from Flow-Launcher/fix_errormsg_delay
taooceros Jan 21, 2021
5d1790c
change visibility from ProgressBar.Visibility to _viewModel.ProgressB…
taooceros Jan 21, 2021
9f8440b
Merge remote-tracking branch 'upstream/dev' into ExplorerPathAsync
taooceros Jan 21, 2021
e0c345a
removing legacy code for testing
taooceros Jan 21, 2021
8311b39
Add null check for OnCollectionChanged
taooceros Jan 21, 2021
5389763
Add another check to avoid some corner case
taooceros Jan 21, 2021
1a758c3
Use Token.throwifCancellationRequested
taooceros Jan 21, 2021
f388b75
Add index when calling NotifyCollectionChangeAction.Add
taooceros Jan 21, 2021
b426dd1
Rewrite LocationPathString match
taooceros Jan 22, 2021
3effb40
make it become an extension method
taooceros Jan 22, 2021
2db3f82
change logic
taooceros Jan 22, 2021
bc0146e
Use Window Search Orderby instead of getting the result and order the…
taooceros Jan 23, 2021
5285c46
fix testing
taooceros Jan 23, 2021
0fe92d3
fix testing and a potential error coding
taooceros Jan 23, 2021
7d333ae
Merge pull request #298 from Flow-Launcher/exclude_chars_explorer
taooceros Jan 23, 2021
e74a0c9
fix most untranslated string in Setting window
taooceros Jan 23, 2021
c5791b8
fix untranslaed string in updator
taooceros Jan 23, 2021
98760d8
Fix URL plugin untranslated string
taooceros Jan 23, 2021
27c6db2
fix websearch plugin untranslated string
taooceros Jan 23, 2021
3e6961d
automatically check whether we shall reindex when querying
taooceros Jan 23, 2021
267c796
await indexing process in Program plugin
taooceros Jan 23, 2021
a3a0623
Merge pull request #312 from taooceros/autoReindex
jjw24 Jan 24, 2021
4944a00
Merge remote-tracking branch 'origin/dev' into OrderByOpt
jjw24 Jan 24, 2021
cf60ce2
verision bump Explorer plugin
jjw24 Jan 24, 2021
8c84e63
Merge pull request #310 from taooceros/OrderByOpt
jjw24 Jan 24, 2021
19d23af
add test for when using wildcard directory search
jjw24 Jan 24, 2021
288baa5
Merge branch 'dev' into ExplorerDirectorySearchWithIndexFix
jjw24 Jan 24, 2021
d583078
version bump Explorer
jjw24 Jan 24, 2021
51c7b69
fix formatting
jjw24 Jan 24, 2021
e9462e8
revert change from check string is path back to check location exists
jjw24 Jan 24, 2021
bfa1aab
add comment explaining why location check is needed
jjw24 Jan 24, 2021
2968a59
revert unintended deletion
jjw24 Jan 24, 2021
d0af7a1
Merge pull request #309 from taooceros/ExplorerDirectorySearchWithInd…
jjw24 Jan 24, 2021
647156c
Merge branch 'dev' into ExplorerPathAsync
jjw24 Jan 24, 2021
337e3bb
Merge branch 'dev' into ProgressBarOpt
jjw24 Jan 24, 2021
db63833
add condition for progress bar to control pause and resume
jjw24 Jan 24, 2021
36e6f5e
Use _viewModel.MainWindowVisibility instead of Visibility
taooceros Jan 24, 2021
fc78c0c
Merge pull request #295 from taooceros/ProgressBarOpt
jjw24 Jan 24, 2021
587bf61
Merge remote-tracking branch 'upstream/dev' into ExplorerPathAsync
taooceros Jan 24, 2021
a721bd7
Merge remote-tracking branch 'upstream/dev' into PluginAPIExpand
taooceros Jan 24, 2021
f14da72
Add Acronym Support for Fuzzy Search
taooceros Oct 18, 2020
ab9e6a8
merge one extra condition to the switch case
taooceros Oct 18, 2020
b074902
merge one extra condition to the switch case
taooceros Oct 18, 2020
272f411
Add return statement....
taooceros Oct 18, 2020
787e569
use ?. and ?? instead of if == null
taooceros Oct 20, 2020
8a76ad0
Add number support (treat number as part of acronuym)
taooceros Oct 24, 2020
59e61ce
Add Mapping to original string after translation. Not sure about the …
taooceros Dec 22, 2020
1e016d7
optimize use
taooceros Dec 22, 2020
9aa4802
Use Binary Search instead of Linear search to reduce time complexity.
taooceros Dec 25, 2020
2130599
Use inner loop to evaluate acronym match (Big Change)
taooceros Dec 27, 2020
1cd21c0
Fix testing
taooceros Jan 24, 2021
1b7bb5e
Merge remote-tracking branch 'origin/AcronymFuzzy' into AcronymFuzzy
taooceros Jan 24, 2021
ff5e369
add return if no quick access links or query
jjw24 Jan 25, 2021
9914124
Remove extra checking
taooceros Jan 25, 2021
8a56cc6
Use singleton in QuickFolderAccess.cs
taooceros Jan 25, 2021
35782e4
Version Bump
taooceros Jan 25, 2021
8dc5def
Remove extra whitespace
taooceros Jan 25, 2021
e46feb1
fix formatting
jjw24 Jan 25, 2021
163bfa3
formatting and naming
jjw24 Jan 25, 2021
5dd12d2
Merge pull request #301 from taooceros/ExplorerPathAsync
jjw24 Jan 25, 2021
fd32d48
revert unintended CustomQueryHotkeySetting ui change
jjw24 Jan 26, 2021
934bad6
Merge pull request #311 from taooceros/FixUntranslatedString
jjw24 Jan 26, 2021
0c5d166
version bump for Url and WebSearch plugins
jjw24 Jan 26, 2021
ce525b3
Merge branch 'dev' into AcronymFuzzy
jjw24 Jan 26, 2021
7b999c5
Merge branch 'dev' into PluginAPIExpand
jjw24 Jan 26, 2021
e31bef7
fix formatting + naming
jjw24 Jan 26, 2021
d3127b7
Merge pull request #230 from taooceros/PluginAPIExpand
jjw24 Jan 26, 2021
cb13985
Merge remote-tracking branch 'origin/dev' into AcronymFuzzy
taooceros Jan 26, 2021
a918e7d
Merge Dev
taooceros Jan 26, 2021
900f009
Revert DotNet 5 update
taooceros Jan 26, 2021
597dc06
revert unexpected personal change
taooceros Jan 26, 2021
67b0bfd
Merge dev
taooceros Jan 26, 2021
f456595
remove unexpected order change
taooceros Jan 26, 2021
f3479f6
fix testing due to API expand
taooceros Jan 26, 2021
85dee95
add file and folder type loading
jjw24 Jan 26, 2021
cab7f94
context menu selection for adding to quick access
jjw24 Jan 26, 2021
3a1d408
rename project items to quick access link naming
jjw24 Jan 26, 2021
324ee62
rename quick folder access links to quick access links
jjw24 Jan 26, 2021
c02fa4b
rename ui elements
jjw24 Jan 26, 2021
44b3f19
fix typo
jjw24 Jan 26, 2021
82d9184
rename methods in quick access
jjw24 Jan 26, 2021
dd57bfc
add backwards compatibility with old list
jjw24 Jan 26, 2021
d90b6d2
add save after adding to quick access
jjw24 Jan 26, 2021
9331c80
rename folder link to access link
jjw24 Jan 26, 2021
889c853
version bump Explorer plugin
jjw24 Jan 26, 2021
f4ceb0e
Update Slovak translation
kubalav Jan 26, 2021
08eaaf4
Merge pull request #316 from kubalav/dev
jjw24 Jan 26, 2021
f848e68
version bump Url and WebSearch
jjw24 Jan 26, 2021
ccc677f
fix per comment
jjw24 Jan 26, 2021
5773829
add tool tip for quick access context menu
jjw24 Jan 26, 2021
b71203c
Merge branch 'dev' into add_file_quick_access
jjw24 Jan 26, 2021
8b698c4
update to empty list
jjw24 Jan 26, 2021
c0f60e2
Use type matching to create result
taooceros Jan 27, 2021
e615ad8
add remove from quick access in context menu
jjw24 Jan 27, 2021
d509b11
Merge pull request #315 from Flow-Launcher/add_file_quick_access
jjw24 Jan 27, 2021
715aafd
Merge branch 'dev' into AcronymFuzzy
jjw24 Jan 28, 2021
81733d3
fix formatting
jjw24 Jan 28, 2021
74f1b05
make map variable more clear + formatting
jjw24 Jan 28, 2021
a6ce350
fix formatting
jjw24 Jan 28, 2021
4993eda
fix formatting
jjw24 Jan 28, 2021
d81db91
fix formatting
jjw24 Jan 28, 2021
58b717c
Update summary
taooceros Jan 29, 2021
efdfd06
Merge branch 'AcronymFuzzy' of github.com:taooceros/Flow.Launcher int…
taooceros Jan 29, 2021
c875ad5
Make most class in Explorer plugin become static class
taooceros Jan 29, 2021
c395cc7
move control variable down for readability during debug
jjw24 Jan 31, 2021
bb6a911
add loop to check remaining acronyms if previous matched
jjw24 Jan 31, 2021
4cd093d
Fix Proxy
harrynull Feb 1, 2021
3453b17
Remove socketsHttpHandler
harrynull Feb 1, 2021
16da1e2
Merge pull request #320 from harrynull/fix_proxy
taooceros Feb 1, 2021
f700e9b
Add "" in FilesFolders.OpenPath to be able to open path with whitespace
taooceros Feb 1, 2021
99da6f2
move acronym check to method and update scoring to percentage based
jjw24 Feb 1, 2021
8fb2dad
add tests
jjw24 Feb 1, 2021
f32cbaf
Split name matching and desciption matching due to fuzzy change
taooceros Feb 1, 2021
1991824
fix a using
taooceros Feb 1, 2021
838d0ec
combine condition
jjw24 Feb 1, 2021
d9a4836
remove spacing
jjw24 Feb 1, 2021
2bdf69b
separate acronym count and check
jjw24 Feb 1, 2021
f9b7294
Optimize code
taooceros Feb 2, 2021
65a6548
Use int instead of decimal
taooceros Feb 2, 2021
95325a8
Merge pull request #4 from Flow-Launcher/acronym_scoring
taooceros Feb 2, 2021
4331398
update summary, comments & formatting
jjw24 Feb 2, 2021
2602cc0
version bump Program plugin
jjw24 Feb 2, 2021
9feb266
Merge pull request #185 from taooceros/AcronymFuzzy
jjw24 Feb 2, 2021
61d7f04
Merge pull request #321 from taooceros/ExplorerPathFix
jjw24 Feb 2, 2021
10c72ce
version bump Explorer
jjw24 Feb 2, 2021
1ec5023
Merge pull request #318 from taooceros/ResultManagerSingleton
jjw24 Feb 2, 2021
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
File renamed without changes
6 changes: 3 additions & 3 deletions Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json;
using Flow.Launcher.Infrastructure.Exception;
using Flow.Launcher.Infrastructure.Logger;
using Flow.Launcher.Plugin;
Expand Down Expand Up @@ -65,7 +65,7 @@ private List<Result> DeserializedResult(string output)
{
List<Result> results = new List<Result>();

JsonRPCQueryResponseModel queryResponseModel = JsonConvert.DeserializeObject<JsonRPCQueryResponseModel>(output);
JsonRPCQueryResponseModel queryResponseModel = JsonSerializer.Deserialize<JsonRPCQueryResponseModel>(output);
if (queryResponseModel.Result == null) return null;

foreach (JsonRPCResult result in queryResponseModel.Result)
Expand All @@ -84,7 +84,7 @@ private List<Result> DeserializedResult(string output)
else
{
string actionReponse = ExecuteCallback(result1.JsonRPCAction);
JsonRPCRequestModel jsonRpcRequestModel = JsonConvert.DeserializeObject<JsonRPCRequestModel>(actionReponse);
JsonRPCRequestModel jsonRpcRequestModel = JsonSerializer.Deserialize<JsonRPCRequestModel>(actionReponse);
if (jsonRpcRequestModel != null
&& !String.IsNullOrEmpty(jsonRpcRequestModel.Method)
&& jsonRpcRequestModel.Method.StartsWith("Flow.Launcher."))
Expand Down
8 changes: 4 additions & 4 deletions Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ internal PluginAssemblyLoader(string assemblyFilePath)
dependencyResolver = new AssemblyDependencyResolver(assemblyFilePath);
assemblyName = new AssemblyName(Path.GetFileNameWithoutExtension(assemblyFilePath));

referencedPluginPackageDependencyResolver =
referencedPluginPackageDependencyResolver =
new AssemblyDependencyResolver(Path.Combine(Constant.ProgramDirectory, "Flow.Launcher.Plugin.dll"));
}

Expand All @@ -38,15 +38,15 @@ protected override Assembly Load(AssemblyName assemblyName)
// that use Newtonsoft.Json
if (assemblyPath == null || ExistsInReferencedPluginPackage(assemblyName))
return null;

return LoadFromAssemblyPath(assemblyPath);
}

internal Type FromAssemblyGetTypeOfInterface(Assembly assembly, Type type)
internal Type FromAssemblyGetTypeOfInterface(Assembly assembly, params Type[] types)
{
var allTypes = assembly.ExportedTypes;

return allTypes.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(type));
return allTypes.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Intersect(types).Any());
}

internal bool ExistsInReferencedPluginPackage(AssemblyName assemblyName)
Expand Down
4 changes: 2 additions & 2 deletions Flow.Launcher.Core/Plugin/PluginConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
using System.Collections.Generic;
using System.Linq;
using System.IO;
using Newtonsoft.Json;
using Flow.Launcher.Infrastructure;
using Flow.Launcher.Infrastructure.Logger;
using Flow.Launcher.Plugin;
using System.Text.Json;

namespace Flow.Launcher.Core.Plugin
{
Expand Down Expand Up @@ -61,7 +61,7 @@ private static PluginMetadata GetPluginMetadata(string pluginDirectory)
PluginMetadata metadata;
try
{
metadata = JsonConvert.DeserializeObject<PluginMetadata>(File.ReadAllText(configPath));
metadata = JsonSerializer.Deserialize<PluginMetadata>(File.ReadAllText(configPath));
metadata.PluginDirectory = pluginDirectory;
// for plugins which doesn't has ActionKeywords key
metadata.ActionKeywords = metadata.ActionKeywords ?? new List<string> { metadata.ActionKeyword };
Expand Down
123 changes: 79 additions & 44 deletions Flow.Launcher.Core/Plugin/PluginManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Flow.Launcher.Infrastructure;
using Flow.Launcher.Infrastructure.Logger;
Expand Down Expand Up @@ -52,13 +53,14 @@ public static void Save()
}
}

public static void ReloadData()
public static async Task ReloadData()
{
foreach(var plugin in AllPlugins)
await Task.WhenAll(AllPlugins.Select(plugin => plugin.Plugin switch
{
var reloadablePlugin = plugin.Plugin as IReloadable;
reloadablePlugin?.ReloadData();
}
IReloadable p => Task.Run(p.ReloadData),
IAsyncReloadable p => p.ReloadDataAsync(),
_ => Task.CompletedTask,
}).ToArray());
}

static PluginManager()
Expand Down Expand Up @@ -86,50 +88,62 @@ public static void LoadPlugins(PluginsSettings settings)
/// Call initialize for all plugins
/// </summary>
/// <returns>return the list of failed to init plugins or null for none</returns>
public static void InitializePlugins(IPublicAPI api)
public static async Task InitializePlugins(IPublicAPI api)
{
API = api;
var failedPlugins = new ConcurrentQueue<PluginPair>();
Parallel.ForEach(AllPlugins, pair =>

var InitTasks = AllPlugins.Select(pair => Task.Run(async delegate
{
try
{
var milliseconds = Stopwatch.Debug($"|PluginManager.InitializePlugins|Init method time cost for <{pair.Metadata.Name}>", () =>
var milliseconds = pair.Plugin switch
{
pair.Plugin.Init(new PluginInitContext
{
CurrentPluginMetadata = pair.Metadata,
API = API
});
});
IAsyncPlugin plugin
=> await Stopwatch.DebugAsync($"|PluginManager.InitializePlugins|Init method time cost for <{pair.Metadata.Name}>",
() => plugin.InitAsync(new PluginInitContext(pair.Metadata, API))),
IPlugin plugin
=> Stopwatch.Debug($"|PluginManager.InitializePlugins|Init method time cost for <{pair.Metadata.Name}>",
() => plugin.Init(new PluginInitContext(pair.Metadata, API))),
_ => throw new ArgumentException(),
};
pair.Metadata.InitTime += milliseconds;
Log.Info($"|PluginManager.InitializePlugins|Total init cost for <{pair.Metadata.Name}> is <{pair.Metadata.InitTime}ms>");
Log.Info(
$"|PluginManager.InitializePlugins|Total init cost for <{pair.Metadata.Name}> is <{pair.Metadata.InitTime}ms>");
}
catch (Exception e)
{
Log.Exception(nameof(PluginManager), $"Fail to Init plugin: {pair.Metadata.Name}", e);
pair.Metadata.Disabled = true;
pair.Metadata.Disabled = true;
failedPlugins.Enqueue(pair);
}
});
}));

await Task.WhenAll(InitTasks);

_contextMenuPlugins = GetPluginsForInterface<IContextMenu>();
foreach (var plugin in AllPlugins)
{
if (IsGlobalPlugin(plugin.Metadata))
GlobalPlugins.Add(plugin);

// Plugins may have multiple ActionKeywords, eg. WebSearch
plugin.Metadata.ActionKeywords
.Where(x => x != Query.GlobalPluginWildcardSign)
.ToList()
.ForEach(x => NonGlobalPlugins[x] = plugin);
foreach (var actionKeyword in plugin.Metadata.ActionKeywords)
{
switch (actionKeyword)
{
case Query.GlobalPluginWildcardSign:
GlobalPlugins.Add(plugin);
break;
default:
NonGlobalPlugins[actionKeyword] = plugin;
break;
}
}
}

if (failedPlugins.Any())
{
var failed = string.Join(",", failedPlugins.Select(x => x.Metadata.Name));
API.ShowMsg($"Fail to Init Plugins", $"Plugins: {failed} - fail to load and would be disabled, please contact plugin creator for help", "", false);
API.ShowMsg($"Fail to Init Plugins",
$"Plugins: {failed} - fail to load and would be disabled, please contact plugin creator for help",
"", false);
}
}

Expand All @@ -146,24 +160,46 @@ public static List<PluginPair> ValidPluginsForQuery(Query query)
}
}

public static List<Result> QueryForPlugin(PluginPair pair, Query query)
public static async Task<List<Result>> QueryForPlugin(PluginPair pair, Query query, CancellationToken token)
{
var results = new List<Result>();
try
{
var metadata = pair.Metadata;
var milliseconds = Stopwatch.Debug($"|PluginManager.QueryForPlugin|Cost for {metadata.Name}", () =>

long milliseconds = -1L;

switch (pair.Plugin)
{
results = pair.Plugin.Query(query) ?? new List<Result>();
UpdatePluginMetadata(results, metadata, query);
});
case IAsyncPlugin plugin:
milliseconds = await Stopwatch.DebugAsync($"|PluginManager.QueryForPlugin|Cost for {metadata.Name}",
async () => results = await plugin.QueryAsync(query, token).ConfigureAwait(false));
break;
case IPlugin plugin:
await Task.Run(() => milliseconds = Stopwatch.Debug($"|PluginManager.QueryForPlugin|Cost for {metadata.Name}",
() => results = plugin.Query(query)), token).ConfigureAwait(false);
break;
default:
throw new ArgumentOutOfRangeException();
}
token.ThrowIfCancellationRequested();
UpdatePluginMetadata(results, metadata, query);

metadata.QueryCount += 1;
metadata.AvgQueryTime = metadata.QueryCount == 1 ? milliseconds : (metadata.AvgQueryTime + milliseconds) / 2;
metadata.AvgQueryTime =
metadata.QueryCount == 1 ? milliseconds : (metadata.AvgQueryTime + milliseconds) / 2;
token.ThrowIfCancellationRequested();
}
catch (OperationCanceledException)
{
// null will be fine since the results will only be added into queue if the token hasn't been cancelled
return results = null;
}
catch (Exception e)
{
Log.Exception($"|PluginManager.QueryForPlugin|Exception for plugin <{pair.Metadata.Name}> when query <{query}>", e);
}

return results;
}

Expand All @@ -182,11 +218,6 @@ public static void UpdatePluginMetadata(List<Result> results, PluginMetadata met
}
}

private static bool IsGlobalPlugin(PluginMetadata metadata)
{
return metadata.ActionKeywords.Contains(Query.GlobalPluginWildcardSign);
}

/// <summary>
/// get specified plugin, return null if not found
/// </summary>
Expand Down Expand Up @@ -222,16 +253,19 @@ public static List<Result> GetContextMenusForPlugin(Result result)
}
catch (Exception e)
{
Log.Exception($"|PluginManager.GetContextMenusForPlugin|Can't load context menus for plugin <{pluginPair.Metadata.Name}>", e);
Log.Exception(
$"|PluginManager.GetContextMenusForPlugin|Can't load context menus for plugin <{pluginPair.Metadata.Name}>",
e);
}
}

return results;
}

public static bool ActionKeywordRegistered(string actionKeyword)
{
return actionKeyword != Query.GlobalPluginWildcardSign
&& NonGlobalPlugins.ContainsKey(actionKeyword);
&& NonGlobalPlugins.ContainsKey(actionKeyword);
}

/// <summary>
Expand All @@ -249,6 +283,7 @@ public static void AddActionKeyword(string id, string newActionKeyword)
{
NonGlobalPlugins[newActionKeyword] = plugin;
}

plugin.Metadata.ActionKeywords.Add(newActionKeyword);
}

Expand All @@ -262,16 +297,16 @@ public static void RemoveActionKeyword(string id, string oldActionkeyword)
if (oldActionkeyword == Query.GlobalPluginWildcardSign
&& // Plugins may have multiple ActionKeywords that are global, eg. WebSearch
plugin.Metadata.ActionKeywords
.Where(x => x == Query.GlobalPluginWildcardSign)
.ToList()
.Count == 1)
.Where(x => x == Query.GlobalPluginWildcardSign)
.ToList()
.Count == 1)
{
GlobalPlugins.Remove(plugin);
}

if (oldActionkeyword != Query.GlobalPluginWildcardSign)
NonGlobalPlugins.Remove(oldActionkeyword);


plugin.Metadata.ActionKeywords.Remove(oldActionkeyword);
}
Expand Down
Loading