diff --git a/Core/FormBrowser.cs b/Core/FormBrowser.cs index 2c7aa659..e52a7b2d 100644 --- a/Core/FormBrowser.cs +++ b/Core/FormBrowser.cs @@ -209,12 +209,7 @@ private void browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e){ TweetDeckBridge.RestoreSessionData(e.Frame); ScriptLoader.ExecuteFile(e.Frame, "code.js"); ReinjectCustomCSS(Config.CustomBrowserCSS); - - if (plugins.HasAnyPlugin(PluginEnvironment.Browser)){ - ScriptLoader.ExecuteFile(e.Frame, PluginManager.PluginBrowserScriptFile); - ScriptLoader.ExecuteFile(e.Frame, PluginManager.PluginGlobalScriptFile); - plugins.ExecutePlugins(e.Frame, PluginEnvironment.Browser, true); - } + plugins.ExecutePlugins(e.Frame, PluginEnvironment.Browser); TweetDeckBridge.ResetStaticProperties(); diff --git a/Core/Notification/FormNotificationMain.cs b/Core/Notification/FormNotificationMain.cs index 10fae3d6..dde55700 100644 --- a/Core/Notification/FormNotificationMain.cs +++ b/Core/Notification/FormNotificationMain.cs @@ -17,10 +17,7 @@ partial class FormNotificationMain : FormNotificationBase{ private const int TimerBarHeight = 4; private static readonly string NotificationScriptIdentifier = ScriptLoader.GetRootIdentifier(NotificationScriptFile); - private static readonly string PluginScriptIdentifier = ScriptLoader.GetRootIdentifier(PluginManager.PluginNotificationScriptFile); - private static readonly string NotificationJS = ScriptLoader.LoadResource(NotificationScriptFile); - private static readonly string PluginJS = ScriptLoader.LoadResource(PluginManager.PluginNotificationScriptFile); private readonly PluginManager plugins; @@ -169,12 +166,7 @@ private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e){ if (e.Frame.IsMain && NotificationJS != null && browser.Address != "about:blank"){ e.Frame.ExecuteJavaScriptAsync(PropertyBridge.GenerateScript(PropertyBridge.Environment.Notification)); ScriptLoader.ExecuteScript(e.Frame, NotificationJS, NotificationScriptIdentifier); - - if (plugins.HasAnyPlugin(PluginEnvironment.Notification)){ - ScriptLoader.ExecuteScript(e.Frame, PluginJS, PluginScriptIdentifier); - ScriptLoader.ExecuteFile(e.Frame, PluginManager.PluginGlobalScriptFile); - plugins.ExecutePlugins(e.Frame, PluginEnvironment.Notification, false); - } + plugins.ExecutePlugins(e.Frame, PluginEnvironment.Notification); } } diff --git a/Plugins/Enums/PluginEnvironment.cs b/Plugins/Enums/PluginEnvironment.cs index bc86ee19..23702dba 100644 --- a/Plugins/Enums/PluginEnvironment.cs +++ b/Plugins/Enums/PluginEnvironment.cs @@ -17,7 +17,20 @@ public static IEnumerable<PluginEnvironment> Values{ } } - public static string GetScriptFile(this PluginEnvironment environment){ + public static bool IncludesDisabledPlugins(this PluginEnvironment environment){ + return environment == PluginEnvironment.Browser; + } + + public static string GetScriptIdentifier(this PluginEnvironment environment){ + switch(environment){ + case PluginEnvironment.None: return "root:plugins"; + case PluginEnvironment.Browser: return "root:plugins.browser"; + case PluginEnvironment.Notification: return "root:plugins.notification"; + default: return null; + } + } + + public static string GetPluginScriptFile(this PluginEnvironment environment){ switch(environment){ case PluginEnvironment.Browser: return "browser.js"; case PluginEnvironment.Notification: return "notification.js"; @@ -25,7 +38,7 @@ public static string GetScriptFile(this PluginEnvironment environment){ } } - public static string GetScriptVariables(this PluginEnvironment environment){ + public static string GetPluginScriptVariables(this PluginEnvironment environment){ switch(environment){ case PluginEnvironment.Browser: return "$,$TD,$TDP,TD"; case PluginEnvironment.Notification: return "$TD,$TDP"; diff --git a/Plugins/Plugin.cs b/Plugins/Plugin.cs index 16e14edd..46edb4fb 100644 --- a/Plugins/Plugin.cs +++ b/Plugins/Plugin.cs @@ -84,7 +84,7 @@ private void OnMetadataLoaded(){ public string GetScriptPath(PluginEnvironment environment){ if (Environments.HasFlag(environment)){ - string file = environment.GetScriptFile(); + string file = environment.GetPluginScriptFile(); return file != null ? Path.Combine(pathRoot, file) : string.Empty; } else{ @@ -152,7 +152,7 @@ public static Plugin CreateFromFolder(string path, PluginGroup group, out string private static bool LoadEnvironments(string path, Plugin plugin, out string error){ foreach(string file in Directory.EnumerateFiles(path, "*.js", SearchOption.TopDirectoryOnly).Select(Path.GetFileName)){ - plugin.Environments |= PluginEnvironmentExtensions.Values.FirstOrDefault(env => file.Equals(env.GetScriptFile(), StringComparison.Ordinal)); + plugin.Environments |= PluginEnvironmentExtensions.Values.FirstOrDefault(env => file.Equals(env.GetPluginScriptFile(), StringComparison.Ordinal)); } if (plugin.Environments == PluginEnvironment.None){ diff --git a/Plugins/PluginManager.cs b/Plugins/PluginManager.cs index 1d0f994d..a0c1056f 100644 --- a/Plugins/PluginManager.cs +++ b/Plugins/PluginManager.cs @@ -9,12 +9,14 @@ namespace TweetDuck.Plugins{ sealed class PluginManager{ - public const string PluginBrowserScriptFile = "plugins.browser.js"; - public const string PluginNotificationScriptFile = "plugins.notification.js"; - public const string PluginGlobalScriptFile = "plugins.js"; - private const int InvalidToken = 0; + private static readonly Dictionary<PluginEnvironment, string> PluginSetupScripts = new Dictionary<PluginEnvironment, string>(4){ + { PluginEnvironment.None, ScriptLoader.LoadResource("plugins.js") }, + { PluginEnvironment.Browser, ScriptLoader.LoadResource("plugins.browser.js") }, + { PluginEnvironment.Notification, ScriptLoader.LoadResource("plugins.notification.js") } + }; + public string PathOfficialPlugins => Path.Combine(rootPath, "official"); public string PathCustomPlugins => Path.Combine(rootPath, "user"); @@ -97,7 +99,17 @@ public void Reload(){ Reloaded?.Invoke(this, new PluginErrorEventArgs(loadErrors)); } - public void ExecutePlugins(IFrame frame, PluginEnvironment environment, bool includeDisabled){ + public void ExecutePlugins(IFrame frame, PluginEnvironment environment){ + if (HasAnyPlugin(environment)){ + ScriptLoader.ExecuteScript(frame, PluginSetupScripts[environment], environment.GetScriptIdentifier()); + ScriptLoader.ExecuteScript(frame, PluginSetupScripts[PluginEnvironment.None], PluginEnvironment.None.GetScriptIdentifier()); + ExecutePluginScripts(frame, environment); + } + } + + private void ExecutePluginScripts(IFrame frame, PluginEnvironment environment){ + bool includeDisabled = environment.IncludesDisabledPlugins(); + if (includeDisabled){ ScriptLoader.ExecuteScript(frame, PluginScriptGenerator.GenerateConfig(Config), "gen:pluginconfig"); } diff --git a/Plugins/PluginScriptGenerator.cs b/Plugins/PluginScriptGenerator.cs index d05ac36d..a85c9d5f 100644 --- a/Plugins/PluginScriptGenerator.cs +++ b/Plugins/PluginScriptGenerator.cs @@ -8,7 +8,7 @@ public static string GenerateConfig(PluginConfig config){ public static string GeneratePlugin(string pluginIdentifier, string pluginContents, int pluginToken, PluginEnvironment environment){ return PluginGen - .Replace("%params", environment.GetScriptVariables()) + .Replace("%params", environment.GetPluginScriptVariables()) .Replace("%id", pluginIdentifier) .Replace("%token", pluginToken.ToString()) .Replace("%contents", pluginContents);