mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-04-28 00:15:47 +02:00
79 lines
2.1 KiB
C#
79 lines
2.1 KiB
C#
using System.Collections.Generic;
|
|
using System.IO;
|
|
using CefSharp;
|
|
using TweetDuck.Resources;
|
|
using TweetDuck.Utils;
|
|
using TweetLib.Core.Browser;
|
|
|
|
namespace TweetDuck.Browser.Adapters {
|
|
sealed class CefScriptExecutor : IScriptExecutor {
|
|
private readonly IWebBrowser browser;
|
|
|
|
public CefScriptExecutor(IWebBrowser browser) {
|
|
this.browser = browser;
|
|
}
|
|
|
|
public void RunFunction(string name, params object[] args) {
|
|
browser.ExecuteJsAsync(name, args);
|
|
}
|
|
|
|
public void RunScript(string identifier, string script) {
|
|
using IFrame frame = browser.GetMainFrame();
|
|
RunScript(frame, script, identifier);
|
|
}
|
|
|
|
public void RunBootstrap(string moduleNamespace) {
|
|
using IFrame frame = browser.GetMainFrame();
|
|
RunBootstrap(frame, moduleNamespace);
|
|
}
|
|
|
|
// Helpers
|
|
|
|
public static void RunScript(IFrame frame, string script, string identifier) {
|
|
if (script != null) {
|
|
frame.ExecuteJavaScriptAsync(script, identifier, 1);
|
|
}
|
|
}
|
|
|
|
public static void RunBootstrap(IFrame frame, string moduleNamespace) {
|
|
string script = GetBootstrapScript(moduleNamespace, includeStylesheets: true);
|
|
|
|
if (script != null) {
|
|
RunScript(frame, script, "bootstrap");
|
|
}
|
|
}
|
|
|
|
public static string GetBootstrapScript(string moduleNamespace, bool includeStylesheets) {
|
|
string script = ResourceUtils.ReadFileOrNull("bootstrap.js");
|
|
|
|
if (script == null) {
|
|
return null;
|
|
}
|
|
|
|
string path = Path.Combine(Program.ResourcesPath, moduleNamespace);
|
|
var files = new DirectoryInfo(path).GetFiles();
|
|
|
|
var moduleNames = new List<string>();
|
|
var stylesheetNames = new List<string>();
|
|
|
|
foreach (var file in files) {
|
|
var ext = Path.GetExtension(file.Name);
|
|
|
|
var targetList = ext switch {
|
|
".js" => moduleNames,
|
|
".css" => includeStylesheets ? stylesheetNames : null,
|
|
_ => null
|
|
};
|
|
|
|
targetList?.Add(Path.GetFileNameWithoutExtension(file.Name));
|
|
}
|
|
|
|
script = script.Replace("{{namespace}}", moduleNamespace);
|
|
script = script.Replace("{{modules}}", string.Join("|", moduleNames));
|
|
script = script.Replace("{{stylesheets}}", string.Join("|", stylesheetNames));
|
|
|
|
return script;
|
|
}
|
|
}
|
|
}
|