• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

luttje / Key2Joy / 6517266969

14 Oct 2023 11:05AM UTC coverage: 12.469% (+0.2%) from 12.308%
6517266969

push

github

web-flow
Implementing plugins for better separation (#39)

* Start implementing plugins for better separation
* massive refactor in attempt to split appdomains for plugins
* (breaks old mapping profiles)
* Fix error when switching from mouse button trigger to keyboard trigger and clicking in the combobox where the mouse button capture textbox is.
* Simplify code by removing legacy
* SImplify grouping actions
* Fix profile and add helpful opposite mapping generator tool
* Change solution hierarchy
* Restrict AppDomain plugins went from Zone.MyComputer -> .Internet
* create keypair in ci
* Install the .NET framework tools
* Run command in workflow
* Plugin permissions. Plugins disabled by default
* update readme (icon is no longer used)
* Plugin action runs in seperated process
* Remove unused dependencies.
* Fix action name display for mapping
* Fix Lua plugin script calls (NOTE: laggy when using MessageBox)
* convert project to sdk style
* Add editorconfig and start cleaning up
* Fix documentation. Update namespaces to match files (breaks profiles)
* Include all projects in tests, disable building docs on debug
* Add messagebox script action
* Add tests for pluginhost
* Remove administrator from window title test
* add some icons to ui
* Add enabling/disabling plugins
* Close plugins when Key2Joy shuts down
* Fix appcommand failing
* Fix plugin permission form crashing. Fix plugin load exception not showing warning
* Handle plugin host closing better when app has crashed
* Seperate host and client logic in remote event subscriber
* Ensure the PluginHost shuts down if the app crashes
* Better error output for plugins
* Fix cmd interop not working, add some tests
* also generate docs on plugins
* Fix build order with docs
* Fix enum script parameters and ensure actions share environment scopes
* Fix _wpftmp folders being created dotnet/wpf#2930
* Fix sequence action. Add disabled trigger/action for unloaded plugins on start... (continued)

180 of 1703 branches covered (0.0%)

Branch coverage included in aggregate %.

6419 of 6419 new or added lines in 207 files covered. (100.0%)

1035 of 8041 relevant lines covered (12.87%)

8445.05 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

92.0
/Core/Key2Joy.Core/Plugins/MappingTypeFactory.cs
1
using System;
2
using System.Collections.Generic;
3
using Key2Joy.Contracts.Mapping;
4

5
namespace Key2Joy.Plugins;
6

7
/// <summary>
8
/// Creates instances of types, simply using Activator.CreateInstance
9
/// </summary>
10
public class MappingTypeFactory
11
{
12
    public string FullTypeName { get; private set; }
116✔
13

14
    public MappingAttribute Attribute { get; private set; }
94✔
15
    public IEnumerable<ExposedMethod> ExposedMethods { get; private set; }
87✔
16

17
    public MappingTypeFactory(string fullTypeName, MappingAttribute attribute, IEnumerable<ExposedMethod> exposedMethods = null)
57✔
18
    {
57✔
19
        this.FullTypeName = fullTypeName;
57✔
20
        this.Attribute = attribute;
57✔
21
        this.ExposedMethods = exposedMethods ?? new List<ExposedMethod>();
57!
22
    }
57✔
23

24
    public virtual T CreateInstance<T>(object[] constructorArguments) where T : AbstractMappingAspect => (T)Activator.CreateInstance(this.ToType(), constructorArguments);
29✔
25

26
    public virtual Type ToType() => Type.GetType(this.FullTypeName);
29✔
27
}
28

29
/// <summary>
30
/// Creates instances of types, simply using Activator.CreateInstance
31
/// </summary>
32
public class MappingTypeFactory<T> : MappingTypeFactory where T : AbstractMappingAspect
33
{
34
    public MappingTypeFactory(string fullTypeName, MappingAttribute attribute, IEnumerable<ExposedMethod> exposedMethods = null)
35
        : base(fullTypeName, attribute, exposedMethods)
57✔
36
    {
57✔
37
    }
57✔
38

39
    public virtual T CreateInstance(object[] constructorArguments) => base.CreateInstance<T>(constructorArguments);
29✔
40
}
41

42
/// <summary>
43
/// Creates the type by commanding the PluginHostProxy to create it.
44
/// </summary>
45
public class PluginMappingTypeFactory<T> : MappingTypeFactory<T> where T : AbstractMappingAspect
46
{
47
    private readonly PluginHostProxy pluginHost;
48
    private readonly Type hostBaseType;
49

50
    public PluginMappingTypeFactory(PluginHostProxy pluginHost, Type hostBaseType, string fullTypeName, MappingAttribute attribute, IReadOnlyList<ExposedMethod> exposedMethods = null)
51
        : base(fullTypeName, attribute, exposedMethods)
27✔
52
    {
27✔
53
        this.pluginHost = pluginHost;
27✔
54
        this.hostBaseType = hostBaseType;
27✔
55
    }
27✔
56

57
    public override T CreateInstance(object[] constructorArguments) => this.CreateInstance<T>(constructorArguments);
8✔
58

59
    public override T CreateInstance<T>(object[] constructorArguments) => this.pluginHost.CreateAspectInstance<T>(this.FullTypeName, constructorArguments);
8✔
60

61
    /// <summary>
62
    /// Since we can't get the Type in the other appdomain, we return the host/contract class it derives from instead.
63
    /// </summary>
64
    /// <returns></returns>
65
    public override Type ToType() => this.hostBaseType;
×
66
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc