diff --git a/Core/Other/FormPlugins.cs b/Core/Other/FormPlugins.cs
index 6a6e5043..9ac67e12 100644
--- a/Core/Other/FormPlugins.cs
+++ b/Core/Other/FormPlugins.cs
@@ -76,7 +76,7 @@ namespace TweetDuck.Core.Other{
}
private void btnOpenFolder_Click(object sender, EventArgs e){
- using(Process.Start("explorer.exe", "\""+pluginManager.PathCustomPlugins+"\"")){}
+ using(Process.Start("explorer.exe", '"'+pluginManager.PathCustomPlugins+'"')){}
}
private void btnReload_Click(object sender, EventArgs e){
diff --git a/Core/TweetDeckBrowser.cs b/Core/TweetDeckBrowser.cs
index 9684ff54..57c98f97 100644
--- a/Core/TweetDeckBrowser.cs
+++ b/Core/TweetDeckBrowser.cs
@@ -71,6 +71,7 @@ namespace TweetDuck.Core{
this.plugins = plugins;
this.plugins.PluginChangedState += plugins_PluginChangedState;
+ this.plugins.PluginConfigureTriggered += plugins_PluginConfigureTriggered;
Program.UserConfig.MuteToggled += UserConfig_MuteToggled;
Program.UserConfig.ZoomLevelChanged += UserConfig_ZoomLevelChanged;
@@ -164,6 +165,10 @@ namespace TweetDuck.Core{
browser.ExecuteScriptAsync("TDPF_setPluginState", e.Plugin, e.IsEnabled);
}
+ private void plugins_PluginConfigureTriggered(object sender, PluginEventArgs e){
+ browser.ExecuteScriptAsync("TDPF_configurePlugin", e.Plugin);
+ }
+
private void UserConfig_MuteToggled(object sender, EventArgs e){
UpdateProperties();
}
diff --git a/Plugins/Controls/PluginControl.Designer.cs b/Plugins/Controls/PluginControl.Designer.cs
index decdd47a..7ddfb43f 100644
--- a/Plugins/Controls/PluginControl.Designer.cs
+++ b/Plugins/Controls/PluginControl.Designer.cs
@@ -31,7 +31,7 @@
this.flowLayoutInfo = new System.Windows.Forms.FlowLayoutPanel();
this.labelWebsite = new System.Windows.Forms.Label();
this.labelVersion = new System.Windows.Forms.Label();
- this.btnOpenConfig = new System.Windows.Forms.Button();
+ this.btnConfigure = new System.Windows.Forms.Button();
this.labelType = new TweetDuck.Core.Controls.LabelVertical();
this.panelDescription.SuspendLayout();
this.flowLayoutInfo.SuspendLayout();
@@ -135,16 +135,16 @@
this.labelVersion.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.labelVersion.UseMnemonic = false;
//
- // btnOpenConfig
+ // btnConfigure
//
- this.btnOpenConfig.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.btnOpenConfig.Location = new System.Drawing.Point(382, 80);
- this.btnOpenConfig.Name = "btnOpenConfig";
- this.btnOpenConfig.Size = new System.Drawing.Size(68, 23);
- this.btnOpenConfig.TabIndex = 4;
- this.btnOpenConfig.Text = "Configure";
- this.btnOpenConfig.UseVisualStyleBackColor = true;
- this.btnOpenConfig.Click += new System.EventHandler(this.btnOpenConfig_Click);
+ this.btnConfigure.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnConfigure.Location = new System.Drawing.Point(382, 80);
+ this.btnConfigure.Name = "btnConfigure";
+ this.btnConfigure.Size = new System.Drawing.Size(68, 23);
+ this.btnConfigure.TabIndex = 4;
+ this.btnConfigure.Text = "Configure";
+ this.btnConfigure.UseVisualStyleBackColor = true;
+ this.btnConfigure.Click += new System.EventHandler(this.btnConfigure_Click);
//
// labelType
//
@@ -163,7 +163,7 @@
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.labelType);
- this.Controls.Add(this.btnOpenConfig);
+ this.Controls.Add(this.btnConfigure);
this.Controls.Add(this.flowLayoutInfo);
this.Controls.Add(this.panelDescription);
this.Controls.Add(this.labelName);
@@ -194,7 +194,7 @@
private System.Windows.Forms.FlowLayoutPanel flowLayoutInfo;
private System.Windows.Forms.Label labelWebsite;
private System.Windows.Forms.Label labelVersion;
- private System.Windows.Forms.Button btnOpenConfig;
+ private System.Windows.Forms.Button btnConfigure;
private Core.Controls.LabelVertical labelType;
}
}
diff --git a/Plugins/Controls/PluginControl.cs b/Plugins/Controls/PluginControl.cs
index ba1818b1..b1c4ca80 100644
--- a/Plugins/Controls/PluginControl.cs
+++ b/Plugins/Controls/PluginControl.cs
@@ -1,7 +1,5 @@
using System;
-using System.Diagnostics;
using System.Drawing;
-using System.IO;
using System.Windows.Forms;
using TweetDuck.Core.Controls;
using TweetDuck.Core.Utils;
@@ -57,8 +55,9 @@ namespace TweetDuck.Plugins.Controls{
}
}
- private void btnOpenConfig_Click(object sender, EventArgs e){
- using(Process.Start("explorer.exe", "/select,\""+plugin.ConfigPath.Replace('/', '\\')+"\"")){}
+ private void btnConfigure_Click(object sender, EventArgs e){
+ pluginManager.ConfigurePlugin(plugin);
+ ParentForm?.Close();
}
private void btnToggleState_Click(object sender, EventArgs e){
@@ -87,14 +86,13 @@ namespace TweetDuck.Plugins.Controls{
labelName.ForeColor = textColor;
labelDescription.ForeColor = textColor;
btnToggleState.Text = isEnabled ? "Disable" : "Enable";
- btnOpenConfig.Visible = plugin.HasConfig;
- btnOpenConfig.Enabled = btnOpenConfig.Visible && File.Exists(plugin.ConfigPath);
+ btnConfigure.Visible = isEnabled && pluginManager.IsPluginConfigurable(plugin);
}
else{
labelName.ForeColor = Color.DarkRed;
labelDescription.ForeColor = Color.DarkRed;
btnToggleState.Visible = false;
- btnOpenConfig.Visible = false;
+ btnConfigure.Visible = false;
}
}
}
diff --git a/Plugins/Events/PluginChangedStateEventArgs.cs b/Plugins/Events/PluginChangedStateEventArgs.cs
index 5d643c23..7e024559 100644
--- a/Plugins/Events/PluginChangedStateEventArgs.cs
+++ b/Plugins/Events/PluginChangedStateEventArgs.cs
@@ -1,12 +1,8 @@
-using System;
-
-namespace TweetDuck.Plugins.Events{
- sealed class PluginChangedStateEventArgs : EventArgs{
- public Plugin Plugin { get; }
+namespace TweetDuck.Plugins.Events{
+ sealed class PluginChangedStateEventArgs : PluginEventArgs{
public bool IsEnabled { get; }
- public PluginChangedStateEventArgs(Plugin plugin, bool isEnabled){
- this.Plugin = plugin;
+ public PluginChangedStateEventArgs(Plugin plugin, bool isEnabled) : base(plugin){
this.IsEnabled = isEnabled;
}
}
diff --git a/Plugins/Events/PluginEventArgs.cs b/Plugins/Events/PluginEventArgs.cs
new file mode 100644
index 00000000..a41c3051
--- /dev/null
+++ b/Plugins/Events/PluginEventArgs.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace TweetDuck.Plugins.Events{
+ class PluginEventArgs : EventArgs{
+ public Plugin Plugin { get; }
+
+ public PluginEventArgs(Plugin plugin){
+ this.Plugin = plugin;
+ }
+ }
+}
diff --git a/Plugins/PluginBridge.cs b/Plugins/PluginBridge.cs
index 8d6eaf93..7436cf6e 100644
--- a/Plugins/PluginBridge.cs
+++ b/Plugins/PluginBridge.cs
@@ -15,9 +15,10 @@ namespace TweetDuck.Plugins{
private readonly PluginManager manager;
private readonly TwoKeyDictionary<int, string, string> fileCache = new TwoKeyDictionary<int, string, string>(4, 2);
- private readonly TwoKeyDictionary<int, string, InjectedHTML> notificationInjections = new TwoKeyDictionary<int,string,InjectedHTML>(4, 1);
+ private readonly TwoKeyDictionary<int, string, InjectedHTML> notificationInjections = new TwoKeyDictionary<int, string, InjectedHTML>(4, 1);
public IEnumerable<InjectedHTML> NotificationInjections => notificationInjections.InnerValues;
+ public HashSet<Plugin> WithConfigureFunction { get; } = new HashSet<Plugin>();
public PluginBridge(PluginManager manager){
this.manager = manager;
@@ -114,5 +115,13 @@ namespace TweetDuck.Plugins{
public void InjectIntoNotificationsAfter(int token, string key, string search, string html){
notificationInjections[token, key] = new InjectedHTML(InjectedHTML.Position.After, search, html);
}
+
+ public void SetConfigurable(int token){
+ Plugin plugin = manager.GetPluginFromToken(token);
+
+ if (plugin != null){
+ WithConfigureFunction.Add(plugin);
+ }
+ }
}
}
diff --git a/Plugins/PluginManager.cs b/Plugins/PluginManager.cs
index 463eefb4..978fb046 100644
--- a/Plugins/PluginManager.cs
+++ b/Plugins/PluginManager.cs
@@ -1,6 +1,7 @@
using CefSharp;
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.IO;
using System.Linq;
using TweetDuck.Plugins.Enums;
@@ -25,6 +26,7 @@ namespace TweetDuck.Plugins{
public event EventHandler<PluginErrorEventArgs> Reloaded;
public event EventHandler<PluginErrorEventArgs> Executed;
public event EventHandler<PluginChangedStateEventArgs> PluginChangedState;
+ public event EventHandler<PluginEventArgs> PluginConfigureTriggered;
private readonly string rootPath;
private readonly string configPath;
@@ -57,6 +59,24 @@ namespace TweetDuck.Plugins{
return plugins.Any(plugin => plugin.Environments.HasFlag(environment));
}
+ public bool IsPluginConfigurable(Plugin plugin){
+ return plugin.HasConfig || Bridge.WithConfigureFunction.Contains(plugin);
+ }
+
+ public void ConfigurePlugin(Plugin plugin){
+ if (Bridge.WithConfigureFunction.Contains(plugin)){
+ PluginConfigureTriggered?.Invoke(this, new PluginEventArgs(plugin));
+ }
+ else if (plugin.HasConfig){
+ if (File.Exists(plugin.ConfigPath)){
+ using(Process.Start("explorer.exe", "/select,\""+plugin.ConfigPath.Replace('/', '\\')+"\"")){}
+ }
+ else{
+ using(Process.Start("explorer.exe", '"'+plugin.GetPluginFolder(PluginFolder.Data).Replace('/', '\\')+'"')){}
+ }
+ }
+ }
+
public int GetTokenFromPlugin(Plugin plugin){
foreach(KeyValuePair<int, Plugin> kvp in tokens){
if (kvp.Value.Equals(plugin)){
diff --git a/Resources/Scripts/plugins.browser.js b/Resources/Scripts/plugins.browser.js
index 56aa7690..a164278a 100644
--- a/Resources/Scripts/plugins.browser.js
+++ b/Resources/Scripts/plugins.browser.js
@@ -35,6 +35,10 @@
install(plugin){
this.installed.push(plugin);
+ if (typeof plugin.obj.configure === "function"){
+ $TDP.setConfigurable(plugin.obj.$token);
+ }
+
if (!this.isDisabled(plugin)){
plugin.obj.enabled();
this.runWhenReady(plugin);
@@ -93,6 +97,13 @@
window.TD_PLUGINS.setState(window.TD_PLUGINS.findObject(identifier), enable);
};
+ //
+ // Block: Setup a function to trigger plugin configuration.
+ //
+ window.TDPF_configurePlugin = function(identifier){
+ window.TD_PLUGINS.findObject(identifier).obj.configure();
+ };
+
//
// Block: Setup a function to reload the page.
//
diff --git a/TweetDuck.csproj b/TweetDuck.csproj
index 1e838708..86169d2c 100644
--- a/TweetDuck.csproj
+++ b/TweetDuck.csproj
@@ -274,6 +274,7 @@
<SubType>Component</SubType>
</Compile>
<Compile Include="Plugins\Enums\PluginFolder.cs" />
+ <Compile Include="Plugins\Events\PluginEventArgs.cs" />
<Compile Include="Plugins\Plugin.cs" />
<Compile Include="Plugins\Events\PluginChangedStateEventArgs.cs" />
<Compile Include="Plugins\PluginBridge.cs" />