using System; using CefSharp; using TweetDuck.Browser.Adapters; using TweetDuck.Utils; using TweetLib.Core.Browser; using TweetLib.Core.Features.Plugins; using TweetLib.Core.Features.Plugins.Events; namespace TweetDuck.Plugins { sealed class PluginDispatcher : IPluginDispatcher { public event EventHandler<PluginDispatchEventArgs> Ready; private readonly IWebBrowser browser; private readonly IScriptExecutor executor; private readonly Func<string, bool> executeOnUrl; public PluginDispatcher(IWebBrowser browser, Func<string, bool> executeOnUrl) { this.executeOnUrl = executeOnUrl; this.browser = browser; this.browser.FrameLoadEnd += browser_FrameLoadEnd; this.executor = new CefScriptExecutor(browser); } void IPluginDispatcher.AttachBridge(string name, object bridge) { browser.RegisterJsBridge(name, bridge); } private void browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) { IFrame frame = e.Frame; if (frame.IsMain && executeOnUrl(frame.Url)) { Ready?.Invoke(this, new PluginDispatchEventArgs(executor)); } } } }