Added PluginsSection View and hooked it to the loader

This commit is contained in:
ruri
2020-03-11 03:30:44 +01:00
parent 68575abf53
commit f8e2cd5450
10 changed files with 117 additions and 16 deletions
+1
View File
@@ -88,6 +88,7 @@
<Label x:Name="menuOptionConfigCreator" Content="Configs" MouseDown="menuOptionConfigCreator_MouseDown" />
<Label x:Name="menuOptionHitsDatabase" Content="Hits DB" MouseDown="menuOptionHitsDatabase_MouseDown" />
<Label x:Name="menuOptionTools" Content="Tools" MouseDown="menuOptionTools_MouseDown" />
<Label x:Name="menuOptionPlugins" Content="Plugins" MouseDown="menuOptionPlugins_MouseDown" />
<Label x:Name="menuOptionSettings" Content="Settings" MouseDown="menuOptionSettings_MouseDown" />
<Label x:Name="menuOptionAbout" Content="About" MouseDown="menuOptionAbout_MouseDown" />
</StackPanel>
+17 -2
View File
@@ -19,6 +19,9 @@ using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Threading;
using OpenBullet.Plugins;
using System.Collections.Generic;
using OpenBullet.Views.UserControls;
namespace OpenBullet
{
@@ -38,6 +41,7 @@ namespace OpenBullet
public HitsDB HitsDBPage { get; set; }
public Settings OBSettingsPage { get; set; }
public ToolsSection ToolsPage { get; set; }
public PluginsSection PluginsPage { get; set; }
public About AboutPage { get; set; }
public Rectangle Bounds { get; private set; }
@@ -59,8 +63,8 @@ namespace OpenBullet
titleLabel.Content = title;
// Make sure all folders are there or recreate them
var folders = new string[] { "Captchas", "ChromeExtensions", "Configs", "DB", "Screenshots", "Settings", "Sounds", "Wordlists" };
foreach (var folder in folders.Select(f => System.IO.Path.Combine(Directory.GetCurrentDirectory(), f)))
var folders = new string[] { "Captchas", "ChromeExtensions", "Configs", "DB", "Plugins", "Screenshots", "Settings", "Sounds", "Wordlists" };
foreach (var folder in folders.Select(f => Path.Combine(Directory.GetCurrentDirectory(), f)))
{
if (!Directory.Exists(folder))
Directory.CreateDirectory(folder);
@@ -140,6 +144,9 @@ namespace OpenBullet
Topmost = OB.OBSettings.General.AlwaysOnTop;
// Load Plugins
var plugins = Loader.LoadPlugins(OB.pluginsFolder);
// ViewModels
OB.RunnerManager = new RunnerManagerViewModel();
OB.ProxyManager = new ProxyManagerViewModel();
@@ -164,6 +171,8 @@ namespace OpenBullet
OB.Logger.LogInfo(Components.Main, "Initialized Settings");
ToolsPage = new ToolsSection();
OB.Logger.LogInfo(Components.Main, "Initialized Tools");
PluginsPage = new PluginsSection(plugins);
OB.Logger.LogInfo(Components.Main, "Initialized Plugins");
AboutPage = new About();
menuOptionRunner_MouseDown(this, null);
@@ -284,6 +293,12 @@ namespace OpenBullet
menuOptionSelected(menuOptionTools);
}
private void menuOptionPlugins_MouseDown(object sender, MouseButtonEventArgs e)
{
Main.Content = PluginsPage;
menuOptionSelected(menuOptionPlugins);
}
private void menuOptionSettings_MouseDown(object sender, MouseButtonEventArgs e)
{
Main.Content = OBSettingsPage;
+1
View File
@@ -47,5 +47,6 @@ namespace OpenBullet
public static readonly string licenseFile = @"Settings/License.txt";
public static readonly string logFile = @"Log.txt";
public static readonly string configFolder = @"Configs";
public static readonly string pluginsFolder = @"Plugins";
}
}
+10 -3
View File
@@ -239,6 +239,9 @@
<Compile Include="LoadingWindow.xaml.cs">
<DependentUpon>LoadingWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Main\PluginsSection.xaml.cs">
<DependentUpon>PluginsSection.xaml</DependentUpon>
</Compile>
<Compile Include="Views\UserControls\ButtonContainer.xaml.cs">
<DependentUpon>ButtonContainer.xaml</DependentUpon>
</Compile>
@@ -412,8 +415,8 @@
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Views\Main\Tools.xaml.cs">
<DependentUpon>Tools.xaml</DependentUpon>
<Compile Include="Views\Main\ToolsSection.xaml.cs">
<DependentUpon>ToolsSection.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Main\Tools\ListGenerator.xaml.cs">
<DependentUpon>ListGenerator.xaml</DependentUpon>
@@ -542,6 +545,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\Main\PluginsSection.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\Main\RunnerManager.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@@ -721,7 +728,7 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\Main\Tools.xaml">
<Page Include="Views\Main\ToolsSection.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
+10 -4
View File
@@ -68,12 +68,18 @@ namespace OpenBullet.Plugins
// Get the first attribute
var attribute = method.GetCustomAttribute<Button>();
var parameters = method.GetParameters();
// TEMPORARY!!!
// Check if it accepts an ILogger
if (!method.GetParameters().Any(p => p.ParameterType == typeof(ILogger)))
// Check if it accepts 0 or 1 parameters
if (parameters.Length > 1)
{
throw new Exception("A Button method must support an ILogger");
return false;
}
// If the method accepts 1 parameter, check that its type is IApplication
if (parameters.Length == 1 && !parameters.Any(p => p.ParameterType == typeof(IApplication)))
{
return false;
}
return true;
+6 -2
View File
@@ -17,8 +17,10 @@ namespace OpenBullet.Plugins
/// </summary>
/// <param name="folder">The folder where plugins are located</param>
/// <returns>A collection of plugin controls.</returns>
public static IEnumerator<PluginControl> LoadPlugins(string folder)
public static IEnumerable<PluginControl> LoadPlugins(string folder)
{
var plugins = new List<PluginControl>();
foreach (var dll in Directory.GetFiles(folder, "*.dll"))
{
var asm = Assembly.LoadFrom(dll);
@@ -39,10 +41,12 @@ namespace OpenBullet.Plugins
// If it implements the IPlugin interface
if (type.GetInterface("IPlugin") == typeof(IPlugin))
{
yield return new PluginControl(type);
plugins.Add(new PluginControl(type));
}
}
}
return plugins;
}
/// <summary>
@@ -31,7 +31,6 @@ namespace OpenBullet.Repositories
Directory.CreateDirectory(Path.Combine(BaseFolder, entity.Category));
}
if (!File.Exists(path))
{
IOManager.SaveConfig(entity.Config, path);
+24
View File
@@ -0,0 +1,24 @@
<Page x:Class="OpenBullet.Views.Main.PluginsSection"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:OpenBullet.Views.Main"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="Plugins">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel x:Name="topMenu" Orientation="Horizontal">
<Label Content="Selected Plugin:" />
<ComboBox x:Name="pluginSelector" Width="200" Margin="5 0 0 0" SelectionChanged="pluginSelector_SelectionChanged" />
</StackPanel>
<Frame Grid.Row="1" x:Name="Main" NavigationUIVisibility="Hidden" />
</Grid>
</Page>
@@ -0,0 +1,47 @@
using OpenBullet.Views.UserControls;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace OpenBullet.Views.Main
{
/// <summary>
/// Logica di interazione per PluginsSection.xaml
/// </summary>
public partial class PluginsSection : Page
{
private List<PluginControl> controls;
public PluginsSection(IEnumerable<PluginControl> controls)
{
InitializeComponent();
this.controls = controls.ToList();
foreach (var control in this.controls)
{
pluginSelector.Items.Add(control.Plugin.Name);
}
if (this.controls.Count > 0)
{
pluginSelector.SelectedIndex = 0;
}
}
private void pluginSelector_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Main.Content = controls.First(c => c.Plugin.Name == (string)pluginSelector.SelectedValue);
}
}
}
@@ -10,12 +10,9 @@
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Border Grid.RowSpan="3" BorderBrush="{DynamicResource ForegroundMain}" BorderThickness="2" />
<Label FontWeight="Bold" Content="{Binding Plugin.Name}" />
<Label Grid.Row="0" FontWeight="Bold" Content="{Binding Plugin.Name}" />
<ItemsControl Grid.Row="1" ItemsSource="{Binding Controls}" Padding="5"/>
</Grid>
</UserControl>