Skip to content

Commit 61c9797

Browse files
committed
Merge remote-tracking branch 'upstream/dev' into AcronymFuzzy
2 parents 706f30a + 69a5f29 commit 61c9797

File tree

78 files changed

+806
-553
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+806
-553
lines changed

Directory.Build.targets

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<Project>
2+
<Target Name="ExcludePluginProjectReferenceOutput"
3+
AfterTargets="AssignProjectConfiguration"
4+
BeforeTargets="ResolveProjectReferences"
5+
Condition="'$(OutputType)' == 'Library' and '$(CopyLocalLockFileAssemblies)' == 'true' and $(AssemblyName.EndsWith('Tests')) == 'false' ">
6+
<ItemGroup>
7+
<ProjectReferenceWithConfiguration Update="@(ProjectReferenceWithConfiguration)" >
8+
<Private>false</Private>
9+
</ProjectReferenceWithConfiguration>
10+
<ProjectReference Update="@(ProjectReference)" >
11+
<Private>false</Private>
12+
</ProjectReference>
13+
</ItemGroup>
14+
</Target>
15+
</Project>

Flow.Launcher.Core/Flow.Launcher.Core.csproj

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,8 @@
5454

5555
<ItemGroup>
5656
<PackageReference Include="FSharp.Core" Version="4.7.1" />
57-
<PackageReference Include="JetBrains.Annotations" Version="2019.1.3" />
58-
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
5957
<PackageReference Include="squirrel.windows" Version="1.5.2" />
60-
<PackageReference Include="PropertyChanged.Fody" Version="2.5.13" />
6158
<PackageReference Include="SharpZipLib" Version="1.2.0" />
62-
<PackageReference Include="System.Runtime" Version="4.3.1" />
6359
</ItemGroup>
6460

6561
<ItemGroup>
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
using Flow.Launcher.Infrastructure;
2+
using System;
3+
using System.IO;
4+
using System.Linq;
5+
using System.Reflection;
6+
using System.Runtime.Loader;
7+
8+
namespace Flow.Launcher.Core.Plugin
9+
{
10+
internal class PluginAssemblyLoader : AssemblyLoadContext
11+
{
12+
private readonly AssemblyDependencyResolver dependencyResolver;
13+
14+
private readonly AssemblyDependencyResolver referencedPluginPackageDependencyResolver;
15+
16+
private readonly AssemblyName assemblyName;
17+
18+
internal PluginAssemblyLoader(string assemblyFilePath)
19+
{
20+
dependencyResolver = new AssemblyDependencyResolver(assemblyFilePath);
21+
assemblyName = new AssemblyName(Path.GetFileNameWithoutExtension(assemblyFilePath));
22+
23+
referencedPluginPackageDependencyResolver =
24+
new AssemblyDependencyResolver(Path.Combine(Constant.ProgramDirectory, "Flow.Launcher.Plugin.dll"));
25+
}
26+
27+
internal Assembly LoadAssemblyAndDependencies()
28+
{
29+
return LoadFromAssemblyName(assemblyName);
30+
}
31+
32+
protected override Assembly Load(AssemblyName assemblyName)
33+
{
34+
string assemblyPath = dependencyResolver.ResolveAssemblyToPath(assemblyName);
35+
36+
// When resolving dependencies, ignore assembly depenedencies that already exits with Flow.Launcher.Plugin
37+
// Otherwise will get unexpected behaviour with plugins, e.g. JsonIgnore attribute not honored in WebSearch or other plugins
38+
// that use Newtonsoft.Json
39+
if (assemblyPath == null || ExistsInReferencedPluginPackage(assemblyName))
40+
return null;
41+
42+
return LoadFromAssemblyPath(assemblyPath);
43+
}
44+
45+
internal Type FromAssemblyGetTypeOfInterface(Assembly assembly, Type type)
46+
{
47+
var allTypes = assembly.ExportedTypes;
48+
49+
return allTypes.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(type));
50+
}
51+
52+
internal bool ExistsInReferencedPluginPackage(AssemblyName assemblyName)
53+
{
54+
return referencedPluginPackageDependencyResolver.ResolveAssemblyToPath(assemblyName) != null;
55+
}
56+
}
57+
}

Flow.Launcher.Core/Plugin/PluginsLoader.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,20 @@ public static IEnumerable<PluginPair> DotNetPlugins(List<PluginMetadata> source)
4141
{
4242

4343
#if DEBUG
44-
var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(metadata.ExecuteFilePath);
45-
var types = assembly.GetTypes();
46-
var type = types.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(typeof(IPlugin)));
44+
var assemblyLoader = new PluginAssemblyLoader(metadata.ExecuteFilePath);
45+
var assembly = assemblyLoader.LoadAssemblyAndDependencies();
46+
var type = assemblyLoader.FromAssemblyGetTypeOfInterface(assembly, typeof(IPlugin));
4747
var plugin = (IPlugin)Activator.CreateInstance(type);
4848
#else
4949
Assembly assembly = null;
5050
IPlugin plugin = null;
5151

5252
try
5353
{
54-
assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(metadata.ExecuteFilePath);
54+
var assemblyLoader = new PluginAssemblyLoader(metadata.ExecuteFilePath);
55+
assembly = assemblyLoader.LoadAssemblyAndDependencies();
5556

56-
var types = assembly.GetTypes();
57-
var type = types.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(typeof(IPlugin)));
57+
var type = assemblyLoader.FromAssemblyGetTypeOfInterface(assembly, typeof(IPlugin));
5858

5959
plugin = (IPlugin)Activator.CreateInstance(type);
6060
}

Flow.Launcher.Core/Resource/Theme.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class Theme
2121
private ResourceDictionary _oldResource;
2222
private string _oldTheme;
2323
public Settings Settings { get; set; }
24-
private const string Folder = "Themes";
24+
private const string Folder = Constant.Themes;
2525
private const string Extension = ".xaml";
2626
private string DirectoryPath => Path.Combine(Constant.ProgramDirectory, Folder);
2727
private string UserDirectoryPath => Path.Combine(DataLocation.DataDirectory(), Folder);

Flow.Launcher.Infrastructure/Alphabet.cs

Lines changed: 0 additions & 178 deletions
This file was deleted.

Flow.Launcher.Infrastructure/Constant.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,7 @@ public static class Constant
3333
public static readonly string QueryTextBoxIconImagePath = $"{ProgramDirectory}\\Images\\mainsearch.png";
3434

3535
public const string DefaultTheme = "Darker";
36+
37+
public const string Themes = "Themes";
3638
}
3739
}

Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,11 @@
4949
</ItemGroup>
5050

5151
<ItemGroup>
52-
<PackageReference Include="JetBrains.Annotations" Version="2019.1.3" />
5352
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
5453
<PackageReference Include="NLog.Schema" Version="4.7.0-rc1" />
5554
<PackageReference Include="NLog.Web.AspNetCore" Version="4.9.0" />
56-
<PackageReference Include="Pinyin4DotNet" Version="2016.4.23.4" />
5755
<PackageReference Include="System.Drawing.Common" Version="4.7.0" />
58-
<PackageReference Include="System.Runtime" Version="4.3.1" />
59-
<PackageReference Include="PropertyChanged.Fody" Version="2.5.13" />
56+
<PackageReference Include="ToolGood.Words.Pinyin" Version="3.0.1.4" />
6057
</ItemGroup>
6158

6259
<ItemGroup>

0 commit comments

Comments
 (0)