From a6e2578133670281504e7def156a9d83da8d2e89 Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Mon, 28 Feb 2022 10:36:21 +0100 Subject: [PATCH 01/15] Init first version Known Problems/Issues: - We wait 5s for each response from Node -> C#, this is a problem if we wait for a Window result (like a MessageBox) - After 5s everything from SignalrSerializeHelper will return null. - IpcMain is not working (committed out multiple lines) - Unsure if this is needed because we're able to use signalr/razor/blazor for this - Hybrid Support is forced to be true - Electron HostHook dint works (also unsure if needed) - Demos are not converted yet Expect a lot of bugs ;-) --- ElectronNET.API/App.cs | 784 ++---- ElectronNET.API/AutoUpdater.cs | 299 +-- ElectronNET.API/BridgeConnector.cs | 44 - ElectronNET.API/BrowserView.cs | 22 +- ElectronNET.API/BrowserWindow.cs | 1235 ++++------ ElectronNET.API/Clipboard.cs | 144 +- ElectronNET.API/CommandLine.cs | 43 +- ElectronNET.API/Cookies.cs | 86 +- ElectronNET.API/Dialog.cs | 113 +- ElectronNET.API/Dock.cs | 108 +- ElectronNET.API/Electron.cs | 12 +- ElectronNET.API/Entities/CPUUsage.cs | 6 +- ElectronNET.API/Entities/LoginItemSettings.cs | 9 +- ElectronNET.API/Entities/MemoryInfo.cs | 7 +- ElectronNET.API/Entities/ProcessMetric.cs | 13 +- ElectronNET.API/Events.cs | 12 +- .../Extensions/SignalrSerializeHelper.cs | 915 +++++++ ElectronNET.API/GlobalShortcut.cs | 39 +- ElectronNET.API/HostHook.cs | 5 + ElectronNET.API/Hubs/HubElectron.cs | 648 +++++ ElectronNET.API/HybridSupport.cs | 3 +- ElectronNET.API/IpcMain.cs | 34 +- ElectronNET.API/Menu.cs | 30 +- ElectronNET.API/Models/ElectronClients.cs | 22 + ElectronNET.API/NativeTheme.cs | 83 +- ElectronNET.API/Notification.cs | 47 +- ElectronNET.API/PowerMonitor.cs | 108 +- ElectronNET.API/Screen.cs | 144 +- ElectronNET.API/Session.cs | 260 +- ElectronNET.API/Shell.cs | 99 +- ElectronNET.API/Tray.cs | 155 +- ElectronNET.API/WebContents.cs | 131 +- ElectronNET.API/WebHostBuilderExtensions.cs | 14 +- ElectronNET.API/WindowManager.cs | 72 +- .../ElectronHostHook/connector.js | 4 +- .../ElectronHostHook/connector.js.map | 2 +- .../ElectronHostHook/connector.ts | 6 +- .../ElectronHostHook/index.js.map | 2 +- ElectronNET.Host/ElectronHostHook/index.ts | 2 +- .../ElectronHostHook/package.json | 5 +- ElectronNET.Host/api/app.js | 137 +- ElectronNET.Host/api/app.js.map | 2 +- ElectronNET.Host/api/app.ts | 142 +- ElectronNET.Host/api/autoUpdater.js | 62 +- ElectronNET.Host/api/autoUpdater.js.map | 2 +- ElectronNET.Host/api/autoUpdater.ts | 62 +- ElectronNET.Host/api/browserView.js | 11 +- ElectronNET.Host/api/browserView.js.map | 2 +- ElectronNET.Host/api/browserView.ts | 15 +- ElectronNET.Host/api/browserWindows.js | 213 +- ElectronNET.Host/api/browserWindows.js.map | 2 +- ElectronNET.Host/api/browserWindows.ts | 217 +- ElectronNET.Host/api/clipboard.js | 29 +- ElectronNET.Host/api/clipboard.js.map | 2 +- ElectronNET.Host/api/clipboard.ts | 33 +- ElectronNET.Host/api/commandLine.js | 10 +- ElectronNET.Host/api/commandLine.js.map | 2 +- ElectronNET.Host/api/commandLine.ts | 14 +- ElectronNET.Host/api/dialog.js | 22 +- ElectronNET.Host/api/dialog.js.map | 2 +- ElectronNET.Host/api/dialog.ts | 26 +- ElectronNET.Host/api/dock.js | 20 +- ElectronNET.Host/api/dock.js.map | 2 +- ElectronNET.Host/api/dock.ts | 24 +- ElectronNET.Host/api/globalShortcut.js | 8 +- ElectronNET.Host/api/globalShortcut.js.map | 2 +- ElectronNET.Host/api/globalShortcut.ts | 11 +- ElectronNET.Host/api/ipc.js | 8 +- ElectronNET.Host/api/ipc.js.map | 2 +- ElectronNET.Host/api/ipc.ts | 12 +- ElectronNET.Host/api/menu.js | 6 +- ElectronNET.Host/api/menu.js.map | 2 +- ElectronNET.Host/api/menu.ts | 9 +- ElectronNET.Host/api/nativeTheme.js | 20 +- ElectronNET.Host/api/nativeTheme.js.map | 2 +- ElectronNET.Host/api/nativeTheme.ts | 23 +- ElectronNET.Host/api/notification.js | 16 +- ElectronNET.Host/api/notification.js.map | 2 +- ElectronNET.Host/api/notification.ts | 19 +- ElectronNET.Host/api/powerMonitor.js | 16 +- ElectronNET.Host/api/powerMonitor.js.map | 2 +- ElectronNET.Host/api/powerMonitor.ts | 19 +- ElectronNET.Host/api/screen.js | 32 +- ElectronNET.Host/api/screen.js.map | 2 +- ElectronNET.Host/api/screen.ts | 36 +- ElectronNET.Host/api/shell.js | 46 +- ElectronNET.Host/api/shell.js.map | 2 +- ElectronNET.Host/api/shell.ts | 52 +- ElectronNET.Host/api/tray.js | 27 +- ElectronNET.Host/api/tray.js.map | 2 +- ElectronNET.Host/api/tray.ts | 30 +- ElectronNET.Host/api/webContents.js | 109 +- ElectronNET.Host/api/webContents.js.map | 2 +- ElectronNET.Host/api/webContents.ts | 120 +- ElectronNET.Host/main.js | 237 +- ElectronNET.Host/package-lock.json | 2095 ++++++++++++++++- ElectronNET.Host/package.json | 2 + .../Controllers/HostHookController.cs | 6 +- .../ElectronHostHook/connector.js | 4 +- .../ElectronHostHook/connector.js.map | 2 +- .../ElectronHostHook/connector.ts | 6 +- .../ElectronHostHook/index.js.map | 2 +- ElectronNET.WebApp/ElectronHostHook/index.ts | 2 +- .../ElectronHostHook/package-lock.json | 889 ++++++- .../ElectronHostHook/package.json | 2 + ElectronNET.WebApp/ElectronNET.WebApp.csproj | 6 +- ElectronNET.WebApp/Program.cs | 26 +- .../Properties/launchSettings.json | 13 +- ElectronNET.WebApp/Startup.cs | 152 +- package-lock.json | 5 +- start.cmd | 1 + 111 files changed, 6931 insertions(+), 3978 deletions(-) delete mode 100644 ElectronNET.API/BridgeConnector.cs create mode 100644 ElectronNET.API/Extensions/SignalrSerializeHelper.cs create mode 100644 ElectronNET.API/Hubs/HubElectron.cs create mode 100644 ElectronNET.API/Models/ElectronClients.cs diff --git a/ElectronNET.API/App.cs b/ElectronNET.API/App.cs index 69d8722c..95f0df49 100644 --- a/ElectronNET.API/App.cs +++ b/ElectronNET.API/App.cs @@ -1,4 +1,6 @@ using ElectronNET.API.Entities; +using ElectronNET.API.Hubs; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -30,24 +32,21 @@ public event Action WindowAllClosed { if (_windowAllClosed == null) { - BridgeConnector.Socket.On("app-window-all-closed" + GetHashCode(), () => - { - if (!Electron.WindowManager.IsQuitOnWindowAllClosed || RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - _windowAllClosed(); - } - }); - - BridgeConnector.Socket.Emit("register-app-window-all-closed-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-app-window-all-closed-event", GetHashCode()); } _windowAllClosed += value; } remove { _windowAllClosed -= value; + } + } - if(_windowAllClosed == null) - BridgeConnector.Socket.Off("app-window-all-closed" + GetHashCode()); + public void TriggerOnWindowAllClosed() + { + if (!Electron.WindowManager.IsQuitOnWindowAllClosed || RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + _windowAllClosed(); } } @@ -67,60 +66,58 @@ public event Func BeforeQuit { if (_beforeQuit == null) { - BridgeConnector.Socket.On("app-before-quit" + GetHashCode(), async () => - { - await _beforeQuit(new QuitEventArgs()); - - if (_preventQuit) - { - _preventQuit = false; - } - else - { - if (_willQuit == null && _quitting == null) - { - Exit(); - } - else if (_willQuit != null) - { - await _willQuit(new QuitEventArgs()); - - if (_preventQuit) - { - _preventQuit = false; - } - else - { - if (_quitting == null) - { - Exit(); - } - else - { - await _quitting(); - Exit(); - } - } - } - else if (_quitting != null) - { - await _quitting(); - Exit(); - } - } - }); - - BridgeConnector.Socket.Emit("register-app-before-quit-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-app-before-quit-event", GetHashCode()); } _beforeQuit += value; } remove { _beforeQuit -= value; + } + } - if (_beforeQuit == null) - BridgeConnector.Socket.Off("app-before-quit" + GetHashCode()); + public async Task TriggerOnBeforeQuit(QuitEventArgs quitEventArgs) + { + await _beforeQuit(new QuitEventArgs()); + + if (_preventQuit) + { + _preventQuit = false; } + else + { + if (_willQuit == null && _quitting == null) + { + Exit(); + } + else if (_willQuit != null) + { + await _willQuit(new QuitEventArgs()); + + if (_preventQuit) + { + _preventQuit = false; + } + else + { + if (_quitting == null) + { + Exit(); + } + else + { + await _quitting(); + Exit(); + } + } + } + else if (_quitting != null) + { + await _quitting(); + Exit(); + } + } + _beforeQuit(quitEventArgs); } private event Func _beforeQuit; @@ -139,39 +136,37 @@ public event Func WillQuit { if (_willQuit == null) { - BridgeConnector.Socket.On("app-will-quit" + GetHashCode(), async () => - { - await _willQuit(new QuitEventArgs()); - - if (_preventQuit) - { - _preventQuit = false; - } - else - { - if (_quitting == null) - { - Exit(); - } - else - { - await _quitting(); - Exit(); - } - } - }); - - BridgeConnector.Socket.Emit("register-app-will-quit-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-app-will-quit-event", GetHashCode()); } _willQuit += value; } remove { _willQuit -= value; + } + } - if (_willQuit == null) - BridgeConnector.Socket.Off("app-will-quit" + GetHashCode()); + public async Task TriggerOnWillQuit(QuitEventArgs quitEventArgs) + { + await _willQuit(new QuitEventArgs()); + + if (_preventQuit) + { + _preventQuit = false; } + else + { + if (_quitting == null) + { + Exit(); + } + else + { + await _quitting(); + Exit(); + } + } + _willQuit(quitEventArgs); } private event Func _willQuit; @@ -187,26 +182,25 @@ public event Func Quitting { if (_quitting == null) { - BridgeConnector.Socket.On("app-will-quit" + GetHashCode() + "quitting", async () => - { - if(_willQuit == null) - { - await _quitting(); - Exit(); - } - }); - - BridgeConnector.Socket.Emit("register-app-will-quit-event", GetHashCode() + "quitting"); + Electron.SignalrElectron.Clients.All.SendAsync("register-app-will-quit-event", GetHashCode()); } _quitting += value; } remove { _quitting -= value; + } + } - if (_quitting == null) - BridgeConnector.Socket.Off("app-will-quit" + GetHashCode() + "quitting"); + public async Task TriggerOnQuitting() + { + if (_willQuit == null) + { + await _quitting(); + Exit(); } + + _quitting(); } private event Func _quitting; @@ -220,24 +214,21 @@ public event Action BrowserWindowBlur { if (_browserWindowBlur == null) { - BridgeConnector.Socket.On("app-browser-window-blur" + GetHashCode(), () => - { - _browserWindowBlur(); - }); - - BridgeConnector.Socket.Emit("register-app-browser-window-blur-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-app-browser-window-blur-event", GetHashCode()); } _browserWindowBlur += value; } remove { _browserWindowBlur -= value; - - if (_browserWindowBlur == null) - BridgeConnector.Socket.Off("app-browser-window-blur" + GetHashCode()); } } + public void TriggerOnBrowserWindowBlur() + { + _browserWindowBlur(); + } + private event Action _browserWindowBlur; /// @@ -249,24 +240,21 @@ public event Action BrowserWindowFocus { if (_browserWindowFocus == null) { - BridgeConnector.Socket.On("app-browser-window-focus" + GetHashCode(), () => - { - _browserWindowFocus(); - }); - - BridgeConnector.Socket.Emit("register-app-browser-window-focus-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-app-browser-window-focus-event", GetHashCode()); } _browserWindowFocus += value; } remove { _browserWindowFocus -= value; - - if (_browserWindowFocus == null) - BridgeConnector.Socket.Off("app-browser-window-focus" + GetHashCode()); } } + public void TriggerOnBrowserWindowFocus() + { + _browserWindowFocus(); + } + private event Action _browserWindowFocus; /// @@ -278,24 +266,21 @@ public event Action BrowserWindowCreated { if (_browserWindowCreated == null) { - BridgeConnector.Socket.On("app-browser-window-created" + GetHashCode(), () => - { - _browserWindowCreated(); - }); - - BridgeConnector.Socket.Emit("register-app-browser-window-created-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-app-browser-window-created-event", GetHashCode()); } _browserWindowCreated += value; } remove { _browserWindowCreated -= value; - - if (_browserWindowCreated == null) - BridgeConnector.Socket.Off("app-browser-window-created" + GetHashCode()); } } + public void TriggerOnBrowserWindowCreated() + { + _browserWindowCreated(); + } + private event Action _browserWindowCreated; /// @@ -307,24 +292,21 @@ public event Action WebContentsCreated { if (_webContentsCreated == null) { - BridgeConnector.Socket.On("app-web-contents-created" + GetHashCode(), () => - { - _webContentsCreated(); - }); - - BridgeConnector.Socket.Emit("register-app-web-contents-created-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-app-web-contents-created-event", GetHashCode()); } _webContentsCreated += value; } remove { _webContentsCreated -= value; - - if (_webContentsCreated == null) - BridgeConnector.Socket.Off("app-web-contents-created" + GetHashCode()); } } + public void TriggerOnWebContentsCreated() + { + _browserWindowCreated(); + } + private event Action _webContentsCreated; /// @@ -338,24 +320,21 @@ public event Action AccessibilitySupportChanged { if (_accessibilitySupportChanged == null) { - BridgeConnector.Socket.On("app-accessibility-support-changed" + GetHashCode(), (state) => - { - _accessibilitySupportChanged((bool)state); - }); - - BridgeConnector.Socket.Emit("register-app-accessibility-support-changed-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-app-accessibility-support-changed-event", GetHashCode()); } _accessibilitySupportChanged += value; } remove { _accessibilitySupportChanged -= value; - - if (_accessibilitySupportChanged == null) - BridgeConnector.Socket.Off("app-accessibility-support-changed" + GetHashCode()); } } + public void TriggerOnAccessibilitySupportChanged(bool state) + { + _accessibilitySupportChanged(state); + } + private event Action _accessibilitySupportChanged; /// @@ -411,24 +390,21 @@ public event Action OpenFile { if (_openFile == null) { - BridgeConnector.Socket.On("app-open-file" + GetHashCode(), (file) => - { - _openFile(file.ToString()); - }); - - BridgeConnector.Socket.Emit("register-app-open-file-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-app-open-file-event", GetHashCode()); } _openFile += value; } remove { _openFile -= value; - - if (_openFile == null) - BridgeConnector.Socket.Off("app-open-file" + GetHashCode()); } } + public void TriggerOnOpenFile(string openFile) + { + _openFile(openFile); + } + private event Action _openFile; @@ -442,24 +418,22 @@ public event Action OpenUrl { if (_openUrl == null) { - BridgeConnector.Socket.On("app-open-url" + GetHashCode(), (url) => - { - _openUrl(url.ToString()); - }); - - BridgeConnector.Socket.Emit("register-app-open-url-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-app-open-url-event", GetHashCode()); } _openUrl += value; } remove { _openUrl -= value; - - if (_openUrl == null) - BridgeConnector.Socket.Off("app-open-url" + GetHashCode()); } } + public void TriggerOnOpenUrl(string openUrl) + { + _openUrl(openUrl); + } + + private event Action _openUrl; /// @@ -479,7 +453,7 @@ public string Name } set { - BridgeConnector.Socket.Emit("appSetName", value); + Electron.SignalrElectron.Clients.All.SendAsync("appSetName", value); } } @@ -499,13 +473,8 @@ public Task NameAsync { var taskCompletionSource = new TaskCompletionSource(); - BridgeConnector.Socket.On("appGetNameCompleted", (result) => - { - BridgeConnector.Socket.Off("appGetNameCompleted"); - taskCompletionSource.SetResult((string)result); - }); - - BridgeConnector.Socket.Emit("appGetName"); + var signalrResult = SignalrSerializeHelper.GetSignalrResultString("appGetName"); + taskCompletionSource.SetResult(signalrResult.Result); return taskCompletionSource.Task; }); @@ -551,9 +520,9 @@ internal static App Instance /// guarantees that all beforeunload and unload event handlers are correctly executed. It is possible /// that a window cancels the quitting by returning in the beforeunload event handler. /// - public void Quit() + public async void Quit() { - BridgeConnector.Socket.Emit("appQuit"); + await Electron.SignalrElectron.Clients.All.SendAsync("appQuit"); } /// @@ -561,9 +530,9 @@ public void Quit() /// events will not be emitted. /// /// Exits immediately with exitCode. exitCode defaults to 0. - public void Exit(int exitCode = 0) + public async void Exit(int exitCode = 0) { - BridgeConnector.Socket.Emit("appExit", exitCode); + await Electron.SignalrElectron.Clients.All.SendAsync("appExit", exitCode); } /// @@ -576,9 +545,9 @@ public void Exit(int exitCode = 0) /// When is called for multiple times, multiple instances will be started after current instance /// exited. /// - public void Relaunch() + public async void Relaunch() { - BridgeConnector.Socket.Emit("appRelaunch"); + await Electron.SignalrElectron.Clients.All.SendAsync("appRelaunch"); } /// @@ -594,18 +563,18 @@ public void Relaunch() /// exited. /// /// Options for the relaunch. - public void Relaunch(RelaunchOptions relaunchOptions) + public async void Relaunch(RelaunchOptions relaunchOptions) { - BridgeConnector.Socket.Emit("appRelaunch", JObject.FromObject(relaunchOptions, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("appRelaunch", JObject.FromObject(relaunchOptions, _jsonSerializer)); } /// /// On Linux, focuses on the first visible window. On macOS, makes the application the active app. On Windows, focuses /// on the application's first window. /// - public void Focus() + public async void Focus() { - BridgeConnector.Socket.Emit("appFocus"); + await Electron.SignalrElectron.Clients.All.SendAsync("appFocus"); } /// @@ -614,25 +583,25 @@ public void Focus() /// /// You should seek to use the option as sparingly as possible. /// - public void Focus(FocusOptions focusOptions) + public async void Focus(FocusOptions focusOptions) { - BridgeConnector.Socket.Emit("appFocus", JObject.FromObject(focusOptions, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("appFocus", JObject.FromObject(focusOptions, _jsonSerializer)); } /// /// Hides all application windows without minimizing them. /// - public void Hide() + public async void Hide() { - BridgeConnector.Socket.Emit("appHide"); + await Electron.SignalrElectron.Clients.All.SendAsync("appHide"); } /// /// Shows application windows after they were hidden. Does not automatically focus them. /// - public void Show() + public async void Show() { - BridgeConnector.Socket.Emit("appShow"); + await Electron.SignalrElectron.Clients.All.SendAsync("appShow"); } /// @@ -640,22 +609,7 @@ public void Show() /// public async Task GetAppPathAsync(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using(cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appGetAppPathCompleted", (path) => - { - BridgeConnector.Socket.Off("appGetAppPathCompleted"); - taskCompletionSource.SetResult(path.ToString()); - }); - - BridgeConnector.Socket.Emit("appGetAppPath"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return (await SignalrSerializeHelper.GetSignalrResultString("appGetAppPath")); } /// @@ -666,9 +620,9 @@ public async Task GetAppPathAsync(CancellationToken cancellationToken = /// ~/Library/Logs/YourAppName on macOS, and inside the userData directory on Linux and Windows. /// /// A custom path for your logs. Must be absolute. - public void SetAppLogsPath(string path) + public async void SetAppLogsPath(string path) { - BridgeConnector.Socket.Emit("appSetAppLogsPath", path); + await Electron.SignalrElectron.Clients.All.SendAsync("appSetAppLogsPath", path); } /// @@ -681,23 +635,7 @@ public void SetAppLogsPath(string path) /// A path to a special directory or file associated with name. public async Task GetPathAsync(PathName pathName, CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using(cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appGetPathCompleted", (path) => - { - BridgeConnector.Socket.Off("appGetPathCompleted"); - - taskCompletionSource.SetResult(path.ToString()); - }); - - BridgeConnector.Socket.Emit("appGetPath", pathName.GetDescription()); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return (await SignalrSerializeHelper.GetSignalrResultStringParameter("appGetPath", pathName.GetDescription())); } /// @@ -712,9 +650,9 @@ public async Task GetPathAsync(PathName pathName, CancellationToken canc /// Special directory. /// New path to a special directory. /// - public void SetPath(PathName name, string path) + public async void SetPath(PathName name, string path) { - BridgeConnector.Socket.Emit("appSetPath", name.GetDescription(), path); + await Electron.SignalrElectron.Clients.All.SendAsync("appSetPath", name.GetDescription(), path); } /// @@ -724,22 +662,7 @@ public void SetPath(PathName name, string path) /// The version of the loaded application. public async Task GetVersionAsync(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using(cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appGetVersionCompleted", (version) => - { - BridgeConnector.Socket.Off("appGetVersionCompleted"); - taskCompletionSource.SetResult(version.ToString()); - }); - - BridgeConnector.Socket.Emit("appGetVersion"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return (await SignalrSerializeHelper.GetSignalrResultString("appGetVersion")); } /// @@ -752,22 +675,7 @@ public async Task GetVersionAsync(CancellationToken cancellationToken = /// The current application locale. public async Task GetLocaleAsync(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appGetLocaleCompleted", (local) => - { - BridgeConnector.Socket.Off("appGetLocaleCompleted"); - taskCompletionSource.SetResult(local.ToString()); - }); - - BridgeConnector.Socket.Emit("appGetLocale"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return (await SignalrSerializeHelper.GetSignalrResultString("appGetLocale")); } /// @@ -775,17 +683,17 @@ public async Task GetLocaleAsync(CancellationToken cancellationToken = d /// list from the task bar, and on macOS you can visit it from dock menu. /// /// Path to add. - public void AddRecentDocument(string path) + public async void AddRecentDocument(string path) { - BridgeConnector.Socket.Emit("appAddRecentDocument", path); + await Electron.SignalrElectron.Clients.All.SendAsync("appAddRecentDocument", path); } /// /// Clears the recent documents list. /// - public void ClearRecentDocuments() + public async void ClearRecentDocuments() { - BridgeConnector.Socket.Emit("appClearRecentDocuments"); + await Electron.SignalrElectron.Clients.All.SendAsync("appClearRecentDocuments"); } /// @@ -878,22 +786,7 @@ public async Task SetAsDefaultProtocolClientAsync(string protocol, string /// Whether the call succeeded. public async Task SetAsDefaultProtocolClientAsync(string protocol, string path, string[] args, CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appSetAsDefaultProtocolClientCompleted", (success) => - { - BridgeConnector.Socket.Off("appSetAsDefaultProtocolClientCompleted"); - taskCompletionSource.SetResult((bool) success); - }); - - BridgeConnector.Socket.Emit("appSetAsDefaultProtocolClient", protocol, path, args); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return await SignalrSerializeHelper.GetSignalrResultBool("appSetAsDefaultProtocolClient", protocol, path, args); } /// @@ -931,23 +824,8 @@ public async Task RemoveAsDefaultProtocolClientAsync(string protocol, stri /// The cancellation token. /// Whether the call succeeded. public async Task RemoveAsDefaultProtocolClientAsync(string protocol, string path, string[] args, CancellationToken cancellationToken = default) - { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appRemoveAsDefaultProtocolClientCompleted", (success) => - { - BridgeConnector.Socket.Off("appRemoveAsDefaultProtocolClientCompleted"); - taskCompletionSource.SetResult((bool) success); - }); - - BridgeConnector.Socket.Emit("appRemoveAsDefaultProtocolClient", protocol, path, args); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + { + return await SignalrSerializeHelper.GetSignalrResultBool("appRemoveAsDefaultProtocolClient", protocol, path, args); } /// @@ -1004,22 +882,7 @@ public async Task IsDefaultProtocolClientAsync(string protocol, string pat /// Whether the current executable is the default handler for a protocol (aka URI scheme). public async Task IsDefaultProtocolClientAsync(string protocol, string path, string[] args, CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appIsDefaultProtocolClientCompleted", (success) => - { - BridgeConnector.Socket.Off("appIsDefaultProtocolClientCompleted"); - taskCompletionSource.SetResult((bool) success); - }); - - BridgeConnector.Socket.Emit("appIsDefaultProtocolClient", protocol, path, args); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return await SignalrSerializeHelper.GetSignalrResultBool("appIsDefaultProtocolClient", protocol, path, args); } /// @@ -1032,22 +895,7 @@ public async Task IsDefaultProtocolClientAsync(string protocol, string pat /// Whether the call succeeded. public async Task SetUserTasksAsync(UserTask[] userTasks, CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appSetUserTasksCompleted", (success) => - { - BridgeConnector.Socket.Off("appSetUserTasksCompleted"); - taskCompletionSource.SetResult((bool) success); - }); - - BridgeConnector.Socket.Emit("appSetUserTasks", JArray.FromObject(userTasks, _jsonSerializer)); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return await SignalrSerializeHelper.GetSignalrResultBool("appSetUserTasks", JArray.FromObject(userTasks, _jsonSerializer)); } /// @@ -1057,22 +905,8 @@ public async Task SetUserTasksAsync(UserTask[] userTasks, CancellationToke /// Jump List settings. public async Task GetJumpListSettingsAsync(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appGetJumpListSettingsCompleted", (jumpListSettings) => - { - BridgeConnector.Socket.Off("appGetJumpListSettingsCompleted"); - taskCompletionSource.SetResult(JObject.Parse(jumpListSettings.ToString()).ToObject()); - }); - - BridgeConnector.Socket.Emit("appGetJumpListSettings"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("appGetJumpListSettings"); + return signalrResult.ToObject(); } /// @@ -1091,11 +925,12 @@ public async Task GetJumpListSettingsAsync(CancellationToken c /// omitted from the Jump List. The list of removed items can be obtained using . /// /// Array of objects. - public void SetJumpList(JumpListCategory[] categories) + public async void SetJumpList(JumpListCategory[] categories) { - BridgeConnector.Socket.Emit("appSetJumpList", JArray.FromObject(categories, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("appSetJumpList", JArray.FromObject(categories, _jsonSerializer)); } + // ToDo: Need better option /// /// The return value of this method indicates whether or not this instance of your application successfully obtained /// the lock. If it failed to obtain the lock, you can assume that another instance of your application is already @@ -1119,41 +954,29 @@ public void SetJumpList(JumpListCategory[] categories) /// public async Task RequestSingleInstanceLockAsync(Action newInstanceOpened, CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) + // ToDo: Check this function - Unsure if it's working as expected + // Check if second-instance is getting triggereds + var secondInstanceListener = await SignalrSerializeHelper.GetSignalrResultJArray("appRequestSingleInstanceLock"); + if (secondInstanceListener != null) { - BridgeConnector.Socket.On("appRequestSingleInstanceLockCompleted", (success) => - { - BridgeConnector.Socket.Off("appRequestSingleInstanceLockCompleted"); - taskCompletionSource.SetResult((bool)success); - }); + JArray results = secondInstanceListener; + string[] args = results.First.ToObject(); + string workingDirectory = results.Last.ToObject(); - BridgeConnector.Socket.Off("secondInstance"); - BridgeConnector.Socket.On("secondInstance", (result) => - { - JArray results = (JArray)result; - string[] args = results.First.ToObject(); - string workingDirectory = results.Last.ToObject(); - - newInstanceOpened(args, workingDirectory); - }); - - BridgeConnector.Socket.Emit("appRequestSingleInstanceLock"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); + newInstanceOpened(args, workingDirectory); } + + return (await SignalrSerializeHelper.GetSignalrResultBool("appRequestSingleInstanceLock")); } + /// /// Releases all locks that were created by makeSingleInstance. This will allow /// multiple instances of the application to once again run side by side. /// - public void ReleaseSingleInstanceLock() + public async void ReleaseSingleInstanceLock() { - BridgeConnector.Socket.Emit("appReleaseSingleInstanceLock"); + await Electron.SignalrElectron.Clients.All.SendAsync("appReleaseSingleInstanceLock"); } /// @@ -1164,22 +987,7 @@ public void ReleaseSingleInstanceLock() /// The cancellation token. public async Task HasSingleInstanceLockAsync(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appHasSingleInstanceLockCompleted", (hasLock) => - { - BridgeConnector.Socket.Off("appHasSingleInstanceLockCompleted"); - taskCompletionSource.SetResult((bool) hasLock); - }); - - BridgeConnector.Socket.Emit("appHasSingleInstanceLock"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return await SignalrSerializeHelper.GetSignalrResultBool("appHasSingleInstanceLock"); } /// @@ -1206,9 +1014,9 @@ public void SetUserActivity(string type, object userInfo) /// /// The webpage to load in a browser if no suitable app is installed on the resuming device. The scheme must be http or https. /// - public void SetUserActivity(string type, object userInfo, string webpageUrl) + public async void SetUserActivity(string type, object userInfo, string webpageUrl) { - BridgeConnector.Socket.Emit("appSetUserActivity", type, userInfo, webpageUrl); + await Electron.SignalrElectron.Clients.All.SendAsync("appSetUserActivity", type, userInfo, webpageUrl); } /// @@ -1217,47 +1025,32 @@ public void SetUserActivity(string type, object userInfo, string webpageUrl) /// The cancellation token. public async Task GetCurrentActivityTypeAsync(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appGetCurrentActivityTypeCompleted", (activityType) => - { - BridgeConnector.Socket.Off("appGetCurrentActivityTypeCompleted"); - taskCompletionSource.SetResult(activityType.ToString()); - }); - - BridgeConnector.Socket.Emit("appGetCurrentActivityType"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return await SignalrSerializeHelper.GetSignalrResultString("appGetCurrentActivityType"); } /// /// Invalidates the current Handoff user activity. /// - public void InvalidateCurrentActivity() + public async void InvalidateCurrentActivity() { - BridgeConnector.Socket.Emit("appInvalidateCurrentActivity"); + await Electron.SignalrElectron.Clients.All.SendAsync("appInvalidateCurrentActivity"); } /// /// Marks the current Handoff user activity as inactive without invalidating it. /// - public void ResignCurrentActivity() + public async void ResignCurrentActivity() { - BridgeConnector.Socket.Emit("appResignCurrentActivity"); + await Electron.SignalrElectron.Clients.All.SendAsync("appResignCurrentActivity"); } /// /// Changes the Application User Model ID to id. /// /// Model Id. - public void SetAppUserModelId(string id) + public async void SetAppUserModelId(string id) { - BridgeConnector.Socket.Emit("appSetAppUserModelId", id); + await Electron.SignalrElectron.Clients.All.SendAsync("appSetAppUserModelId", id); } /// TODO: Check new parameter which is a function [App.ImportCertificate] @@ -1271,22 +1064,8 @@ public void SetAppUserModelId(string id) /// Result of import. Value of 0 indicates success. public async Task ImportCertificateAsync(ImportCertificateOptions options, CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appImportCertificateCompleted", (result) => - { - BridgeConnector.Socket.Off("appImportCertificateCompleted"); - taskCompletionSource.SetResult((int) result); - }); - - BridgeConnector.Socket.Emit("appImportCertificate", JObject.FromObject(options, _jsonSerializer)); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + var signalrResult = await SignalrSerializeHelper.GetSignalrResultString("appImportCertificate", JObject.FromObject(options, _jsonSerializer)); + return int.Parse(signalrResult); } /// @@ -1299,24 +1078,8 @@ public async Task ImportCertificateAsync(ImportCertificateOptions options, /// public async Task GetAppMetricsAsync(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appGetAppMetricsCompleted", (result) => - { - BridgeConnector.Socket.Off("appGetAppMetricsCompleted"); - var processMetrics = ((JArray)result).ToObject(); - - taskCompletionSource.SetResult(processMetrics); - }); - - BridgeConnector.Socket.Emit("appGetAppMetrics"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJArray("appGetAppMetrics"); + return signalrResult.ToObject(); } /// @@ -1327,24 +1090,8 @@ public async Task GetAppMetricsAsync(CancellationToken cancella /// public async Task GetGpuFeatureStatusAsync(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appGetGpuFeatureStatusCompleted", (result) => - { - BridgeConnector.Socket.Off("appGetGpuFeatureStatusCompleted"); - var gpuFeatureStatus = ((JObject)result).ToObject(); - - taskCompletionSource.SetResult(gpuFeatureStatus); - }); - - BridgeConnector.Socket.Emit("appGetGpuFeatureStatus"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("appGetGpuFeatureStatus"); + return signalrResult.ToObject(); } /// @@ -1359,22 +1106,7 @@ public async Task GetGpuFeatureStatusAsync(CancellationToken c /// Whether the call succeeded. public async Task SetBadgeCountAsync(int count, CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appSetBadgeCountCompleted", (success) => - { - BridgeConnector.Socket.Off("appSetBadgeCountCompleted"); - taskCompletionSource.SetResult((bool) success); - }); - - BridgeConnector.Socket.Emit("appSetBadgeCount", count); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return await SignalrSerializeHelper.GetSignalrResultBool("appSetBadgeCount", count); } /// @@ -1383,22 +1115,8 @@ public async Task SetBadgeCountAsync(int count, CancellationToken cancella /// The cancellation token. public async Task GetBadgeCountAsync(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appGetBadgeCountCompleted", (count) => - { - BridgeConnector.Socket.Off("appGetBadgeCountCompleted"); - taskCompletionSource.SetResult((int)count); - }); - - BridgeConnector.Socket.Emit("appGetBadgeCount"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + var signalrResult = await SignalrSerializeHelper.GetSignalrResultString("appGetBadgeCount"); + return int.Parse(signalrResult); } /// @@ -1412,22 +1130,7 @@ public async Task GetBadgeCountAsync(CancellationToken cancellationToken = /// The cancellation token. public async Task IsUnityRunningAsync(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appIsUnityRunningCompleted", (isUnityRunning) => - { - BridgeConnector.Socket.Off("appIsUnityRunningCompleted"); - taskCompletionSource.SetResult((bool)isUnityRunning); - }); - - BridgeConnector.Socket.Emit("appIsUnityRunning"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return await SignalrSerializeHelper.GetSignalrResultBool("appIsUnityRunning"); } /// @@ -1447,32 +1150,17 @@ public async Task GetLoginItemSettingsAsync(CancellationToken /// The cancellation token. public async Task GetLoginItemSettingsAsync(LoginItemSettingsOptions options, CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) + JObject appGetLoginItemSettingsCompleted; + if (options == null) { - BridgeConnector.Socket.On("appGetLoginItemSettingsCompleted", (loginItemSettings) => - { - BridgeConnector.Socket.Off("appGetLoginItemSettingsCompleted"); - - var result = ((JObject) loginItemSettings).ToObject(); - - taskCompletionSource.SetResult(result); - }); - - if (options == null) - { - BridgeConnector.Socket.Emit("appGetLoginItemSettings"); - } - else - { - BridgeConnector.Socket.Emit("appGetLoginItemSettings", JObject.FromObject(options, _jsonSerializer)); - } - - return await taskCompletionSource.Task - .ConfigureAwait(false); + appGetLoginItemSettingsCompleted = await SignalrSerializeHelper.GetSignalrResultJObject("appGetLoginItemSettings"); } + else + { + appGetLoginItemSettingsCompleted = await SignalrSerializeHelper.GetSignalrResultJObject("appGetLoginItemSettingsWithOptions", JObject.FromObject(options, _jsonSerializer)); + } + + return appGetLoginItemSettingsCompleted.ToObject(); } /// @@ -1481,9 +1169,9 @@ public async Task GetLoginItemSettingsAsync(LoginItemSettings /// you'll want to set the launch path to Update.exe, and pass arguments that specify your application name. /// /// - public void SetLoginItemSettings(LoginSettings loginSettings) + public async void SetLoginItemSettings(LoginSettings loginSettings) { - BridgeConnector.Socket.Emit("appSetLoginItemSettings", JObject.FromObject(loginSettings, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("appSetLoginItemSettings", JObject.FromObject(loginSettings, _jsonSerializer)); } /// @@ -1494,22 +1182,7 @@ public void SetLoginItemSettings(LoginSettings loginSettings) /// if Chrome’s accessibility support is enabled, otherwise. public async Task IsAccessibilitySupportEnabledAsync(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appIsAccessibilitySupportEnabledCompleted", (isAccessibilitySupportEnabled) => - { - BridgeConnector.Socket.Off("appIsAccessibilitySupportEnabledCompleted"); - taskCompletionSource.SetResult((bool)isAccessibilitySupportEnabled); - }); - - BridgeConnector.Socket.Emit("appIsAccessibilitySupportEnabled"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return await SignalrSerializeHelper.GetSignalrResultBool("appIsAccessibilitySupportEnabled"); } /// @@ -1522,18 +1195,18 @@ public async Task IsAccessibilitySupportEnabledAsync(CancellationToken can /// Note: Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default. /// /// Enable or disable accessibility tree rendering. - public void SetAccessibilitySupportEnabled(bool enabled) + public async void SetAccessibilitySupportEnabled(bool enabled) { - BridgeConnector.Socket.Emit("appSetAboutPanelOptions", enabled); + await Electron.SignalrElectron.Clients.All.SendAsync("appSetAboutPanelOptions", enabled); } /// /// Show the app's about panel options. These options can be overridden with /// . /// - public void ShowAboutPanel() + public async void ShowAboutPanel() { - BridgeConnector.Socket.Emit("appShowAboutPanel"); + await Electron.SignalrElectron.Clients.All.SendAsync("appShowAboutPanel"); } /// @@ -1547,9 +1220,9 @@ public void ShowAboutPanel() /// documentation for more information. /// /// About panel options. - public void SetAboutPanelOptions(AboutPanelOptions options) + public async void SetAboutPanelOptions(AboutPanelOptions options) { - BridgeConnector.Socket.Emit("appSetAboutPanelOptions", JObject.FromObject(options, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("appSetAboutPanelOptions", JObject.FromObject(options, _jsonSerializer)); } /// @@ -1569,7 +1242,7 @@ public string UserAgentFallback } set { - BridgeConnector.Socket.Emit("appSetUserAgentFallback", value); + Electron.SignalrElectron.Clients.All.SendAsync("appSetUserAgentFallback", value); } } @@ -1589,13 +1262,8 @@ public Task UserAgentFallbackAsync { var taskCompletionSource = new TaskCompletionSource(); - BridgeConnector.Socket.On("appGetUserAgentFallbackCompleted", (result) => - { - BridgeConnector.Socket.Off("appGetUserAgentFallbackCompleted"); - taskCompletionSource.SetResult((string)result); - }); - - BridgeConnector.Socket.Emit("appGetUserAgentFallback"); + var signalrResult = SignalrSerializeHelper.GetSignalrResultString("appGetUserAgentFallback"); + taskCompletionSource.SetResult(signalrResult.Result); return taskCompletionSource.Task; }); diff --git a/ElectronNET.API/AutoUpdater.cs b/ElectronNET.API/AutoUpdater.cs index da1001fa..0bf98f0f 100644 --- a/ElectronNET.API/AutoUpdater.cs +++ b/ElectronNET.API/AutoUpdater.cs @@ -1,4 +1,5 @@ using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -23,21 +24,14 @@ public bool AutoDownload return Task.Run(() => { var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("autoUpdater-autoDownload-get-reply", (result) => - { - BridgeConnector.Socket.Off("autoUpdater-autoDownload-get-reply"); - taskCompletionSource.SetResult((bool)result); - }); - - BridgeConnector.Socket.Emit("autoUpdater-autoDownload-get"); - + var signalrResult = SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-autoDownload-get"); + taskCompletionSource.SetResult(signalrResult.Result); return taskCompletionSource.Task; }).Result; } set { - BridgeConnector.Socket.Emit("autoUpdater-autoDownload-set", value); + Electron.SignalrElectron.Clients.All.SendAsync("autoUpdater-autoDownload-set", value); } } @@ -53,21 +47,14 @@ public bool AutoInstallOnAppQuit return Task.Run(() => { var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("autoUpdater-autoInstallOnAppQuit-get-reply", (result) => - { - BridgeConnector.Socket.Off("autoUpdater-autoInstallOnAppQuit-get-reply"); - taskCompletionSource.SetResult((bool)result); - }); - - BridgeConnector.Socket.Emit("autoUpdater-autoInstallOnAppQuit-get"); - + var signalrResult = SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-autoInstallOnAppQuit-get"); + taskCompletionSource.SetResult(signalrResult.Result); return taskCompletionSource.Task; }).Result; } set { - BridgeConnector.Socket.Emit("autoUpdater-autoInstallOnAppQuit-set", value); + Electron.SignalrElectron.Clients.All.SendAsync("autoUpdater-autoInstallOnAppQuit-set", value); } } @@ -84,21 +71,14 @@ public bool AllowPrerelease return Task.Run(() => { var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("autoUpdater-allowPrerelease-get-reply", (result) => - { - BridgeConnector.Socket.Off("autoUpdater-allowPrerelease-get-reply"); - taskCompletionSource.SetResult((bool)result); - }); - - BridgeConnector.Socket.Emit("autoUpdater-allowPrerelease-get"); - + var signalrResult = SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-allowPrerelease-get"); + taskCompletionSource.SetResult(signalrResult.Result); return taskCompletionSource.Task; }).Result; } set { - BridgeConnector.Socket.Emit("autoUpdater-allowPrerelease-set", value); + Electron.SignalrElectron.Clients.All.SendAsync("autoUpdater-allowPrerelease-set", value); } } @@ -113,21 +93,14 @@ public bool FullChangelog return Task.Run(() => { var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("autoUpdater-fullChangelog-get-reply", (result) => - { - BridgeConnector.Socket.Off("autoUpdater-fullChangelog-get-reply"); - taskCompletionSource.SetResult((bool)result); - }); - - BridgeConnector.Socket.Emit("autoUpdater-fullChangelog-get"); - + var signalrResult = SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-fullChangelog-get"); + taskCompletionSource.SetResult(signalrResult.Result); return taskCompletionSource.Task; }).Result; } set { - BridgeConnector.Socket.Emit("autoUpdater-fullChangelog-set", value); + Electron.SignalrElectron.Clients.All.SendAsync("autoUpdater-fullChangelog-set", value); } } @@ -143,21 +116,15 @@ public bool AllowDowngrade return Task.Run(() => { var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("autoUpdater-allowDowngrade-get-reply", (result) => - { - BridgeConnector.Socket.Off("autoUpdater-allowDowngrade-get-reply"); - taskCompletionSource.SetResult((bool)result); - }); - - BridgeConnector.Socket.Emit("autoUpdater-allowDowngrade-get"); + var signalrResult = SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-allowDowngrade-get"); + taskCompletionSource.SetResult(signalrResult.Result); return taskCompletionSource.Task; }).Result; } set { - BridgeConnector.Socket.Emit("autoUpdater-allowDowngrade-set", value); + Electron.SignalrElectron.Clients.All.SendAsync("autoUpdater-allowDowngrade-set", value); } } @@ -171,15 +138,8 @@ public string UpdateConfigPath return Task.Run(() => { var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("autoUpdater-updateConfigPath-get-reply", (result) => - { - BridgeConnector.Socket.Off("autoUpdater-updateConfigPath-get-reply"); - taskCompletionSource.SetResult(result.ToString()); - }); - - BridgeConnector.Socket.Emit("autoUpdater-updateConfigPath-get"); - + var signalrResult = SignalrSerializeHelper.GetSignalrResultString("autoUpdater-updateConfigPath-get"); + taskCompletionSource.SetResult(signalrResult.Result); return taskCompletionSource.Task; }).Result; } @@ -195,15 +155,9 @@ public Task CurrentVersionAsync return Task.Run(() => { var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("autoUpdater-currentVersion-get-reply", (result) => - { - BridgeConnector.Socket.Off("autoUpdater-currentVersion-get-reply"); - SemVer version = ((JObject)result).ToObject(); - taskCompletionSource.SetResult(version); - }); - BridgeConnector.Socket.Emit("autoUpdater-currentVersion-get"); - + var signalrResult = SignalrSerializeHelper.GetSignalrResultJObject("autoUpdater-currentVersion-get"); + SemVer version = ((JObject)signalrResult.Result).ToObject(); + taskCompletionSource.SetResult(version); return taskCompletionSource.Task; }); } @@ -233,14 +187,8 @@ public Task ChannelAsync return Task.Run(() => { var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("autoUpdater-channel-get-reply", (result) => - { - BridgeConnector.Socket.Off("autoUpdater-channel-get-reply"); - taskCompletionSource.SetResult(result.ToString()); - }); - BridgeConnector.Socket.Emit("autoUpdater-channel-get"); - + var signalrResult = SignalrSerializeHelper.GetSignalrResultString("autoUpdater-channel-get"); + taskCompletionSource.SetResult(signalrResult.Result); return taskCompletionSource.Task; }); } @@ -258,13 +206,9 @@ public Task> RequestHeadersAsync return Task.Run(() => { var taskCompletionSource = new TaskCompletionSource>(); - BridgeConnector.Socket.On("autoUpdater-requestHeaders-get-reply", (headers) => - { - BridgeConnector.Socket.Off("autoUpdater-requestHeaders-get-reply"); - Dictionary result = ((JObject)headers).ToObject>(); - taskCompletionSource.SetResult(result); - }); - BridgeConnector.Socket.Emit("autoUpdater-requestHeaders-get"); + var signalrResult = SignalrSerializeHelper.GetSignalrResultJObject("autoUpdater-requestHeaders-get"); + Dictionary result = ((JObject)signalrResult.Result).ToObject>(); + taskCompletionSource.SetResult(result); return taskCompletionSource.Task; }); } @@ -277,7 +221,7 @@ public Dictionary RequestHeaders { set { - BridgeConnector.Socket.Emit("autoUpdater-requestHeaders-set", JObject.FromObject(value, _jsonSerializer)); + Electron.SignalrElectron.Clients.All.SendAsync("autoUpdater-requestHeaders-set", JObject.FromObject(value, _jsonSerializer)); } } @@ -290,24 +234,22 @@ public event Action OnError { if (_error == null) { - BridgeConnector.Socket.On("autoUpdater-error" + GetHashCode(), (message) => - { - _error(message.ToString()); - }); + Electron.SignalrElectron.Clients.All.SendAsync("register-autoUpdater-error-event", GetHashCode()); - BridgeConnector.Socket.Emit("register-autoUpdater-error-event", GetHashCode()); } _error += value; } remove { _error -= value; - - if (_error == null) - BridgeConnector.Socket.Off("autoUpdater-error" + GetHashCode()); } } + public void TriggerOnError(string error) + { + _error(error); + } + private event Action _error; /// @@ -319,24 +261,22 @@ public event Action OnCheckingForUpdate { if (_checkingForUpdate == null) { - BridgeConnector.Socket.On("autoUpdater-checking-for-update" + GetHashCode(), () => - { - _checkingForUpdate(); - }); + Electron.SignalrElectron.Clients.All.SendAsync("register-autoUpdater-checking-for-update-event", GetHashCode()); - BridgeConnector.Socket.Emit("register-autoUpdater-checking-for-update-event", GetHashCode()); } _checkingForUpdate += value; } remove { _checkingForUpdate -= value; - - if (_checkingForUpdate == null) - BridgeConnector.Socket.Off("autoUpdater-checking-for-update" + GetHashCode()); } } + public void TriggerOnCheckingForUpdate() + { + _checkingForUpdate(); + } + private event Action _checkingForUpdate; /// @@ -349,24 +289,21 @@ public event Action OnUpdateAvailable { if (_updateAvailable == null) { - BridgeConnector.Socket.On("autoUpdater-update-available" + GetHashCode(), (updateInfo) => - { - _updateAvailable(JObject.Parse(updateInfo.ToString()).ToObject()); - }); - - BridgeConnector.Socket.Emit("register-autoUpdater-update-available-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-autoUpdater-update-available-event", GetHashCode()); } _updateAvailable += value; } remove { _updateAvailable -= value; - - if (_updateAvailable == null) - BridgeConnector.Socket.Off("autoUpdater-update-available" + GetHashCode()); } } + public void TriggerOnUpdateAvailable(JObject jobject) + { + _updateAvailable(JObject.Parse(jobject.ToString()).ToObject()); + } + private event Action _updateAvailable; /// @@ -378,24 +315,21 @@ public event Action OnUpdateNotAvailable { if (_updateNotAvailable == null) { - BridgeConnector.Socket.On("autoUpdater-update-not-available" + GetHashCode(), (updateInfo) => - { - _updateNotAvailable(JObject.Parse(updateInfo.ToString()).ToObject()); - }); - - BridgeConnector.Socket.Emit("register-autoUpdater-update-not-available-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-autoUpdater-update-not-available-event", GetHashCode()); } _updateNotAvailable += value; } remove { _updateNotAvailable -= value; - - if (_updateNotAvailable == null) - BridgeConnector.Socket.Off("autoUpdater-update-not-available" + GetHashCode()); } } + public void TriggerOnUpdateNotAvailable(JObject jobject) + { + _updateAvailable(JObject.Parse(jobject.ToString()).ToObject()); + } + private event Action _updateNotAvailable; /// @@ -407,24 +341,21 @@ public event Action OnDownloadProgress { if (_downloadProgress == null) { - BridgeConnector.Socket.On("autoUpdater-download-progress" + GetHashCode(), (progressInfo) => - { - _downloadProgress(JObject.Parse(progressInfo.ToString()).ToObject()); - }); - - BridgeConnector.Socket.Emit("register-autoUpdater-download-progress-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-autoUpdater-download-progress-event", GetHashCode()); } _downloadProgress += value; } remove { _downloadProgress -= value; - - if (_downloadProgress == null) - BridgeConnector.Socket.Off("autoUpdater-download-progress" + GetHashCode()); } } + public void TriggerOnDownloadProgress(JObject jobject) + { + _downloadProgress(JObject.Parse(jobject.ToString()).ToObject()); + } + private event Action _downloadProgress; /// @@ -436,24 +367,21 @@ public event Action OnUpdateDownloaded { if (_updateDownloaded == null) { - BridgeConnector.Socket.On("autoUpdater-update-downloaded" + GetHashCode(), (updateInfo) => - { - _updateDownloaded(JObject.Parse(updateInfo.ToString()).ToObject()); - }); - - BridgeConnector.Socket.Emit("register-autoUpdater-update-downloaded-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-autoUpdater-update-downloaded-event", GetHashCode()); } _updateDownloaded += value; } remove { _updateDownloaded -= value; - - if (_updateDownloaded == null) - BridgeConnector.Socket.Off("autoUpdater-update-downloaded" + GetHashCode()); } } + public void TriggerOnUpdateDownloaded(JObject jobject) + { + _updateDownloaded(JObject.Parse(jobject.ToString()).ToObject()); + } + private event Action _updateDownloaded; private static AutoUpdater _autoUpdater; @@ -484,37 +412,31 @@ internal static AutoUpdater Instance /// Asks the server whether there is an update. /// /// - public Task CheckForUpdatesAsync() + public async Task CheckForUpdatesAsync() { var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("autoUpdaterCheckForUpdates"); - BridgeConnector.Socket.On("autoUpdaterCheckForUpdatesComplete" + guid, (updateCheckResult) => + if (signalrResult["errno"] != null) + { + string message = "An error occurred in CheckForUpdatesAsync"; + message = JsonConvert.SerializeObject(signalrResult); + taskCompletionSource.SetException(new Exception(message)); + } + else { try { - BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesComplete" + guid); - BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesError" + guid); - taskCompletionSource.SetResult(JObject.Parse(updateCheckResult.ToString()).ToObject()); + var updateCheckResult = signalrResult.ToObject(); + taskCompletionSource.SetResult(updateCheckResult); } catch (Exception ex) { taskCompletionSource.SetException(ex); } - }); - BridgeConnector.Socket.On("autoUpdaterCheckForUpdatesError" + guid, (error) => - { - BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesComplete" + guid); - BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesError" + guid); - string message = "An error occurred in CheckForUpdatesAsync"; - if (error != null && !string.IsNullOrEmpty(error.ToString())) - message = JsonConvert.SerializeObject(error); - taskCompletionSource.SetException(new Exception(message)); - }); - - BridgeConnector.Socket.Emit("autoUpdaterCheckForUpdates", guid); + } - return taskCompletionSource.Task; + return await taskCompletionSource.Task; } /// @@ -523,40 +445,31 @@ public Task CheckForUpdatesAsync() /// This will immediately download an update, then install when the app quits. /// /// - public Task CheckForUpdatesAndNotifyAsync() + public async Task CheckForUpdatesAndNotifyAsync() { var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("autoUpdaterCheckForUpdatesAndNotify"); - BridgeConnector.Socket.On("autoUpdaterCheckForUpdatesAndNotifyComplete" + guid, (updateCheckResult) => + if (signalrResult["errno"] != null) + { + string message = "An error occurred in CheckForUpdatesAsync"; + message = JsonConvert.SerializeObject(signalrResult); + taskCompletionSource.SetException(new Exception(message)); + } + else { try { - BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesAndNotifyComplete" + guid); - BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesAndNotifyError" + guid); - if (updateCheckResult == null) - taskCompletionSource.SetResult(null); - else - taskCompletionSource.SetResult(JObject.Parse(updateCheckResult.ToString()).ToObject()); + var updateCheckResult = signalrResult.ToObject(); + taskCompletionSource.SetResult(updateCheckResult); } catch (Exception ex) { taskCompletionSource.SetException(ex); } - }); - BridgeConnector.Socket.On("autoUpdaterCheckForUpdatesAndNotifyError" + guid, (error) => - { - BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesAndNotifyComplete" + guid); - BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesAndNotifyError" + guid); - string message = "An error occurred in autoUpdaterCheckForUpdatesAndNotify"; - if (error != null) - message = JsonConvert.SerializeObject(error); - taskCompletionSource.SetException(new Exception(message)); - }); - - BridgeConnector.Socket.Emit("autoUpdaterCheckForUpdatesAndNotify", guid); + } - return taskCompletionSource.Task; + return await taskCompletionSource.Task; } /// @@ -568,49 +481,27 @@ public Task CheckForUpdatesAndNotifyAsync() /// /// *windows-only* Runs the installer in silent mode. Defaults to `false`. /// Run the app after finish even on silent install. Not applicable for macOS. Ignored if `isSilent` is set to `false`. - public void QuitAndInstall(bool isSilent = false, bool isForceRunAfter = false) + public async void QuitAndInstall(bool isSilent = false, bool isForceRunAfter = false) { - BridgeConnector.Socket.Emit("autoUpdaterQuitAndInstall", isSilent, isForceRunAfter); + await Electron.SignalrElectron.Clients.All.SendAsync("autoUpdaterQuitAndInstall", isSilent, isForceRunAfter); } /// /// Start downloading update manually. You can use this method if "AutoDownload" option is set to "false". /// /// Path to downloaded file. - public Task DownloadUpdateAsync() + public async Task DownloadUpdateAsync() { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("autoUpdaterDownloadUpdateComplete" + guid, (downloadedPath) => - { - BridgeConnector.Socket.Off("autoUpdaterDownloadUpdateComplete" + guid); - taskCompletionSource.SetResult(downloadedPath.ToString()); - }); - - BridgeConnector.Socket.Emit("autoUpdaterDownloadUpdate", guid); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultString("autoUpdaterDownloadUpdate"); } /// /// Feed URL. /// /// Feed URL. - public Task GetFeedURLAsync() + public async Task GetFeedURLAsync() { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("autoUpdaterGetFeedURLComplete" + guid, (downloadedPath) => - { - BridgeConnector.Socket.Off("autoUpdaterGetFeedURLComplete" + guid); - taskCompletionSource.SetResult(downloadedPath.ToString()); - }); - - BridgeConnector.Socket.Emit("autoUpdaterGetFeedURL", guid); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultString("autoUpdaterGetFeedURL"); } private readonly JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/BridgeConnector.cs b/ElectronNET.API/BridgeConnector.cs deleted file mode 100644 index 08a84745..00000000 --- a/ElectronNET.API/BridgeConnector.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Quobject.SocketIoClientDotNet.Client; -using System; - -namespace ElectronNET.API -{ - internal static class BridgeConnector - { - private static Socket _socket; - private static object _syncRoot = new object(); - - public static Socket Socket - { - get - { - if(_socket == null && HybridSupport.IsElectronActive) - { - lock (_syncRoot) - { - if (_socket == null && HybridSupport.IsElectronActive) - { - _socket = IO.Socket("http://localhost:" + BridgeSettings.SocketPort); - _socket.On(Socket.EVENT_CONNECT, () => - { - Console.WriteLine("BridgeConnector connected!"); - }); - } - } - } - else if(_socket == null && !HybridSupport.IsElectronActive) - { - lock (_syncRoot) - { - if (_socket == null && !HybridSupport.IsElectronActive) - { - _socket = IO.Socket(new Uri("http://localhost"), new IO.Options { AutoConnect = false }); - } - } - } - - return _socket; - } - } - } -} diff --git a/ElectronNET.API/BrowserView.cs b/ElectronNET.API/BrowserView.cs index 96bddd7f..8aa5377c 100644 --- a/ElectronNET.API/BrowserView.cs +++ b/ElectronNET.API/BrowserView.cs @@ -1,4 +1,5 @@ using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -38,21 +39,14 @@ public Rectangle Bounds return Task.Run(() => { var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserView-getBounds-reply", (result) => - { - BridgeConnector.Socket.Off("browserView-getBounds-reply"); - taskCompletionSource.SetResult((Rectangle)result); - }); - - BridgeConnector.Socket.Emit("browserView-getBounds", Id); - + var signalrResult = SignalrSerializeHelper.GetSignalrResultJObject("browserView-getBounds", Id).Result; + taskCompletionSource.SetResult(((JObject)signalrResult).ToObject()); return taskCompletionSource.Task; }).Result; } set { - BridgeConnector.Socket.Emit("browserView-setBounds", Id, JObject.FromObject(value, _jsonSerializer)); + Electron.SignalrElectron.Clients.All.SendAsync("browserView-setBounds", Id, JObject.FromObject(value, _jsonSerializer)); } } @@ -72,9 +66,9 @@ internal BrowserView(int id) /// (experimental) /// /// - public void SetAutoResize(AutoResizeOptions options) + public async void SetAutoResize(AutoResizeOptions options) { - BridgeConnector.Socket.Emit("browserView-setAutoResize", Id, JObject.FromObject(options, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("browserView-setAutoResize", Id, JObject.FromObject(options, _jsonSerializer)); } /// @@ -83,9 +77,9 @@ public void SetAutoResize(AutoResizeOptions options) /// (experimental) /// /// Color in #aarrggbb or #argb form. The alpha channel is optional. - public void SetBackgroundColor(string color) + public async void SetBackgroundColor(string color) { - BridgeConnector.Socket.Emit("browserView-setBackgroundColor", Id, color); + await Electron.SignalrElectron.Clients.All.SendAsync("browserView-setBackgroundColor", Id, color); } private JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/BrowserWindow.cs b/ElectronNET.API/BrowserWindow.cs index 2c4590ac..615cb1b2 100644 --- a/ElectronNET.API/BrowserWindow.cs +++ b/ElectronNET.API/BrowserWindow.cs @@ -1,5 +1,7 @@ using ElectronNET.API.Entities; using ElectronNET.API.Extensions; +using ElectronNET.API.Hubs; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -34,24 +36,21 @@ public event Action OnReadyToShow { if (_readyToShow == null) { - BridgeConnector.Socket.On("browserWindow-ready-to-show" + Id, () => - { - _readyToShow(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-ready-to-show", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-ready-to-show", Id); } _readyToShow += value; } remove { _readyToShow -= value; - - if (_readyToShow == null) - BridgeConnector.Socket.Off("browserWindow-ready-to-show" + Id); } } + public void TriggerOnReadyToShow() + { + _readyToShow(); + } + private event Action _readyToShow; /// @@ -63,24 +62,21 @@ public event Action OnPageTitleUpdated { if (_pageTitleUpdated == null) { - BridgeConnector.Socket.On("browserWindow-page-title-updated" + Id, (title) => - { - _pageTitleUpdated(title.ToString()); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-page-title-updated", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-page-title-updated", Id); } _pageTitleUpdated += value; } remove { _pageTitleUpdated -= value; - - if (_pageTitleUpdated == null) - BridgeConnector.Socket.Off("browserWindow-page-title-updated" + Id); } } + public void TriggerOnPageTitleUpdated(string title) + { + _pageTitleUpdated(title); + } + private event Action _pageTitleUpdated; /// @@ -92,24 +88,21 @@ public event Action OnClose { if (_close == null) { - BridgeConnector.Socket.On("browserWindow-close" + Id, () => - { - _close(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-close", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-close", Id); } _close += value; } remove { _close -= value; - - if (_close == null) - BridgeConnector.Socket.Off("browserWindow-close" + Id); } } + public void TriggerOnClose() + { + _close(); + } + private event Action _close; /// @@ -123,21 +116,22 @@ public event Action OnClosed { if (_closed == null) { - BridgeConnector.Socket.On("browserWindow-closed" + Id, () => - { - _closed(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-closed", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-closed", Id); } _closed += value; } remove { _closed -= value; + } + } - if (_closed == null) - BridgeConnector.Socket.Off("browserWindow-closed" + Id); + public void TriggerOnClosed() + { + // Trigger only if we've a listener + if (_closed != null) + { + _closed(); } } @@ -152,24 +146,21 @@ public event Action OnSessionEnd { if (_sessionEnd == null) { - BridgeConnector.Socket.On("browserWindow-session-end" + Id, () => - { - _sessionEnd(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-session-end", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-session-end", Id); } _sessionEnd += value; } remove { _sessionEnd -= value; - - if (_sessionEnd == null) - BridgeConnector.Socket.Off("browserWindow-session-end" + Id); } } + public void TriggerOnSessionEnd() + { + _sessionEnd(); + } + private event Action _sessionEnd; /// @@ -181,24 +172,21 @@ public event Action OnUnresponsive { if (_unresponsive == null) { - BridgeConnector.Socket.On("browserWindow-unresponsive" + Id, () => - { - _unresponsive(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-unresponsive", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-unresponsive", Id); } _unresponsive += value; } remove { _unresponsive -= value; - - if (_unresponsive == null) - BridgeConnector.Socket.Off("browserWindow-unresponsive" + Id); } } + public void TriggerOnUnresponsive() + { + _unresponsive(); + } + private event Action _unresponsive; /// @@ -210,24 +198,21 @@ public event Action OnResponsive { if (_responsive == null) { - BridgeConnector.Socket.On("browserWindow-responsive" + Id, () => - { - _responsive(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-responsive", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-responsive", Id); } _responsive += value; } remove { _responsive -= value; - - if (_responsive == null) - BridgeConnector.Socket.Off("browserWindow-responsive" + Id); } } + public void TriggerOnResponsive() + { + _responsive(); + } + private event Action _responsive; /// @@ -239,25 +224,22 @@ public event Action OnBlur { if (_blur == null) { - BridgeConnector.Socket.On("browserWindow-blur" + Id, () => - { - _blur(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-blur", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-blur", Id); } _blur += value; } remove { _blur -= value; - - if (_blur == null) - BridgeConnector.Socket.Off("browserWindow-blur" + Id); } } - private event Action _blur; + public void TriggerOnBlur() + { + _blur(); + } + + public event Action _blur; /// /// Emitted when the window gains focus. @@ -268,24 +250,21 @@ public event Action OnFocus { if (_focus == null) { - BridgeConnector.Socket.On("browserWindow-focus" + Id, () => - { - _focus(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-focus", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-focus", Id); } _focus += value; } remove { _focus -= value; - - if (_focus == null) - BridgeConnector.Socket.Off("browserWindow-focus" + Id); } } + public void TriggerOnFocus() + { + _focus(); + } + private event Action _focus; /// @@ -297,24 +276,21 @@ public event Action OnShow { if (_show == null) { - BridgeConnector.Socket.On("browserWindow-show" + Id, () => - { - _show(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-show", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-show", Id); } _show += value; } remove { _show -= value; - - if (_show == null) - BridgeConnector.Socket.Off("browserWindow-show" + Id); } } + public void TriggerOnShow() + { + _show(); + } + private event Action _show; /// @@ -326,24 +302,21 @@ public event Action OnHide { if (_hide == null) { - BridgeConnector.Socket.On("browserWindow-hide" + Id, () => - { - _hide(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-hide", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-hide", Id); } _hide += value; } remove { _hide -= value; - - if (_hide == null) - BridgeConnector.Socket.Off("browserWindow-hide" + Id); } } + public void TriggerOnHide() + { + _hide(); + } + private event Action _hide; /// @@ -355,24 +328,21 @@ public event Action OnMaximize { if (_maximize == null) { - BridgeConnector.Socket.On("browserWindow-maximize" + Id, () => - { - _maximize(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-maximize", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-maximize", Id); } _maximize += value; } remove { _maximize -= value; - - if (_maximize == null) - BridgeConnector.Socket.Off("browserWindow-maximize" + Id); } } + public void TriggerOnMaximize() + { + _maximize(); + } + private event Action _maximize; /// @@ -384,24 +354,21 @@ public event Action OnUnmaximize { if (_unmaximize == null) { - BridgeConnector.Socket.On("browserWindow-unmaximize" + Id, () => - { - _unmaximize(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-unmaximize", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-unmaximize", Id); } _unmaximize += value; } remove { _unmaximize -= value; - - if (_unmaximize == null) - BridgeConnector.Socket.Off("browserWindow-unmaximize" + Id); } } + public void TriggerOnUnmaximize() + { + _unmaximize(); + } + private event Action _unmaximize; /// @@ -413,24 +380,21 @@ public event Action OnMinimize { if (_minimize == null) { - BridgeConnector.Socket.On("browserWindow-minimize" + Id, () => - { - _minimize(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-minimize", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-minimize", Id); } _minimize += value; } remove { _minimize -= value; - - if (_minimize == null) - BridgeConnector.Socket.Off("browserWindow-minimize" + Id); } } + public void TriggerOnMinimize() + { + _minimize(); + } + private event Action _minimize; /// @@ -442,24 +406,21 @@ public event Action OnRestore { if (_restore == null) { - BridgeConnector.Socket.On("browserWindow-restore" + Id, () => - { - _restore(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-restore", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-restore", Id); } _restore += value; } remove { _restore -= value; - - if (_restore == null) - BridgeConnector.Socket.Off("browserWindow-restore" + Id); } } + public void TriggerOnRestore() + { + _restore(); + } + private event Action _restore; /// @@ -471,24 +432,21 @@ public event Action OnResize { if (_resize == null) { - BridgeConnector.Socket.On("browserWindow-resize" + Id, () => - { - _resize(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-resize", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-resize", Id); } _resize += value; } remove { _resize -= value; - - if (_resize == null) - BridgeConnector.Socket.Off("browserWindow-resize" + Id); } } + public void TriggerOnResize() + { + _resize(); + } + private event Action _resize; /// @@ -502,24 +460,21 @@ public event Action OnMove { if (_move == null) { - BridgeConnector.Socket.On("browserWindow-move" + Id, () => - { - _move(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-move", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-move", Id); } _move += value; } remove { _move -= value; - - if (_move == null) - BridgeConnector.Socket.Off("browserWindow-move" + Id); } } + public void TriggerOnMove() + { + _move(); + } + private event Action _move; /// @@ -531,24 +486,21 @@ public event Action OnMoved { if (_moved == null) { - BridgeConnector.Socket.On("browserWindow-moved" + Id, () => - { - _moved(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-moved", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-moved", Id); } _moved += value; } remove { _moved -= value; - - if (_moved == null) - BridgeConnector.Socket.Off("browserWindow-moved" + Id); } } + public void TriggerOnMoved() + { + _moved(); + } + private event Action _moved; /// @@ -560,24 +512,21 @@ public event Action OnEnterFullScreen { if (_enterFullScreen == null) { - BridgeConnector.Socket.On("browserWindow-enter-full-screen" + Id, () => - { - _enterFullScreen(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-enter-full-screen", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-enter-full-screen", Id); } _enterFullScreen += value; } remove { _enterFullScreen -= value; - - if (_enterFullScreen == null) - BridgeConnector.Socket.Off("browserWindow-enter-full-screen" + Id); } } + public void TriggerOnEnterFullScreen() + { + _enterFullScreen(); + } + private event Action _enterFullScreen; /// @@ -589,24 +538,21 @@ public event Action OnLeaveFullScreen { if (_leaveFullScreen == null) { - BridgeConnector.Socket.On("browserWindow-leave-full-screen" + Id, () => - { - _leaveFullScreen(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-leave-full-screen", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-leave-full-screen", Id); } _leaveFullScreen += value; } remove { _leaveFullScreen -= value; - - if (_leaveFullScreen == null) - BridgeConnector.Socket.Off("browserWindow-leave-full-screen" + Id); } } + public void TriggerOnLeaveFullScreen() + { + _leaveFullScreen(); + } + private event Action _leaveFullScreen; /// @@ -618,24 +564,21 @@ public event Action OnEnterHtmlFullScreen { if (_enterHtmlFullScreen == null) { - BridgeConnector.Socket.On("browserWindow-enter-html-full-screen" + Id, () => - { - _enterHtmlFullScreen(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-enter-html-full-screen", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-enter-html-full-screen", Id); } _enterHtmlFullScreen += value; } remove { _enterHtmlFullScreen -= value; - - if (_enterHtmlFullScreen == null) - BridgeConnector.Socket.Off("browserWindow-enter-html-full-screen" + Id); } } + public void TriggerOnEnterHtmlFullScreen() + { + _enterHtmlFullScreen(); + } + private event Action _enterHtmlFullScreen; /// @@ -647,24 +590,21 @@ public event Action OnLeaveHtmlFullScreen { if (_leaveHtmlFullScreen == null) { - BridgeConnector.Socket.On("browserWindow-leave-html-full-screen" + Id, () => - { - _leaveHtmlFullScreen(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-leave-html-full-screen", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-leave-html-full-screen", Id); } _leaveHtmlFullScreen += value; } remove { _leaveHtmlFullScreen -= value; - - if (_leaveHtmlFullScreen == null) - BridgeConnector.Socket.Off("browserWindow-leave-html-full-screen" + Id); } } + public void TriggerOnLeaveHtmlFullScreen() + { + _leaveHtmlFullScreen(); + } + private event Action _leaveHtmlFullScreen; /// @@ -682,24 +622,21 @@ public event Action OnAppCommand { if (_appCommand == null) { - BridgeConnector.Socket.On("browserWindow-app-command" + Id, (command) => - { - _appCommand(command.ToString()); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-app-command", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-app-command", Id); } _appCommand += value; } remove { _appCommand -= value; - - if (_appCommand == null) - BridgeConnector.Socket.Off("browserWindow-app-command" + Id); } } + public void TriggerOnAppCommand(string command) + { + _appCommand(command); + } + private event Action _appCommand; /// @@ -711,24 +648,21 @@ public event Action OnScrollTouchBegin { if (_scrollTouchBegin == null) { - BridgeConnector.Socket.On("browserWindow-scroll-touch-begin" + Id, () => - { - _scrollTouchBegin(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-scroll-touch-begin", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-scroll-touch-begin", Id); } _scrollTouchBegin += value; } remove { _scrollTouchBegin -= value; - - if (_scrollTouchBegin == null) - BridgeConnector.Socket.Off("browserWindow-scroll-touch-begin" + Id); } } + public void TriggerOnScrollTouchBegin() + { + _scrollTouchBegin(); + } + private event Action _scrollTouchBegin; /// @@ -740,24 +674,21 @@ public event Action OnScrollTouchEnd { if (_scrollTouchEnd == null) { - BridgeConnector.Socket.On("browserWindow-scroll-touch-end" + Id, () => - { - _scrollTouchEnd(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-scroll-touch-end", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-scroll-touch-end", Id); } _scrollTouchEnd += value; } remove { _scrollTouchEnd -= value; - - if (_scrollTouchEnd == null) - BridgeConnector.Socket.Off("browserWindow-scroll-touch-end" + Id); } } + public void TriggerOnScrollTouchEnd() + { + _scrollTouchEnd(); + } + private event Action _scrollTouchEnd; /// @@ -769,24 +700,21 @@ public event Action OnScrollTouchEdge { if (_scrollTouchEdge == null) { - BridgeConnector.Socket.On("browserWindow-scroll-touch-edge" + Id, () => - { - _scrollTouchEdge(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-scroll-touch-edge", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-scroll-touch-edge", Id); } _scrollTouchEdge += value; } remove { _scrollTouchEdge -= value; - - if (_scrollTouchEdge == null) - BridgeConnector.Socket.Off("browserWindow-scroll-touch-edge" + Id); } } + public void TriggerOnScrollTouchEdge() + { + _scrollTouchEdge(); + } + private event Action _scrollTouchEdge; /// @@ -798,24 +726,21 @@ public event Action OnSwipe { if (_swipe == null) { - BridgeConnector.Socket.On("browserWindow-swipe" + Id, (direction) => - { - _swipe(direction.ToString()); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-swipe", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-swipe", Id); } _swipe += value; } remove { _swipe -= value; - - if (_swipe == null) - BridgeConnector.Socket.Off("browserWindow-swipe" + Id); } } + public void TriggerOnSwipe(string direction) + { + _swipe(direction); + } + private event Action _swipe; /// @@ -827,24 +752,21 @@ public event Action OnSheetBegin { if (_sheetBegin == null) { - BridgeConnector.Socket.On("browserWindow-sheet-begin" + Id, () => - { - _sheetBegin(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-sheet-begin", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-sheet-begin", Id); } _sheetBegin += value; } remove { _sheetBegin -= value; - - if (_sheetBegin == null) - BridgeConnector.Socket.Off("browserWindow-sheet-begin" + Id); } } + public void TriggerOnSheetBegin() + { + _sheetBegin(); + } + private event Action _sheetBegin; /// @@ -856,24 +778,21 @@ public event Action OnSheetEnd { if (_sheetEnd == null) { - BridgeConnector.Socket.On("browserWindow-sheet-end" + Id, () => - { - _sheetEnd(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-sheet-end", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-sheet-end", Id); } _sheetEnd += value; } remove { _sheetEnd -= value; - - if (_sheetEnd == null) - BridgeConnector.Socket.Off("browserWindow-sheet-end" + Id); } } + public void TriggerOnSheetEnd() + { + _sheetEnd(); + } + private event Action _sheetEnd; /// @@ -885,24 +804,21 @@ public event Action OnNewWindowForTab { if (_newWindowForTab == null) { - BridgeConnector.Socket.On("browserWindow-new-window-for-tab" + Id, () => - { - _newWindowForTab(); - }); - - BridgeConnector.Socket.Emit("register-browserWindow-new-window-for-tab", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-browserWindow-new-window-for-tab", Id); } _newWindowForTab += value; } remove { _newWindowForTab -= value; - - if (_newWindowForTab == null) - BridgeConnector.Socket.Off("browserWindow-new-window-for-tab" + Id); } } + public void TriggerOnNewWindowForTab() + { + _newWindowForTab(); + } + private event Action _newWindowForTab; internal BrowserWindow(int id) { @@ -915,231 +831,161 @@ internal BrowserWindow(int id) { /// emitted for the web page, and close event will also not be emitted /// for this window, but it guarantees the closed event will be emitted. /// - public void Destroy() + public async void Destroy() { - BridgeConnector.Socket.Emit("browserWindowDestroy", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowDestroy", Id); } /// /// Try to close the window. This has the same effect as a user manually /// clicking the close button of the window. The web page may cancel the close though. /// - public void Close() + public async void Close() { - BridgeConnector.Socket.Emit("browserWindowClose", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowClose", Id); } /// /// Focuses on the window. /// - public void Focus() + public async void Focus() { - BridgeConnector.Socket.Emit("browserWindowFocus", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowFocus", Id); } /// /// Removes focus from the window. /// - public void Blur() + public async void Blur() { - BridgeConnector.Socket.Emit("browserWindowBlur", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowBlur", Id); } /// /// Whether the window is focused. /// /// - public Task IsFocusedAsync() + public async Task IsFocusedAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isFocused-completed", (isFocused) => { - BridgeConnector.Socket.Off("browserWindow-isFocused-completed"); - - taskCompletionSource.SetResult((bool)isFocused); - }); - - BridgeConnector.Socket.Emit("browserWindowIsFocused", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsFocused", Id); } /// /// Whether the window is destroyed. /// /// - public Task IsDestroyedAsync() + public async Task IsDestroyedAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isDestroyed-completed", (isDestroyed) => { - BridgeConnector.Socket.Off("browserWindow-isDestroyed-completed"); - - taskCompletionSource.SetResult((bool)isDestroyed); - }); - - BridgeConnector.Socket.Emit("browserWindowIsDestroyed", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsDestroyed", Id); } /// /// Shows and gives focus to the window. /// - public void Show() + public async void Show() { - BridgeConnector.Socket.Emit("browserWindowShow", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowShow", Id); } /// /// Shows the window but doesn’t focus on it. /// - public void ShowInactive() + public async void ShowInactive() { - BridgeConnector.Socket.Emit("browserWindowShowInactive", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowShowInactive", Id); } /// /// Hides the window. /// - public void Hide() + public async void Hide() { - BridgeConnector.Socket.Emit("browserWindowHide", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowHide", Id); } /// /// Whether the window is visible to the user. /// /// - public Task IsVisibleAsync() + public async Task IsVisibleAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isVisible-completed", (isVisible) => { - BridgeConnector.Socket.Off("browserWindow-isVisible-completed"); - - taskCompletionSource.SetResult((bool)isVisible); - }); - - BridgeConnector.Socket.Emit("browserWindowIsVisible", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsVisible", Id); } /// /// Whether current window is a modal window. /// /// - public Task IsModalAsync() + public async Task IsModalAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isModal-completed", (isModal) => { - BridgeConnector.Socket.Off("browserWindow-isModal-completed"); - - taskCompletionSource.SetResult((bool)isModal); - }); - - BridgeConnector.Socket.Emit("browserWindowIsModal", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsModal", Id); } /// /// Maximizes the window. This will also show (but not focus) the window if it isn’t being displayed already. /// - public void Maximize() + public async void Maximize() { - BridgeConnector.Socket.Emit("browserWindowMaximize", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowMaximize", Id); } /// /// Unmaximizes the window. /// - public void Unmaximize() + public async void Unmaximize() { - BridgeConnector.Socket.Emit("browserWindowUnmaximize", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowUnmaximize", Id); } /// /// Whether the window is maximized. /// /// - public Task IsMaximizedAsync() + public async Task IsMaximizedAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isMaximized-completed", (isMaximized) => { - BridgeConnector.Socket.Off("browserWindow-isMaximized-completed"); - - taskCompletionSource.SetResult((bool)isMaximized); - }); - - BridgeConnector.Socket.Emit("browserWindowIsMaximized", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsMaximized", Id); } /// /// Minimizes the window. On some platforms the minimized window will be shown in the Dock. /// - public void Minimize() + public async void Minimize() { - BridgeConnector.Socket.Emit("browserWindowMinimize", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowMinimize", Id); } /// /// Restores the window from minimized state to its previous state. /// - public void Restore() + public async void Restore() { - BridgeConnector.Socket.Emit("browserWindowRestore", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowRestore", Id); } /// /// Whether the window is minimized. /// /// - public Task IsMinimizedAsync() + public async Task IsMinimizedAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isMinimized-completed", (isMinimized) => { - BridgeConnector.Socket.Off("browserWindow-isMinimized-completed"); - - taskCompletionSource.SetResult((bool)isMinimized); - }); - - BridgeConnector.Socket.Emit("browserWindowIsMinimized", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsMinimized", Id); } /// /// Sets whether the window should be in fullscreen mode. /// - public void SetFullScreen(bool flag) + public async void SetFullScreen(bool flag) { - BridgeConnector.Socket.Emit("browserWindowSetFullScreen", Id, flag); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetFullScreen", Id, flag); } /// /// Whether the window is in fullscreen mode. /// /// - public Task IsFullScreenAsync() + public async Task IsFullScreenAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isFullScreen-completed", (isFullScreen) => { - BridgeConnector.Socket.Off("browserWindow-isFullScreen-completed"); - - taskCompletionSource.SetResult((bool)isFullScreen); - }); - - BridgeConnector.Socket.Emit("browserWindowIsFullScreen", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsFullScreen", Id); } /// @@ -1156,9 +1002,9 @@ public Task IsFullScreenAsync() /// /// The aspect ratio to maintain for some portion of the content view. /// The extra size not to be included while maintaining the aspect ratio. - public void SetAspectRatio(int aspectRatio, Size extraSize) + public async void SetAspectRatio(int aspectRatio, Size extraSize) { - BridgeConnector.Socket.Emit("browserWindowSetAspectRatio", Id, aspectRatio, JObject.FromObject(extraSize, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetAspectRatio", Id, aspectRatio, JObject.FromObject(extraSize, _jsonSerializer)); } /// @@ -1167,9 +1013,9 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) /// The absolute path to the file to preview with QuickLook. This is important as /// Quick Look uses the file name and file extension on the path to determine the content type of the /// file to open. - public void PreviewFile(string path) + public async void PreviewFile(string path) { - BridgeConnector.Socket.Emit("browserWindowPreviewFile", Id, path); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowPreviewFile", Id, path); } /// @@ -1180,26 +1026,26 @@ public void PreviewFile(string path) /// file to open. /// The name of the file to display on the Quick Look modal view. This is /// purely visual and does not affect the content type of the file. Defaults to path. - public void PreviewFile(string path, string displayname) + public async void PreviewFile(string path, string displayname) { - BridgeConnector.Socket.Emit("browserWindowPreviewFile", Id, path, displayname); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowPreviewFile", Id, path, displayname); } /// /// Closes the currently open Quick Look panel. /// - public void CloseFilePreview() + public async void CloseFilePreview() { - BridgeConnector.Socket.Emit("browserWindowCloseFilePreview", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowCloseFilePreview", Id); } /// /// Resizes and moves the window to the supplied bounds /// /// - public void SetBounds(Rectangle bounds) + public async void SetBounds(Rectangle bounds) { - BridgeConnector.Socket.Emit("browserWindowSetBounds", Id, JObject.FromObject(bounds, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetBounds", Id, JObject.FromObject(bounds, _jsonSerializer)); } /// @@ -1207,37 +1053,28 @@ public void SetBounds(Rectangle bounds) /// /// /// - public void SetBounds(Rectangle bounds, bool animate) + public async void SetBounds(Rectangle bounds, bool animate) { - BridgeConnector.Socket.Emit("browserWindowSetBounds", Id, JObject.FromObject(bounds, _jsonSerializer), animate); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetBounds", Id, JObject.FromObject(bounds, _jsonSerializer), animate); } /// /// Gets the bounds asynchronous. /// /// - public Task GetBoundsAsync() + public async Task GetBoundsAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-getBounds-completed", (getBounds) => { - BridgeConnector.Socket.Off("browserWindow-getBounds-completed"); - - taskCompletionSource.SetResult(((JObject)getBounds).ToObject()); - }); - - BridgeConnector.Socket.Emit("browserWindowGetBounds", Id); - - return taskCompletionSource.Task; + var result = await SignalrSerializeHelper.GetSignalrResultJObject("browserWindowGetBounds", Id); + return result.ToObject(); } /// /// Resizes and moves the window’s client area (e.g. the web page) to the supplied bounds. /// /// - public void SetContentBounds(Rectangle bounds) + public async void SetContentBounds(Rectangle bounds) { - BridgeConnector.Socket.Emit("browserWindowSetContentBounds", Id, JObject.FromObject(bounds, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetContentBounds", Id, JObject.FromObject(bounds, _jsonSerializer)); } /// @@ -1245,28 +1082,19 @@ public void SetContentBounds(Rectangle bounds) /// /// /// - public void SetContentBounds(Rectangle bounds, bool animate) + public async void SetContentBounds(Rectangle bounds, bool animate) { - BridgeConnector.Socket.Emit("browserWindowSetContentBounds", Id, JObject.FromObject(bounds, _jsonSerializer), animate); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetContentBounds", Id, JObject.FromObject(bounds, _jsonSerializer), animate); } /// /// Gets the content bounds asynchronous. /// /// - public Task GetContentBoundsAsync() + public async Task GetContentBoundsAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-getContentBounds-completed", (getContentBounds) => { - BridgeConnector.Socket.Off("browserWindow-getContentBounds-completed"); - - taskCompletionSource.SetResult(((JObject)getContentBounds).ToObject()); - }); - - BridgeConnector.Socket.Emit("browserWindowGetContentBounds", Id); - - return taskCompletionSource.Task; + var result = await SignalrSerializeHelper.GetSignalrResultJObject("browserWindowGetContentBounds", Id); + return result.ToObject(); } /// @@ -1274,9 +1102,9 @@ public Task GetContentBoundsAsync() /// /// /// - public void SetSize(int width, int height) + public async void SetSize(int width, int height) { - BridgeConnector.Socket.Emit("browserWindowSetSize", Id, width, height); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetSize", Id, width, height); } /// @@ -1285,28 +1113,18 @@ public void SetSize(int width, int height) /// /// /// - public void SetSize(int width, int height, bool animate) + public async void SetSize(int width, int height, bool animate) { - BridgeConnector.Socket.Emit("browserWindowSetSize", Id, width, height, animate); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetSize", Id, width, height, animate); } /// /// Contains the window’s width and height. /// /// - public Task GetSizeAsync() + public async Task GetSizeAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-getSize-completed", (size) => { - BridgeConnector.Socket.Off("browserWindow-getSize-completed"); - - taskCompletionSource.SetResult(((JArray)size).ToObject()); - }); - - BridgeConnector.Socket.Emit("browserWindowGetSize", Id); - - return taskCompletionSource.Task; + return (await SignalrSerializeHelper.GetSignalrResultJArray("browserWindowGetSize", Id)).ToObject(); } /// @@ -1314,9 +1132,9 @@ public Task GetSizeAsync() /// /// /// - public void SetContentSize(int width, int height) + public async void SetContentSize(int width, int height) { - BridgeConnector.Socket.Emit("browserWindowSetContentSize", Id, width, height); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetContentSize", Id, width, height); } /// @@ -1325,28 +1143,18 @@ public void SetContentSize(int width, int height) /// /// /// - public void SetContentSize(int width, int height, bool animate) + public async void SetContentSize(int width, int height, bool animate) { - BridgeConnector.Socket.Emit("browserWindowSetContentSize", Id, width, height, animate); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetContentSize", Id, width, height, animate); } /// /// Contains the window’s client area’s width and height. /// /// - public Task GetContentSizeAsync() + public async Task GetContentSizeAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-getContentSize-completed", (size) => { - BridgeConnector.Socket.Off("browserWindow-getContentSize-completed"); - - taskCompletionSource.SetResult(((JArray)size).ToObject()); - }); - - BridgeConnector.Socket.Emit("browserWindowGetContentSize", Id); - - return taskCompletionSource.Task; + return (await SignalrSerializeHelper.GetSignalrResultJArray("browserWindowGetContentSize", Id)).ToObject(); } /// @@ -1354,28 +1162,18 @@ public Task GetContentSizeAsync() /// /// /// - public void SetMinimumSize(int width, int height) + public async void SetMinimumSize(int width, int height) { - BridgeConnector.Socket.Emit("browserWindowSetMinimumSize", Id, width, height); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetMinimumSize", Id, width, height); } /// /// Contains the window’s minimum width and height. /// /// - public Task GetMinimumSizeAsync() + public async Task GetMinimumSizeAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-getMinimumSize-completed", (size) => { - BridgeConnector.Socket.Off("browserWindow-getMinimumSize-completed"); - - taskCompletionSource.SetResult(((JArray)size).ToObject()); - }); - - BridgeConnector.Socket.Emit("browserWindowGetMinimumSize", Id); - - return taskCompletionSource.Task; + return (await SignalrSerializeHelper.GetSignalrResultJArray("browserWindowGetMinimumSize", Id)).ToObject(); } /// @@ -1383,65 +1181,45 @@ public Task GetMinimumSizeAsync() /// /// /// - public void SetMaximumSize(int width, int height) + public async void SetMaximumSize(int width, int height) { - BridgeConnector.Socket.Emit("browserWindowSetMaximumSize", Id, width, height); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetMaximumSize", Id, width, height); } /// /// Contains the window’s maximum width and height. /// /// - public Task GetMaximumSizeAsync() + public async Task GetMaximumSizeAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-getMaximumSize-completed", (size) => { - BridgeConnector.Socket.Off("browserWindow-getMaximumSize-completed"); - - taskCompletionSource.SetResult(((JArray)size).ToObject()); - }); - - BridgeConnector.Socket.Emit("browserWindowGetMaximumSize", Id); - - return taskCompletionSource.Task; + return (await SignalrSerializeHelper.GetSignalrResultJArray("browserWindowGetMaximumSize", Id)).ToObject(); } /// /// Sets whether the window can be manually resized by user. /// /// - public void SetResizable(bool resizable) + public async void SetResizable(bool resizable) { - BridgeConnector.Socket.Emit("browserWindowSetResizable", Id, resizable); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetResizable", Id, resizable); } /// /// Whether the window can be manually resized by user. /// /// - public Task IsResizableAsync() + public async Task IsResizableAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isResizable-completed", (resizable) => { - BridgeConnector.Socket.Off("browserWindow-isResizable-completed"); - - taskCompletionSource.SetResult((bool)resizable); - }); - - BridgeConnector.Socket.Emit("browserWindowIsResizable", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsResizable", Id); } /// /// Sets whether the window can be moved by user. On Linux does nothing. /// /// - public void SetMovable(bool movable) + public async void SetMovable(bool movable) { - BridgeConnector.Socket.Emit("browserWindowSetMovable", Id, movable); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetMovable", Id, movable); } /// @@ -1450,28 +1228,18 @@ public void SetMovable(bool movable) /// On Linux always returns true. /// /// On Linux always returns true. - public Task IsMovableAsync() + public async Task IsMovableAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isMovable-completed", (movable) => { - BridgeConnector.Socket.Off("browserWindow-isMovable-completed"); - - taskCompletionSource.SetResult((bool)movable); - }); - - BridgeConnector.Socket.Emit("browserWindowIsMovable", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsMovable", Id); } /// /// Sets whether the window can be manually minimized by user. On Linux does nothing. /// /// - public void SetMinimizable(bool minimizable) + public async void SetMinimizable(bool minimizable) { - BridgeConnector.Socket.Emit("browserWindowSetMinimizable", Id, minimizable); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetMinimizable", Id, minimizable); } /// @@ -1480,28 +1248,18 @@ public void SetMinimizable(bool minimizable) /// On Linux always returns true. /// /// On Linux always returns true. - public Task IsMinimizableAsync() + public async Task IsMinimizableAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isMinimizable-completed", (minimizable) => { - BridgeConnector.Socket.Off("browserWindow-isMinimizable-completed"); - - taskCompletionSource.SetResult((bool)minimizable); - }); - - BridgeConnector.Socket.Emit("browserWindowIsMinimizable", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsMinimizable", Id); } /// /// Sets whether the window can be manually maximized by user. On Linux does nothing. /// /// - public void SetMaximizable(bool maximizable) + public async void SetMaximizable(bool maximizable) { - BridgeConnector.Socket.Emit("browserWindowSetMaximizable", Id, maximizable); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetMaximizable", Id, maximizable); } /// @@ -1510,56 +1268,36 @@ public void SetMaximizable(bool maximizable) /// On Linux always returns true. /// /// On Linux always returns true. - public Task IsMaximizableAsync() + public async Task IsMaximizableAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isMaximizable-completed", (maximizable) => { - BridgeConnector.Socket.Off("browserWindow-isMaximizable-completed"); - - taskCompletionSource.SetResult((bool)maximizable); - }); - - BridgeConnector.Socket.Emit("browserWindowIsMaximizable", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsMaximizable", Id); } /// /// Sets whether the maximize/zoom window button toggles fullscreen mode or maximizes the window. /// /// - public void SetFullScreenable(bool fullscreenable) + public async void SetFullScreenable(bool fullscreenable) { - BridgeConnector.Socket.Emit("browserWindowSetFullScreenable", Id, fullscreenable); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetFullScreenable", Id, fullscreenable); } /// /// Whether the maximize/zoom window button toggles fullscreen mode or maximizes the window. /// /// - public Task IsFullScreenableAsync() + public async Task IsFullScreenableAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isFullScreenable-completed", (fullscreenable) => { - BridgeConnector.Socket.Off("browserWindow-isFullScreenable-completed"); - - taskCompletionSource.SetResult((bool)fullscreenable); - }); - - BridgeConnector.Socket.Emit("browserWindowIsFullScreenable", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsFullScreenable", Id); } /// /// Sets whether the window can be manually closed by user. On Linux does nothing. /// /// - public void SetClosable(bool closable) + public async void SetClosable(bool closable) { - BridgeConnector.Socket.Emit("browserWindowSetClosable", Id, closable); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetClosable", Id, closable); } /// @@ -1568,19 +1306,9 @@ public void SetClosable(bool closable) /// On Linux always returns true. /// /// On Linux always returns true. - public Task IsClosableAsync() + public async Task IsClosableAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isClosable-completed", (closable) => { - BridgeConnector.Socket.Off("browserWindow-isClosable-completed"); - - taskCompletionSource.SetResult((bool)closable); - }); - - BridgeConnector.Socket.Emit("browserWindowIsClosable", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsClosable", Id); } /// @@ -1589,9 +1317,9 @@ public Task IsClosableAsync() /// window which can not be focused on. /// /// - public void SetAlwaysOnTop(bool flag) + public async void SetAlwaysOnTop(bool flag) { - BridgeConnector.Socket.Emit("browserWindowSetAlwaysOnTop", Id, flag); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetAlwaysOnTop", Id, flag); } /// @@ -1603,9 +1331,9 @@ public void SetAlwaysOnTop(bool flag) /// Values include normal, floating, torn-off-menu, modal-panel, main-menu, /// status, pop-up-menu and screen-saver. The default is floating. /// See the macOS docs - public void SetAlwaysOnTop(bool flag, OnTopLevel level) + public async void SetAlwaysOnTop(bool flag, OnTopLevel level) { - BridgeConnector.Socket.Emit("browserWindowSetAlwaysOnTop", Id, flag, level.GetDescription()); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetAlwaysOnTop", Id, flag, level.GetDescription()); } /// @@ -1619,36 +1347,26 @@ public void SetAlwaysOnTop(bool flag, OnTopLevel level) /// See the macOS docs /// The number of layers higher to set this window relative to the given level. /// The default is 0. Note that Apple discourages setting levels higher than 1 above screen-saver. - public void SetAlwaysOnTop(bool flag, OnTopLevel level, int relativeLevel) + public async void SetAlwaysOnTop(bool flag, OnTopLevel level, int relativeLevel) { - BridgeConnector.Socket.Emit("browserWindowSetAlwaysOnTop", Id, flag, level.GetDescription(), relativeLevel); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetAlwaysOnTop", Id, flag, level.GetDescription(), relativeLevel); } /// /// Whether the window is always on top of other windows. /// /// - public Task IsAlwaysOnTopAsync() + public async Task IsAlwaysOnTopAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isAlwaysOnTop-completed", (isAlwaysOnTop) => { - BridgeConnector.Socket.Off("browserWindow-isAlwaysOnTop-completed"); - - taskCompletionSource.SetResult((bool)isAlwaysOnTop); - }); - - BridgeConnector.Socket.Emit("browserWindowIsAlwaysOnTop", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsAlwaysOnTop", Id); } /// /// Moves window to the center of the screen. /// - public void Center() + public async void Center() { - BridgeConnector.Socket.Emit("browserWindowCenter", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowCenter", Id); } /// @@ -1665,7 +1383,7 @@ public void SetPosition(int x, int y) x = x - 7; } - BridgeConnector.Socket.Emit("browserWindowSetPosition", Id, x, y); + Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetPosition", Id, x, y); } /// @@ -1683,7 +1401,7 @@ public void SetPosition(int x, int y, bool animate) x = x - 7; } - BridgeConnector.Socket.Emit("browserWindowSetPosition", Id, x, y, animate); + Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetPosition", Id, x, y, animate); } private bool isWindows10() @@ -1695,28 +1413,18 @@ private bool isWindows10() /// Contains the window’s current position. /// /// - public Task GetPositionAsync() + public async Task GetPositionAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-getPosition-completed", (position) => { - BridgeConnector.Socket.Off("browserWindow-getPosition-completed"); - - taskCompletionSource.SetResult(((JArray)position).ToObject()); - }); - - BridgeConnector.Socket.Emit("browserWindowGetPosition", Id); - - return taskCompletionSource.Task; + return (await SignalrSerializeHelper.GetSignalrResultJArray("browserWindowGetPosition", Id)).ToObject(); } /// /// Changes the title of native window to title. /// /// - public void SetTitle(string title) + public async void SetTitle(string title) { - BridgeConnector.Socket.Emit("browserWindowSetTitle", Id, title); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetTitle", Id, title); } /// @@ -1725,19 +1433,9 @@ public void SetTitle(string title) /// Note: The title of web page can be different from the title of the native window. /// /// - public Task GetTitleAsync() + public async Task GetTitleAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-getTitle-completed", (title) => { - BridgeConnector.Socket.Off("browserWindow-getTitle-completed"); - - taskCompletionSource.SetResult(title.ToString()); - }); - - BridgeConnector.Socket.Emit("browserWindowGetTitle", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultString("browserWindowGetTitle", Id); } /// @@ -1746,9 +1444,9 @@ public Task GetTitleAsync() /// but you may want to display them beneath a HTML-rendered toolbar. /// /// - public void SetSheetOffset(float offsetY) + public async void SetSheetOffset(float offsetY) { - BridgeConnector.Socket.Emit("browserWindowSetSheetOffset", Id, offsetY); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetSheetOffset", Id, offsetY); } /// @@ -1758,74 +1456,54 @@ public void SetSheetOffset(float offsetY) /// /// /// - public void SetSheetOffset(float offsetY, float offsetX) + public async void SetSheetOffset(float offsetY, float offsetX) { - BridgeConnector.Socket.Emit("browserWindowSetSheetOffset", Id, offsetY, offsetX); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetSheetOffset", Id, offsetY, offsetX); } /// /// Starts or stops flashing the window to attract user’s attention. /// /// - public void FlashFrame(bool flag) + public async void FlashFrame(bool flag) { - BridgeConnector.Socket.Emit("browserWindowFlashFrame", Id, flag); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowFlashFrame", Id, flag); } /// /// Makes the window not show in the taskbar. /// /// - public void SetSkipTaskbar(bool skip) + public async void SetSkipTaskbar(bool skip) { - BridgeConnector.Socket.Emit("browserWindowSetSkipTaskbar", Id, skip); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetSkipTaskbar", Id, skip); } /// /// Enters or leaves the kiosk mode. /// /// - public void SetKiosk(bool flag) + public async void SetKiosk(bool flag) { - BridgeConnector.Socket.Emit("browserWindowSetKiosk", Id, flag); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetKiosk", Id, flag); } /// /// Whether the window is in kiosk mode. /// /// - public Task IsKioskAsync() + public async Task IsKioskAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isKiosk-completed", (isKiosk) => { - BridgeConnector.Socket.Off("browserWindow-isKiosk-completed"); - - taskCompletionSource.SetResult((bool)isKiosk); - }); - - BridgeConnector.Socket.Emit("browserWindowIsKiosk", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsKiosk", Id); } /// /// Returns the native type of the handle is HWND on Windows, NSView* on macOS, and Window (unsigned long) on Linux. /// /// string of the native handle obtained, HWND on Windows, NSView* on macOS, and Window (unsigned long) on Linux. - public Task GetNativeWindowHandle() + public async Task GetNativeWindowHandle() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-getNativeWindowHandle-completed", (nativeWindowHandle) => - { - BridgeConnector.Socket.Off("browserWindow-getNativeWindowHandle-completed"); - taskCompletionSource.SetResult(nativeWindowHandle.ToString()); - }); - - BridgeConnector.Socket.Emit("browserWindowGetNativeWindowHandle", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultString("browserWindowGetNativeWindowHandle", Id); } /// @@ -1833,28 +1511,18 @@ public Task GetNativeWindowHandle() /// and the icon of the file will show in window’s title bar. /// /// - public void SetRepresentedFilename(string filename) + public async void SetRepresentedFilename(string filename) { - BridgeConnector.Socket.Emit("browserWindowSetRepresentedFilename", Id, filename); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetRepresentedFilename", Id, filename); } /// /// The pathname of the file the window represents. /// /// - public Task GetRepresentedFilenameAsync() + public async Task GetRepresentedFilenameAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-getRepresentedFilename-completed", (pathname) => { - BridgeConnector.Socket.Off("browserWindow-getRepresentedFilename-completed"); - - taskCompletionSource.SetResult(pathname.ToString()); - }); - - BridgeConnector.Socket.Emit("browserWindowGetRepresentedFilename", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultString("browserWindowGetRepresentedFilename", Id); } /// @@ -1862,44 +1530,34 @@ public Task GetRepresentedFilenameAsync() /// and the icon in title bar will become gray when set to true. /// /// - public void SetDocumentEdited(bool edited) + public async void SetDocumentEdited(bool edited) { - BridgeConnector.Socket.Emit("browserWindowSetDocumentEdited", Id, edited); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetDocumentEdited", Id, edited); } /// /// Whether the window’s document has been edited. /// /// - public Task IsDocumentEditedAsync() + public async Task IsDocumentEditedAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isDocumentEdited-completed", (edited) => { - BridgeConnector.Socket.Off("browserWindow-isDocumentEdited-completed"); - - taskCompletionSource.SetResult((bool)edited); - }); - - BridgeConnector.Socket.Emit("browserWindowIsDocumentEdited", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsDocumentEdited", Id); } /// /// Focuses the on web view. /// - public void FocusOnWebView() + public async void FocusOnWebView() { - BridgeConnector.Socket.Emit("browserWindowFocusOnWebView", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowFocusOnWebView", Id); } /// /// Blurs the web view. /// - public void BlurWebView() + public async void BlurWebView() { - BridgeConnector.Socket.Emit("browserWindowBlurWebView", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowBlurWebView", Id); } /// @@ -1907,9 +1565,9 @@ public void BlurWebView() /// a path to a local HTML file using the file:// protocol. /// /// - public void LoadURL(string url) + public async void LoadURL(string url) { - BridgeConnector.Socket.Emit("browserWindowLoadURL", Id, url); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowLoadURL", Id, url); } /// @@ -1918,17 +1576,17 @@ public void LoadURL(string url) /// /// /// - public void LoadURL(string url, LoadURLOptions options) + public async void LoadURL(string url, LoadURLOptions options) { - BridgeConnector.Socket.Emit("browserWindowLoadURL", Id, url, JObject.FromObject(options, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowLoadURL", Id, url, JObject.FromObject(options, _jsonSerializer)); } /// /// Same as webContents.reload. /// - public void Reload() + public async void Reload() { - BridgeConnector.Socket.Emit("browserWindowReload", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowReload", Id); } /// @@ -1940,15 +1598,17 @@ public void Reload() public IReadOnlyCollection MenuItems { get { return _items.AsReadOnly(); } } private List _items = new List(); + // ToDo: Check this -> Possibly wrong + /// /// Sets the menu as the window’s menu bar, /// setting it to null will remove the menu bar. /// /// - public void SetMenu(MenuItem[] menuItems) + /*public void SetMenu(MenuItem[] menuItems) { menuItems.AddMenuItemsId(); - BridgeConnector.Socket.Emit("browserWindowSetMenu", Id, JArray.FromObject(menuItems, _jsonSerializer)); + BridgeConnector.Socket.Emit("browserWindowSetMenu", JArray.FromObject(menuItems, _jsonSerializer)); _items.AddRange(menuItems); BridgeConnector.Socket.Off("windowMenuItemClicked"); @@ -1956,14 +1616,27 @@ public void SetMenu(MenuItem[] menuItems) MenuItem menuItem = _items.GetMenuItem(id.ToString()); menuItem?.Click(); }); + }*/ + + public void SetMenu(MenuItem[] menuItems) + { + menuItems.AddMenuItemsId(); + Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetMenu", Id, JArray.FromObject(menuItems, _jsonSerializer)); + _items.AddRange(menuItems); + } + + public void TriggerOnMenuItemClicked(string id) + { + MenuItem menuItem = _items.GetMenuItem(id.ToString()); + menuItem?.Click(); } /// /// Remove the window's menu bar. /// - public void RemoveMenu() + public async void RemoveMenu() { - BridgeConnector.Socket.Emit("browserWindowRemoveMenu", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowRemoveMenu", Id); } /// @@ -1977,9 +1650,9 @@ public void RemoveMenu() /// assumed. /// /// - public void SetProgressBar(double progress) + public async void SetProgressBar(double progress) { - BridgeConnector.Socket.Emit("browserWindowSetProgressBar", Id, progress); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetProgressBar", Id, progress); } /// @@ -1994,18 +1667,18 @@ public void SetProgressBar(double progress) /// /// /// - public void SetProgressBar(double progress, ProgressBarOptions progressBarOptions) + public async void SetProgressBar(double progress, ProgressBarOptions progressBarOptions) { - BridgeConnector.Socket.Emit("browserWindowSetProgressBar", Id, progress, JObject.FromObject(progressBarOptions, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetProgressBar", Id, progress, JObject.FromObject(progressBarOptions, _jsonSerializer)); } /// /// Sets whether the window should have a shadow. On Windows and Linux does nothing. /// /// - public void SetHasShadow(bool hasShadow) + public async void SetHasShadow(bool hasShadow) { - BridgeConnector.Socket.Emit("browserWindowSetHasShadow", Id, hasShadow); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetHasShadow", Id, hasShadow); } /// @@ -2014,19 +1687,9 @@ public void SetHasShadow(bool hasShadow) /// On Windows and Linux always returns true. /// /// - public Task HasShadowAsync() + public async Task HasShadowAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-hasShadow-completed", (hasShadow) => { - BridgeConnector.Socket.Off("browserWindow-hasShadow-completed"); - - taskCompletionSource.SetResult((bool)hasShadow); - }); - - BridgeConnector.Socket.Emit("browserWindowHasShadow", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowHasShadow", Id); } /// @@ -2050,28 +1713,16 @@ public Task HasShadowAsync() /// /// /// Whether the buttons were added successfully. - public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) + public async Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) { var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindowSetThumbarButtons-completed", (success) => { - BridgeConnector.Socket.Off("browserWindowSetThumbarButtons-completed"); - - taskCompletionSource.SetResult((bool)success); - }); - thumbarButtons.AddThumbarButtonsId(); - BridgeConnector.Socket.Emit("browserWindowSetThumbarButtons", Id, JArray.FromObject(thumbarButtons, _jsonSerializer)); + bool result = await SignalrSerializeHelper.GetSignalrResultBool("browserWindowSetThumbarButtons", Id, JArray.FromObject(thumbarButtons, _jsonSerializer)); + taskCompletionSource.SetResult(result); _thumbarButtons.Clear(); _thumbarButtons.AddRange(thumbarButtons); - BridgeConnector.Socket.Off("thumbarButtonClicked"); - BridgeConnector.Socket.On("thumbarButtonClicked", (id) => { - ThumbarButton thumbarButton = _thumbarButtons.GetThumbarButton(id.ToString()); - thumbarButton?.Click(); - }); - - return taskCompletionSource.Task; + return await taskCompletionSource.Task; } /// @@ -2080,18 +1731,18 @@ public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) /// an empty region: {x: 0, y: 0, width: 0, height: 0}. /// /// - public void SetThumbnailClip(Rectangle rectangle) + public async void SetThumbnailClip(Rectangle rectangle) { - BridgeConnector.Socket.Emit("browserWindowSetThumbnailClip", Id, rectangle); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetThumbnailClip", Id, rectangle); } /// /// Sets the toolTip that is displayed when hovering over the window thumbnail in the taskbar. /// /// - public void SetThumbnailToolTip(string tooltip) + public async void SetThumbnailToolTip(string tooltip) { - BridgeConnector.Socket.Emit("browserWindowSetThumbnailToolTip", Id, tooltip); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetThumbnailToolTip", Id, tooltip); } /// @@ -2101,17 +1752,17 @@ public void SetThumbnailToolTip(string tooltip) /// If one of those properties is not set, then neither will be used. /// /// - public void SetAppDetails(AppDetailsOptions options) + public async void SetAppDetails(AppDetailsOptions options) { - BridgeConnector.Socket.Emit("browserWindowSetAppDetails", Id, JObject.FromObject(options, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetAppDetails", Id, JObject.FromObject(options, _jsonSerializer)); } /// /// Same as webContents.showDefinitionForSelection(). /// - public void ShowDefinitionForSelection() + public async void ShowDefinitionForSelection() { - BridgeConnector.Socket.Emit("browserWindowShowDefinitionForSelection", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowShowDefinitionForSelection", Id); } /// @@ -2121,28 +1772,18 @@ public void ShowDefinitionForSelection() /// If the menu bar is already visible, calling setAutoHideMenuBar(true) won’t hide it immediately. /// /// - public void SetAutoHideMenuBar(bool hide) + public async void SetAutoHideMenuBar(bool hide) { - BridgeConnector.Socket.Emit("browserWindowSetAutoHideMenuBar", Id, hide); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetAutoHideMenuBar", Id, hide); } /// /// Whether menu bar automatically hides itself. /// /// - public Task IsMenuBarAutoHideAsync() + public async Task IsMenuBarAutoHideAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isMenuBarAutoHide-completed", (isMenuBarAutoHide) => { - BridgeConnector.Socket.Off("browserWindow-isMenuBarAutoHide-completed"); - - taskCompletionSource.SetResult((bool)isMenuBarAutoHide); - }); - - BridgeConnector.Socket.Emit("browserWindowIsMenuBarAutoHide", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsMenuBarAutoHide", Id); } /// @@ -2150,28 +1791,18 @@ public Task IsMenuBarAutoHideAsync() /// users can still bring up the menu bar by pressing the single Alt key. /// /// - public void SetMenuBarVisibility(bool visible) + public async void SetMenuBarVisibility(bool visible) { - BridgeConnector.Socket.Emit("browserWindowSetMenuBarVisibility", Id, visible); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetMenuBarVisibility", Id, visible); } /// /// Whether the menu bar is visible. /// /// - public Task IsMenuBarVisibleAsync() + public async Task IsMenuBarVisibleAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isMenuBarVisible-completed", (isMenuBarVisible) => { - BridgeConnector.Socket.Off("browserWindow-isMenuBarVisible-completed"); - - taskCompletionSource.SetResult((bool)isMenuBarVisible); - }); - - BridgeConnector.Socket.Emit("browserWindowIsMenuBarVisible", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsMenuBarVisible", Id); } /// @@ -2180,9 +1811,9 @@ public Task IsMenuBarVisibleAsync() /// Note: This API does nothing on Windows. /// /// - public void SetVisibleOnAllWorkspaces(bool visible) + public async void SetVisibleOnAllWorkspaces(bool visible) { - BridgeConnector.Socket.Emit("browserWindowSetVisibleOnAllWorkspaces", Id, visible); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetVisibleOnAllWorkspaces", Id, visible); } /// @@ -2191,19 +1822,9 @@ public void SetVisibleOnAllWorkspaces(bool visible) /// Note: This API always returns false on Windows. /// /// - public Task IsVisibleOnAllWorkspacesAsync() + public async Task IsVisibleOnAllWorkspacesAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-isVisibleOnAllWorkspaces-completed", (isVisibleOnAllWorkspaces) => { - BridgeConnector.Socket.Off("browserWindow-isVisibleOnAllWorkspaces-completed"); - - taskCompletionSource.SetResult((bool)isVisibleOnAllWorkspaces); - }); - - BridgeConnector.Socket.Emit("browserWindowIsVisibleOnAllWorkspaces", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsVisibleOnAllWorkspaces", Id); } /// @@ -2213,9 +1834,9 @@ public Task IsVisibleOnAllWorkspacesAsync() /// below this window, but if this window has focus, it will still receive keyboard events. /// /// - public void SetIgnoreMouseEvents(bool ignore) + public async void SetIgnoreMouseEvents(bool ignore) { - BridgeConnector.Socket.Emit("browserWindowSetIgnoreMouseEvents", Id, ignore); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetIgnoreMouseEvents", Id, ignore); } /// @@ -2225,18 +1846,18 @@ public void SetIgnoreMouseEvents(bool ignore) /// On Windows it calls SetWindowDisplayAffinity with WDA_MONITOR. /// /// - public void SetContentProtection(bool enable) + public async void SetContentProtection(bool enable) { - BridgeConnector.Socket.Emit("browserWindowSetContentProtection", Id, enable); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetContentProtection", Id, enable); } /// /// Changes whether the window can be focused. /// /// - public void SetFocusable(bool focusable) + public async void SetFocusable(bool focusable) { - BridgeConnector.Socket.Emit("browserWindowSetFocusable", Id, focusable); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetFocusable", Id, focusable); } /// @@ -2244,67 +1865,49 @@ public void SetFocusable(bool focusable) /// passing null will turn current window into a top-level window. /// /// - public void SetParentWindow(BrowserWindow parent) + public async void SetParentWindow(BrowserWindow parent) { - BridgeConnector.Socket.Emit("browserWindowSetParentWindow", Id, JObject.FromObject(parent, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetParentWindow", Id, JObject.FromObject(parent, _jsonSerializer)); } /// /// The parent window. /// /// - public Task GetParentWindowAsync() + public async Task GetParentWindowAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("browserWindow-getParentWindow-completed", (id) => { - BridgeConnector.Socket.Off("browserWindow-getParentWindow-completed"); - var browserWindowId = int.Parse(id.ToString()); - var browserWindow = Electron.WindowManager.BrowserWindows.ToList().Single(x => x.Id == browserWindowId); - - taskCompletionSource.SetResult(browserWindow); - }); - - BridgeConnector.Socket.Emit("browserWindowGetParentWindow", Id); - - return taskCompletionSource.Task; + string parentId = await SignalrSerializeHelper.GetSignalrResultString("browserWindowGetParentWindow", Id); + var browserWindowId = int.Parse(parentId.ToString()); + var browserWindow = Electron.WindowManager.BrowserWindows.ToList().Single(x => x.Id == browserWindowId); + return browserWindow; } /// /// All child windows. /// /// - public Task> GetChildWindowsAsync() + public async Task> GetChildWindowsAsync() { - var taskCompletionSource = new TaskCompletionSource>(); - - BridgeConnector.Socket.On("browserWindow-getChildWindows-completed", (ids) => { - BridgeConnector.Socket.Off("browserWindow-getChildWindows-completed"); - var browserWindowIds = ((JArray)ids).ToObject(); - var browserWindows = new List(); + JArray childWindows = await SignalrSerializeHelper.GetSignalrResultJArray("browserWindowGetChildWindows", Id); + var browserWindowIds = (childWindows).ToObject(); + var browserWindows = new List(); - browserWindowIds.ToList().ForEach(id => - { - var browserWindow = Electron.WindowManager.BrowserWindows.ToList().Single(x => x.Id == id); - browserWindows.Add(browserWindow); - }); - - - taskCompletionSource.SetResult(browserWindows); + browserWindowIds.ToList().ForEach(id => + { + var browserWindow = Electron.WindowManager.BrowserWindows.ToList().Single(x => x.Id == id); + browserWindows.Add(browserWindow); }); - BridgeConnector.Socket.Emit("browserWindowGetChildWindows", Id); - - return taskCompletionSource.Task; + return browserWindows; } /// /// Controls whether to hide cursor when typing. /// /// - public void SetAutoHideCursor(bool autoHide) + public async void SetAutoHideCursor(bool autoHide) { - BridgeConnector.Socket.Emit("browserWindowSetAutoHideCursor", Id, autoHide); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetAutoHideCursor", Id, autoHide); } /// @@ -2314,9 +1917,9 @@ public void SetAutoHideCursor(bool autoHide) /// Can be appearance-based, light, dark, titlebar, selection, /// menu, popover, sidebar, medium-light or ultra-dark. /// See the macOS documentation for more details. - public void SetVibrancy(Vibrancy type) + public async void SetVibrancy(Vibrancy type) { - BridgeConnector.Socket.Emit("browserWindowSetVibrancy", Id, type.GetDescription()); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetVibrancy", Id, type.GetDescription()); } /// @@ -2330,9 +1933,9 @@ public void SetVibrancy(Vibrancy type) /// It is meant to be an alternative to the webview tag. /// /// - public void SetBrowserView(BrowserView browserView) + public async void SetBrowserView(BrowserView browserView) { - BridgeConnector.Socket.Emit("browserWindow-setBrowserView", Id, browserView.Id); + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindow-setBrowserView", Id, browserView.Id); } private JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/Clipboard.cs b/ElectronNET.API/Clipboard.cs index e7535378..a534fa8f 100644 --- a/ElectronNET.API/Clipboard.cs +++ b/ElectronNET.API/Clipboard.cs @@ -1,4 +1,5 @@ using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -40,20 +41,9 @@ internal static Clipboard Instance /// /// /// The content in the clipboard as plain text. - public Task ReadTextAsync(string type = "") + public async Task ReadTextAsync(string type = "") { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-readText-Completed", (text) => - { - BridgeConnector.Socket.Off("clipboard-readText-Completed"); - - taskCompletionSource.SetResult(text.ToString()); - }); - - BridgeConnector.Socket.Emit("clipboard-readText", type); - - return taskCompletionSource.Task; + return (await SignalrSerializeHelper.GetSignalrResultStringParameter("clipboard-readText", type)); } /// @@ -61,9 +51,9 @@ public Task ReadTextAsync(string type = "") /// /// /// - public void WriteText(string text, string type = "") + public async void WriteText(string text, string type = "") { - BridgeConnector.Socket.Emit("clipboard-writeText", text, type); + await Electron.SignalrElectron.Clients.All.SendAsync("clipboard-writeText", text, type); } /// @@ -71,20 +61,9 @@ public void WriteText(string text, string type = "") /// /// /// - public Task ReadHTMLAsync(string type = "") + public async Task ReadHTMLAsync(string type = "") { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-readHTML-Completed", (text) => - { - BridgeConnector.Socket.Off("clipboard-readHTML-Completed"); - - taskCompletionSource.SetResult(text.ToString()); - }); - - BridgeConnector.Socket.Emit("clipboard-readHTML", type); - - return taskCompletionSource.Task; + return (await SignalrSerializeHelper.GetSignalrResultStringParameter("clipboard-readHTML", type)); } /// @@ -92,9 +71,9 @@ public Task ReadHTMLAsync(string type = "") /// /// /// - public void WriteHTML(string markup, string type = "") + public async void WriteHTML(string markup, string type = "") { - BridgeConnector.Socket.Emit("clipboard-writeHTML", markup, type); + await Electron.SignalrElectron.Clients.All.SendAsync("clipboard-writeHTML", markup, type); } /// @@ -102,20 +81,9 @@ public void WriteHTML(string markup, string type = "") /// /// /// - public Task ReadRTFAsync(string type = "") + public async Task ReadRTFAsync(string type = "") { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-readRTF-Completed", (text) => - { - BridgeConnector.Socket.Off("clipboard-readRTF-Completed"); - - taskCompletionSource.SetResult(text.ToString()); - }); - - BridgeConnector.Socket.Emit("clipboard-readRTF", type); - - return taskCompletionSource.Task; + return (await SignalrSerializeHelper.GetSignalrResultStringParameter("clipboard-readRTF", type)); } /// @@ -123,9 +91,9 @@ public Task ReadRTFAsync(string type = "") /// /// /// - public void WriteRTF(string text, string type = "") + public async void WriteRTF(string text, string type = "") { - BridgeConnector.Socket.Emit("clipboard-writeHTML", text, type); + await Electron.SignalrElectron.Clients.All.SendAsync("clipboard-writeHTML", text, type); } /// @@ -134,20 +102,10 @@ public void WriteRTF(string text, string type = "") /// be empty strings when the bookmark is unavailable. /// /// - public Task ReadBookmarkAsync() + public async Task ReadBookmarkAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-readBookmark-Completed", (bookmark) => - { - BridgeConnector.Socket.Off("clipboard-readBookmark-Completed"); - - taskCompletionSource.SetResult(((JObject)bookmark).ToObject()); - }); - - BridgeConnector.Socket.Emit("clipboard-readBookmark"); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("clipboard-readBookmark"); + return ((JObject)signalrResult).ToObject(); } /// @@ -160,9 +118,9 @@ public Task ReadBookmarkAsync() /// /// /// - public void WriteBookmark(string title, string url, string type = "") + public async void WriteBookmark(string title, string url, string type = "") { - BridgeConnector.Socket.Emit("clipboard-writeBookmark", title, url, type); + await Electron.SignalrElectron.Clients.All.SendAsync("clipboard-writeBookmark", title, url, type); } /// @@ -171,20 +129,9 @@ public void WriteBookmark(string title, string url, string type = "") /// find pasteboard whenever the application is activated. /// /// - public Task ReadFindTextAsync() + public async Task ReadFindTextAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-readFindText-Completed", (text) => - { - BridgeConnector.Socket.Off("clipboard-readFindText-Completed"); - - taskCompletionSource.SetResult(text.ToString()); - }); - - BridgeConnector.Socket.Emit("clipboard-readFindText"); - - return taskCompletionSource.Task; + return (await SignalrSerializeHelper.GetSignalrResultString("clipboard-readFindText")); } /// @@ -192,18 +139,18 @@ public Task ReadFindTextAsync() /// synchronous IPC when called from the renderer process. /// /// - public void WriteFindText(string text) + public async void WriteFindText(string text) { - BridgeConnector.Socket.Emit("clipboard-writeFindText", text); + await Electron.SignalrElectron.Clients.All.SendAsync("clipboard-writeFindText", text); } /// /// Clears the clipboard content. /// /// - public void Clear(string type = "") + public async void Clear(string type = "") { - BridgeConnector.Socket.Emit("clipboard-clear", type); + await Electron.SignalrElectron.Clients.All.SendAsync("clipboard-clear", type); } /// @@ -211,20 +158,10 @@ public void Clear(string type = "") /// /// /// - public Task AvailableFormatsAsync(string type = "") + public async Task AvailableFormatsAsync(string type = "") { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-availableFormats-Completed", (formats) => - { - BridgeConnector.Socket.Off("clipboard-availableFormats-Completed"); - - taskCompletionSource.SetResult(((JArray)formats).ToObject()); - }); - - BridgeConnector.Socket.Emit("clipboard-availableFormats", type); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJArray("clipboard-availableFormats"); + return ((JArray)signalrResult).ToObject(); } /// @@ -232,9 +169,9 @@ public Task AvailableFormatsAsync(string type = "") /// /// /// - public void Write(Data data, string type = "") + public async void Write(Data data, string type = "") { - BridgeConnector.Socket.Emit("clipboard-write", JObject.FromObject(data, _jsonSerializer), type); + await Electron.SignalrElectron.Clients.All.SendAsync("clipboard-write", JObject.FromObject(data, _jsonSerializer), type); } /// @@ -242,23 +179,10 @@ public void Write(Data data, string type = "") /// /// /// - public Task ReadImageAsync(string type = "") + public async Task ReadImageAsync(string type = "") { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-readImage-Completed", (image) => - { - BridgeConnector.Socket.Off("clipboard-readImage-Completed"); - - var nativeImage = ((JObject)image).ToObject(); - - taskCompletionSource.SetResult(nativeImage); - - }); - - BridgeConnector.Socket.Emit("clipboard-readImage", type); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("clipboard-readImage", type); + return ((JObject)signalrResult).ToObject(); } /// @@ -266,9 +190,9 @@ public Task ReadImageAsync(string type = "") /// /// /// - public void WriteImage(NativeImage image, string type = "") + public async Task WriteImage(NativeImage image, string type = "") { - BridgeConnector.Socket.Emit("clipboard-writeImage", JsonConvert.SerializeObject(image), type); + await Electron.SignalrElectron.Clients.All.SendAsync("clipboard-writeImage", JsonConvert.SerializeObject(image), type); } private JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/CommandLine.cs b/ElectronNET.API/CommandLine.cs index 63466b4b..ddd60fad 100644 --- a/ElectronNET.API/CommandLine.cs +++ b/ElectronNET.API/CommandLine.cs @@ -1,4 +1,5 @@ -using System.Threading; +using Microsoft.AspNetCore.SignalR; +using System.Threading; using System.Threading.Tasks; namespace ElectronNET.API @@ -41,9 +42,9 @@ internal static CommandLine Instance /// /// Note: This will not affect process.argv. The intended usage of this function is to control Chromium's behavior. /// - public void AppendSwitch(string the_switch, string value = "") + public async void AppendSwitch(string the_switch, string value = "") { - BridgeConnector.Socket.Emit("appCommandLineAppendSwitch", the_switch, value); + await Electron.SignalrElectron.Clients.All.SendAsync("appCommandLineAppendSwitch", the_switch, value); } /// @@ -55,9 +56,9 @@ public void AppendSwitch(string the_switch, string value = "") /// /// Note: This will not affect process.argv. The intended usage of this function is to control Chromium's behavior. /// - public void AppendArgument(string value) + public async void AppendArgument(string value) { - BridgeConnector.Socket.Emit("appCommandLineAppendArgument", value); + await Electron.SignalrElectron.Clients.All.SendAsync("appCommandLineAppendArgument", value); } /// @@ -68,21 +69,7 @@ public void AppendArgument(string value) /// Whether the command-line switch is present. public async Task HasSwitchAsync(string switchName, CancellationToken cancellationToken = default(CancellationToken)) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appCommandLineHasSwitchCompleted", (result) => - { - BridgeConnector.Socket.Off("appCommandLineHasSwitchCompleted"); - taskCompletionSource.SetResult((bool)result); - }); - - BridgeConnector.Socket.Emit("appCommandLineHasSwitch", switchName); - - return await taskCompletionSource.Task.ConfigureAwait(false); - } + return (await SignalrSerializeHelper.GetSignalrResultBool("appCommandLineHasSwitch", switchName)); } /// @@ -96,21 +83,7 @@ public void AppendArgument(string value) /// public async Task GetSwitchValueAsync(string switchName, CancellationToken cancellationToken = default(CancellationToken)) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("appCommandLineGetSwitchValueCompleted", (result) => - { - BridgeConnector.Socket.Off("appCommandLineGetSwitchValueCompleted"); - taskCompletionSource.SetResult((string)result); - }); - - BridgeConnector.Socket.Emit("appCommandLineGetSwitchValue", switchName); - - return await taskCompletionSource.Task.ConfigureAwait(false); - } + return (await SignalrSerializeHelper.GetSignalrResultString("appCommandLineGetSwitchValue", switchName)); } } } diff --git a/ElectronNET.API/Cookies.cs b/ElectronNET.API/Cookies.cs index 98be3d42..9d29f7b2 100644 --- a/ElectronNET.API/Cookies.cs +++ b/ElectronNET.API/Cookies.cs @@ -1,6 +1,7 @@ using System; using System.Threading.Tasks; using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -34,27 +35,24 @@ public event Action OnChanged { if (_changed == null) { - BridgeConnector.Socket.On("webContents-session-cookies-changed" + Id, (args) => - { - Cookie cookie = ((JArray)args)[0].ToObject(); - CookieChangedCause cause = ((JArray)args)[1].ToObject(); - bool removed = ((JArray)args)[2].ToObject(); - _changed(cookie, cause, removed); - }); - - BridgeConnector.Socket.Emit("register-webContents-session-cookies-changed", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-webContents-session-cookies-changed", Id); } _changed += value; } remove { _changed -= value; - - if (_changed == null) - BridgeConnector.Socket.Off("webContents-session-cookies-changed" + Id); } } + public void TriggerOnChanged(JArray jarray) + { + Cookie cookie = ((JArray)jarray)[0].ToObject(); + CookieChangedCause cause = ((JArray)jarray)[1].ToObject(); + bool removed = ((JArray)jarray)[2].ToObject(); + _changed(cookie, cause, removed); + } + private event Action _changed; /// @@ -63,22 +61,11 @@ public event Action OnChanged /// /// /// A task which resolves an array of cookie objects. - public Task GetAsync(CookieFilter filter) + public async Task GetAsync(CookieFilter filter) { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-cookies-get-completed" + guid, (cookies) => - { - Cookie[] result = ((JArray)cookies).ToObject(); - - BridgeConnector.Socket.Off("webContents-session-cookies-get-completed" + guid); - taskCompletionSource.SetResult(result); - }); - - BridgeConnector.Socket.Emit("webContents-session-cookies-get", Id, JObject.FromObject(filter, _jsonSerializer), guid); - - return taskCompletionSource.Task; + var resultSignalr = await SignalrSerializeHelper.GetSignalrResultJArray("webContents-session-cookies-get", Id, JObject.FromObject(filter, _jsonSerializer)); + Cookie[] result = ((JArray)resultSignalr).ToObject(); + return result; } /// @@ -86,20 +73,9 @@ public Task GetAsync(CookieFilter filter) /// /// /// - public Task SetAsync(CookieDetails details) + public async Task SetAsync(CookieDetails details) { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-cookies-set-completed" + guid, () => - { - BridgeConnector.Socket.Off("webContents-session-cookies-set-completed" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("webContents-session-cookies-set", Id, JObject.FromObject(details, _jsonSerializer), guid); - - return taskCompletionSource.Task; + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-cookies-set", Id, JObject.FromObject(details, _jsonSerializer)); } /// @@ -108,40 +84,18 @@ public Task SetAsync(CookieDetails details) /// The URL associated with the cookie. /// The name of cookie to remove. /// A task which resolves when the cookie has been removed - public Task RemoveAsync(string url, string name) + public async Task RemoveAsync(string url, string name) { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-cookies-remove-completed" + guid, () => - { - BridgeConnector.Socket.Off("webContents-session-cookies-remove-completed" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("webContents-session-cookies-remove", Id, url, name, guid); - - return taskCompletionSource.Task; + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-cookies-remove", Id, url, name); } /// /// Writes any unwritten cookies data to disk. /// /// A task which resolves when the cookie store has been flushed - public Task FlushStoreAsync() + public async Task FlushStoreAsync() { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-cookies-flushStore-completed" + guid, () => - { - BridgeConnector.Socket.Off("webContents-session-cookies-flushStore-completed" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("webContents-session-cookies-flushStore", Id, guid); - - return taskCompletionSource.Task; + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-cookies-flushStore", Id); } private JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/Dialog.cs b/ElectronNET.API/Dialog.cs index 7b626b4e..6b788ee7 100644 --- a/ElectronNET.API/Dialog.cs +++ b/ElectronNET.API/Dialog.cs @@ -1,4 +1,5 @@ using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -46,30 +47,16 @@ internal static Dialog Instance /// The browserWindow argument allows the dialog to attach itself to a parent window, making it modal. /// /// An array of file paths chosen by the user - public Task ShowOpenDialogAsync(BrowserWindow browserWindow, OpenDialogOptions options) + public async Task ShowOpenDialogAsync(BrowserWindow browserWindow, OpenDialogOptions options) { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("showOpenDialogComplete" + guid, (filePaths) => + var resultSignalr = await SignalrSerializeHelper.GetSignalrResultJArray("showOpenDialog", JObject.FromObject(browserWindow, _jsonSerializer), JObject.FromObject(options, _jsonSerializer)); + var result = ((JArray)resultSignalr).ToObject(); + var list = new List(); + foreach (var item in result) { - BridgeConnector.Socket.Off("showOpenDialogComplete" + guid); - - var result = ((JArray)filePaths).ToObject(); - var list = new List(); - foreach (var item in result) - { - list.Add(HttpUtility.UrlDecode(item)); - } - taskCompletionSource.SetResult(list.ToArray()); - }); - - - BridgeConnector.Socket.Emit("showOpenDialog", - JObject.FromObject(browserWindow, _jsonSerializer), - JObject.FromObject(options, _jsonSerializer), guid); - - return taskCompletionSource.Task; + list.Add(HttpUtility.UrlDecode(item)); + } + return list.ToArray(); } /// @@ -78,24 +65,9 @@ public Task ShowOpenDialogAsync(BrowserWindow browserWindow, OpenDialo /// The browserWindow argument allows the dialog to attach itself to a parent window, making it modal. /// /// Returns String, the path of the file chosen by the user, if a callback is provided it returns an empty string. - public Task ShowSaveDialogAsync(BrowserWindow browserWindow, SaveDialogOptions options) + public async Task ShowSaveDialogAsync(BrowserWindow browserWindow, SaveDialogOptions options) { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("showSaveDialogComplete" + guid, (filename) => - { - BridgeConnector.Socket.Off("showSaveDialogComplete" + guid); - - taskCompletionSource.SetResult(filename.ToString()); - }); - - BridgeConnector.Socket.Emit("showSaveDialog", - JObject.FromObject(browserWindow, _jsonSerializer), - JObject.FromObject(options, _jsonSerializer), - guid); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultString("showSaveDialog", JObject.FromObject(browserWindow, _jsonSerializer), JObject.FromObject(options, _jsonSerializer)); } /// @@ -147,37 +119,26 @@ public async Task ShowMessageBoxAsync(BrowserWindow browserWin /// The browserWindow argument allows the dialog to attach itself to a parent window, making it modal. /// /// The API call will be asynchronous and the result will be passed via MessageBoxResult. - public Task ShowMessageBoxAsync(BrowserWindow browserWindow, MessageBoxOptions messageBoxOptions) + public async Task ShowMessageBoxAsync(BrowserWindow browserWindow, MessageBoxOptions messageBoxOptions) { - var taskCompletionSource = new TaskCompletionSource(); - var guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("showMessageBoxComplete" + guid, (args) => - { - BridgeConnector.Socket.Off("showMessageBoxComplete" + guid); - - var result = ((JArray)args); - - taskCompletionSource.SetResult(new MessageBoxResult - { - Response = (int)result.First, - CheckboxChecked = (bool)result.Last - }); - - }); - if (browserWindow == null) { - BridgeConnector.Socket.Emit("showMessageBox", JObject.FromObject(messageBoxOptions, _jsonSerializer), guid); - } else + var resultSignalr = await SignalrSerializeHelper.GetSignalrResultJArray("showMessageBox", JObject.FromObject(messageBoxOptions, _jsonSerializer)); + return new MessageBoxResult + { + Response = (int)resultSignalr.First, + CheckboxChecked = (bool)resultSignalr.Last + }; + } + else { - BridgeConnector.Socket.Emit("showMessageBox", - JObject.FromObject(browserWindow, _jsonSerializer), - JObject.FromObject(messageBoxOptions, _jsonSerializer), - guid); + var resultSignalr = await SignalrSerializeHelper.GetSignalrResultJArray("showMessageBox", JObject.FromObject(browserWindow, _jsonSerializer), JObject.FromObject(messageBoxOptions, _jsonSerializer)); + return new MessageBoxResult + { + Response = (int)resultSignalr.First, + CheckboxChecked = (bool)resultSignalr.Last + }; } - - return taskCompletionSource.Task; } /// @@ -190,9 +151,9 @@ public Task ShowMessageBoxAsync(BrowserWindow browserWindow, M /// /// The title to display in the error box. /// The text content to display in the error box. - public void ShowErrorBox(string title, string content) + public async void ShowErrorBox(string title, string content) { - BridgeConnector.Socket.Emit("showErrorBox", title, content); + await Electron.SignalrElectron.Clients.All.SendAsync("showErrorBox", title, content); } /// @@ -215,23 +176,9 @@ public Task ShowCertificateTrustDialogAsync(CertificateTrustDialogOptions option /// /// /// - public Task ShowCertificateTrustDialogAsync(BrowserWindow browserWindow, CertificateTrustDialogOptions options) + public async Task ShowCertificateTrustDialogAsync(BrowserWindow browserWindow, CertificateTrustDialogOptions options) { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("showCertificateTrustDialogComplete" + guid, () => - { - BridgeConnector.Socket.Off("showCertificateTrustDialogComplete" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("showCertificateTrustDialog", - JObject.FromObject(browserWindow, _jsonSerializer), - JObject.FromObject(options, _jsonSerializer), - guid); - - return taskCompletionSource.Task; + await Electron.SignalrElectron.Clients.All.SendAsync("showCertificateTrustDialog", JObject.FromObject(browserWindow, _jsonSerializer), JObject.FromObject(options, _jsonSerializer)); } private JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/Dock.cs b/ElectronNET.API/Dock.cs index 03276842..8f263df7 100644 --- a/ElectronNET.API/Dock.cs +++ b/ElectronNET.API/Dock.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using ElectronNET.API.Entities; using ElectronNET.API.Extensions; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -52,49 +53,35 @@ internal static Dock Instance /// Return an ID representing the request. public async Task BounceAsync(DockBounceType type, CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("dock-bounce-completed", (id) => - { - BridgeConnector.Socket.Off("dock-bounce-completed"); - taskCompletionSource.SetResult((int) id); - }); - - BridgeConnector.Socket.Emit("dock-bounce", type.GetDescription()); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + var result = await SignalrSerializeHelper.GetSignalrResultString("dock-bounce", type.GetDescription()); + return int.Parse(result); } /// /// Cancel the bounce of id. /// /// Id of the request. - public void CancelBounce(int id) + public async void CancelBounce(int id) { - BridgeConnector.Socket.Emit("dock-cancelBounce", id); + await Electron.SignalrElectron.Clients.All.SendAsync("dock-cancelBounce", id); } /// /// Bounces the Downloads stack if the filePath is inside the Downloads folder. /// /// - public void DownloadFinished(string filePath) + public async void DownloadFinished(string filePath) { - BridgeConnector.Socket.Emit("dock-downloadFinished", filePath); + await Electron.SignalrElectron.Clients.All.SendAsync("dock-downloadFinished", filePath); } /// /// Sets the string to be displayed in the dock’s badging area. /// /// - public void SetBadge(string text) + public async void SetBadge(string text) { - BridgeConnector.Socket.Emit("dock-setBadge", text); + await Electron.SignalrElectron.Clients.All.SendAsync("dock-setBadge", text); } /// @@ -104,38 +91,23 @@ public void SetBadge(string text) /// The badge string of the dock. public async Task GetBadgeAsync(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("dock-getBadge-completed", (text) => - { - BridgeConnector.Socket.Off("dock-getBadge-completed"); - taskCompletionSource.SetResult((string) text); - }); - - BridgeConnector.Socket.Emit("dock-getBadge"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return await SignalrSerializeHelper.GetSignalrResultString("dock-getBadge"); } /// /// Hides the dock icon. /// - public void Hide() + public async void Hide() { - BridgeConnector.Socket.Emit("dock-hide"); + await Electron.SignalrElectron.Clients.All.SendAsync("dock-hide"); } /// /// Shows the dock icon. /// - public void Show() + public async void Show() { - BridgeConnector.Socket.Emit("dock-show"); + await Electron.SignalrElectron.Clients.All.SendAsync("dock-show"); } /// @@ -146,22 +118,7 @@ public void Show() /// Whether the dock icon is visible. public async Task IsVisibleAsync(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("dock-isVisible-completed", (isVisible) => - { - BridgeConnector.Socket.Off("dock-isVisible-completed"); - taskCompletionSource.SetResult((bool) isVisible); - }); - - BridgeConnector.Socket.Emit("dock-isVisible"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + return await SignalrSerializeHelper.GetSignalrResultBool("dock-isVisible"); } /// @@ -176,18 +133,11 @@ public async Task IsVisibleAsync(CancellationToken cancellationToken = def /// /// Sets the application's dock menu. /// - public void SetMenu(MenuItem[] menuItems) + public async void SetMenu(MenuItem[] menuItems) { menuItems.AddMenuItemsId(); - BridgeConnector.Socket.Emit("dock-setMenu", JArray.FromObject(menuItems, _jsonSerializer)); - _items.AddRange(menuItems); - - BridgeConnector.Socket.Off("dockMenuItemClicked"); - BridgeConnector.Socket.On("dockMenuItemClicked", (id) => { - MenuItem menuItem = _items.GetMenuItem(id.ToString()); - menuItem?.Click(); - }); - + await Electron.SignalrElectron.Clients.All.SendAsync("dock-setMenu", JArray.FromObject(menuItems, _jsonSerializer)); + _items.AddRange(menuItems); } /// @@ -196,31 +146,17 @@ public void SetMenu(MenuItem[] menuItems) /// public async Task GetMenu(CancellationToken cancellationToken = default) { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) - { - BridgeConnector.Socket.On("dock-getMenu-completed", (menu) => - { - BridgeConnector.Socket.Off("dock-getMenu-completed"); - taskCompletionSource.SetResult(((JObject)menu).ToObject()); - }); - - BridgeConnector.Socket.Emit("dock-getMenu"); - - return await taskCompletionSource.Task - .ConfigureAwait(false); - } + var result = await SignalrSerializeHelper.GetSignalrResultJObject("dock-getMenu"); + return result.ToObject(); } /// /// Sets the image associated with this dock icon. /// /// - public void SetIcon(string image) + public async void SetIcon(string image) { - BridgeConnector.Socket.Emit("dock-setIcon", image); + await Electron.SignalrElectron.Clients.All.SendAsync("dock-setIcon", image); } private JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/Electron.cs b/ElectronNET.API/Electron.cs index 23f9902d..1663f996 100644 --- a/ElectronNET.API/Electron.cs +++ b/ElectronNET.API/Electron.cs @@ -1,4 +1,8 @@ -namespace ElectronNET.API +using ElectronNET.API.Hubs; +using Microsoft.AspNetCore.SignalR; +using Microsoft.Extensions.DependencyInjection; + +namespace ElectronNET.API { /// /// The Electron.NET API @@ -72,7 +76,11 @@ public static class Electron /// ElectronHostHook directory: /// electronize add HostHook /// - public static HostHook HostHook { get { return HostHook.Instance; } } + public static HostHook HostHook { get { return API.HostHook.Instance; } } + + public static IServiceScope ServiceScope { get; set; } + public static IHubContext SignalrElectron; + public static bool ElectronConnected = false; /// /// Allows you to execute native Lock and Unlock process. diff --git a/ElectronNET.API/Entities/CPUUsage.cs b/ElectronNET.API/Entities/CPUUsage.cs index 7225cae0..202aed29 100644 --- a/ElectronNET.API/Entities/CPUUsage.cs +++ b/ElectronNET.API/Entities/CPUUsage.cs @@ -1,4 +1,6 @@ -namespace ElectronNET.API.Entities +using Newtonsoft.Json; + +namespace ElectronNET.API.Entities { /// /// @@ -8,12 +10,14 @@ public class CPUUsage /// /// Percentage of CPU used since the last call to getCPUUsage. First call returns 0. /// + [JsonProperty("percentCPUUsage")] public int PercentCPUUsage { get; set; } /// /// The number of average idle cpu wakeups per second since the last call to /// getCPUUsage.First call returns 0. /// + [JsonProperty("idleWakeupsPerSecond")] public int IdleWakeupsPerSecond { get; set; } } } diff --git a/ElectronNET.API/Entities/LoginItemSettings.cs b/ElectronNET.API/Entities/LoginItemSettings.cs index a744a624..7057c98b 100644 --- a/ElectronNET.API/Entities/LoginItemSettings.cs +++ b/ElectronNET.API/Entities/LoginItemSettings.cs @@ -1,4 +1,6 @@ -namespace ElectronNET.API.Entities +using Newtonsoft.Json; + +namespace ElectronNET.API.Entities { /// /// @@ -8,18 +10,21 @@ public class LoginItemSettings /// /// if the app is set to open at login. /// + [JsonProperty("openAtLogin")] public bool OpenAtLogin { get; set; } /// /// if the app is set to open as hidden at login. This setting is not available /// on MAS builds. /// + [JsonProperty("openAsHidden")] public bool OpenAsHidden { get; set; } /// /// if the app was opened at login automatically. This setting is not available /// on MAS builds. /// + [JsonProperty("wasOpenedAtLogin")] public bool WasOpenedAtLogin { get; set; } /// @@ -27,6 +32,7 @@ public class LoginItemSettings /// open any windows at startup. This setting is not available on /// MAS builds. /// + [JsonProperty("wasOpenedAsHidden")] public bool WasOpenedAsHidden { get; set; } /// @@ -34,6 +40,7 @@ public class LoginItemSettings /// session. This indicates that the app should restore the windows that were open the last time the app was closed. /// This setting is not available on MAS builds. /// + [JsonProperty("restoreState")] public bool RestoreState { get; set; } } } \ No newline at end of file diff --git a/ElectronNET.API/Entities/MemoryInfo.cs b/ElectronNET.API/Entities/MemoryInfo.cs index 840cb5d7..1967b99a 100644 --- a/ElectronNET.API/Entities/MemoryInfo.cs +++ b/ElectronNET.API/Entities/MemoryInfo.cs @@ -1,4 +1,6 @@ -namespace ElectronNET.API.Entities +using Newtonsoft.Json; + +namespace ElectronNET.API.Entities { /// /// @@ -8,17 +10,20 @@ public class MemoryInfo /// /// The amount of memory currently pinned to actual physical RAM. /// + [JsonProperty("workingSetSize")] public int WorkingSetSize { get; set; } /// /// The maximum amount of memory that has ever been pinned to actual physical RAM. /// + [JsonProperty("peakWorkingSetSize")] public int PeakWorkingSetSize { get; set; } /// /// The amount of memory not shared by other processes, such as JS heap or HTML /// content. /// + [JsonProperty("privateBytes")] public int PrivateBytes { get; set; } } } \ No newline at end of file diff --git a/ElectronNET.API/Entities/ProcessMetric.cs b/ElectronNET.API/Entities/ProcessMetric.cs index ce9a8a18..d4d38cec 100644 --- a/ElectronNET.API/Entities/ProcessMetric.cs +++ b/ElectronNET.API/Entities/ProcessMetric.cs @@ -1,4 +1,6 @@ -namespace ElectronNET.API.Entities +using Newtonsoft.Json; + +namespace ElectronNET.API.Entities { /// /// @@ -8,16 +10,19 @@ public class ProcessMetric /// /// Process id of the process. /// + [JsonProperty("pid")] public int PId { get; set; } /// /// Process type (Browser or Tab or GPU etc). /// + [JsonProperty("type")] public string Type { get; set; } /// /// CPU usage of the process. /// + [JsonProperty("cpu")] public CPUUsage Cpu { get; set; } /// @@ -25,22 +30,26 @@ public class ProcessMetric /// Since the can be reused after a process dies, it is useful to use both the /// and the to uniquely identify a process. /// - public int CreationTime { get; set; } + [JsonProperty("creationTime")] + public double CreationTime { get; set; } /// /// Memory information for the process. /// + [JsonProperty("memory")] public MemoryInfo Memory { get; set; } /// /// Whether the process is sandboxed on OS level. /// + [JsonProperty("sandboxed")] public bool Sandboxed { get; set; } /// /// One of the following values: /// untrusted | low | medium | high | unknown /// + [JsonProperty("integrityLevel")] public string IntegrityLevel { get; set; } } } \ No newline at end of file diff --git a/ElectronNET.API/Events.cs b/ElectronNET.API/Events.cs index bbbee340..803e0dd4 100644 --- a/ElectronNET.API/Events.cs +++ b/ElectronNET.API/Events.cs @@ -1,5 +1,6 @@ using System; using System.Globalization; +using Microsoft.AspNetCore.SignalR; using Quobject.EngineIoClientDotNet.ComponentEmitter; namespace ElectronNET.API @@ -60,13 +61,11 @@ public void On(string moduleName, string eventName, Action fn) /// The name of the module, e.g. app, dock, etc... /// The name of the event /// The event handler - private void On(string moduleName, string eventName, IListener fn) + private async void On(string moduleName, string eventName, IListener fn) { var listener = $"{moduleName}{_ti.ToTitleCase(eventName)}Completed"; var subscriber = $"register-{moduleName}-on-event"; - - BridgeConnector.Socket.On(listener, fn); - BridgeConnector.Socket.Emit(subscriber, eventName, listener); + await Electron.SignalrElectron.Clients.All.SendAsync(subscriber, eventName, listener); } /// @@ -93,12 +92,11 @@ public void Once(string moduleName, string eventName, Action fn) /// The name of the module, e.g. app, dock, etc... /// The name of the event /// The event handler - private void Once(string moduleName, string eventName, IListener fn) + private async void Once(string moduleName, string eventName, IListener fn) { var listener = $"{moduleName}{_ti.ToTitleCase(eventName)}Completed"; var subscriber = $"register-{moduleName}-once-event"; - BridgeConnector.Socket.Once(listener, fn); - BridgeConnector.Socket.Emit(subscriber, eventName, listener); + await Electron.SignalrElectron.Clients.All.SendAsync(subscriber, eventName, listener); } } diff --git a/ElectronNET.API/Extensions/SignalrSerializeHelper.cs b/ElectronNET.API/Extensions/SignalrSerializeHelper.cs new file mode 100644 index 00000000..a7649e48 --- /dev/null +++ b/ElectronNET.API/Extensions/SignalrSerializeHelper.cs @@ -0,0 +1,915 @@ +using ElectronNET.API.Hubs; +using Microsoft.AspNetCore.SignalR; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API +{ + public static class SignalrSerializeHelper + { + public static async Task GetSignalrResultString(string signalrCommand) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString()); + + string result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (string)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultString(string signalrCommand, int parameter1, string parameter2) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); + + string result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (string)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultString(string signalrCommand, string parameter1, JObject parameter2) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); + + string result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (string)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultString(string signalrCommand, int parameter1, string parameter2, JObject parameter3) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2, parameter3); + + string result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (string)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultString(string signalrCommand, JObject parameter1, JObject parameter2) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); + + string result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (string)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultString(string signalrCommand, string parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + string result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (string)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultString(string signalrCommand, int parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + string result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (string)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultString(string signalrCommand, JObject parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + string result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (string)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + + public static async Task GetSignalrResultString(string signalrCommand, JObject parameter1, string parameter2) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); + + string result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (string)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + + public static async Task GetSignalrResultStringParameter(string signalrCommand, string parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + string result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (string)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultBool(string signalrCommand, string parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + bool result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (bool)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultBool(string signalrCommand, int parameter1, JObject parameter2) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); + + bool result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (bool)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultBool(string signalrCommand, int parameter1, JObject parameter2, string parameter3) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2, parameter3); + + bool result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (bool)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultBool(string signalrCommand, string parameter1, string parameter2, JObject parameter3) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2, parameter3); + + bool result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (bool)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultBool(string signalrCommand, int parameter1, string parameter2) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); + + bool result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (bool)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultBool(string signalrCommand, int parameter1, JArray parameter2) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); + + bool result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (bool)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + + public static async Task GetSignalrResultBool(string signalrCommand, string first, string parameter1, string[] parameter2) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), first, parameter1, parameter2); + + bool result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (bool)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultBool(string signalrCommand) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString()); + + bool result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (bool)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultBool(string signalrCommand, int parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + bool result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (bool)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultBool(string signalrCommand, JArray parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + bool result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (bool)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultBoolParamater(string signalrCommand, string parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + bool result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (bool)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultJObject(string signalrCommand, string parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + JObject result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (JObject)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultJObject(string signalrCommand, int parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + JObject result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (JObject)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultJObject(string signalrCommand, int parameter1, string parameter2, bool parameter3) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2, parameter3); + + JObject result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (JObject)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + + public static async Task GetSignalrResultJObject(string signalrCommand) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString()); + + JObject result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (JObject)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultJObject(string signalrCommand, JObject parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + JObject result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (JObject)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultJArray(string signalrCommand) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString()); + + JArray result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (JArray)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultJArray(string signalrCommand, JObject parameter1, JObject parameter2) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); + + JArray result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (JArray)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultJArray(string signalrCommand, int parameter1, JObject parameter2) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); + + JArray result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (JArray)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultJArray(string signalrCommand, int parameter1, string parameter2) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); + + JArray result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (JArray)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultJArray(string signalrCommand, int parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + JArray result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (JArray)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultJArray(string signalrCommand, JObject parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + JArray result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = (JArray)await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + } +} diff --git a/ElectronNET.API/GlobalShortcut.cs b/ElectronNET.API/GlobalShortcut.cs index d2867ecd..19b908b0 100644 --- a/ElectronNET.API/GlobalShortcut.cs +++ b/ElectronNET.API/GlobalShortcut.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.AspNetCore.SignalR; +using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -33,7 +34,7 @@ internal static GlobalShortcut Instance } } - private Dictionary _shortcuts = new Dictionary(); + public Dictionary _shortcuts = new Dictionary(); /// /// Registers a global shortcut of accelerator. @@ -49,16 +50,7 @@ public void Register(string accelerator, Action function) { _shortcuts.Add(accelerator, function); - BridgeConnector.Socket.Off("globalShortcut-pressed"); - BridgeConnector.Socket.On("globalShortcut-pressed", (shortcut) => - { - if (_shortcuts.ContainsKey(shortcut.ToString())) - { - _shortcuts[shortcut.ToString()](); - } - }); - - BridgeConnector.Socket.Emit("globalShortcut-register", accelerator); + Electron.SignalrElectron.Clients.All.SendAsync("globalShortcut-register", accelerator); } } @@ -68,38 +60,27 @@ public void Register(string accelerator, Action function) /// since they don’t want applications to fight for global shortcuts. /// /// Whether this application has registered accelerator. - public Task IsRegisteredAsync(string accelerator) + public async Task IsRegisteredAsync(string accelerator) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("globalShortcut-isRegisteredCompleted", (isRegistered) => - { - BridgeConnector.Socket.Off("globalShortcut-isRegisteredCompleted"); - - taskCompletionSource.SetResult((bool)isRegistered); - }); - - BridgeConnector.Socket.Emit("globalShortcut-isRegistered", accelerator); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("globalShortcut-isRegistered", accelerator); } /// /// Unregisters the global shortcut of accelerator. /// - public void Unregister(string accelerator) + public async void Unregister(string accelerator) { _shortcuts.Remove(accelerator); - BridgeConnector.Socket.Emit("globalShortcut-unregister", accelerator); + await Electron.SignalrElectron.Clients.All.SendAsync("globalShortcut-unregister", accelerator); } /// /// Unregisters all of the global shortcuts. /// - public void UnregisterAll() + public async void UnregisterAll() { _shortcuts.Clear(); - BridgeConnector.Socket.Emit("globalShortcut-unregisterAll"); + await Electron.SignalrElectron.Clients.All.SendAsync("globalShortcut-unregisterAll"); } } } \ No newline at end of file diff --git a/ElectronNET.API/HostHook.cs b/ElectronNET.API/HostHook.cs index 37606250..57eb09c3 100644 --- a/ElectronNET.API/HostHook.cs +++ b/ElectronNET.API/HostHook.cs @@ -6,6 +6,7 @@ namespace ElectronNET.API { + /// /// Allows you to execute native JavaScript/TypeScript code from the host process. /// @@ -40,6 +41,9 @@ internal static HostHook Instance } } + // ToDo: Need reimplementation + + /* /// /// Execute native JavaScript/TypeScript code. /// @@ -124,5 +128,6 @@ public Task CallAsync(string socketEventName, params dynamic[] arguments) NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore }; + */ } } diff --git a/ElectronNET.API/Hubs/HubElectron.cs b/ElectronNET.API/Hubs/HubElectron.cs new file mode 100644 index 00000000..cca79bdb --- /dev/null +++ b/ElectronNET.API/Hubs/HubElectron.cs @@ -0,0 +1,648 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Threading.Tasks; +using ElectronNET.API.Entities; +using ElectronNET.API.Models; +using Microsoft.AspNetCore.SignalR; +using Microsoft.Extensions.DependencyInjection; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace ElectronNET.API.Hubs +{ + + public class HubElectron : Hub + { + + public async Task SendMessage(string user) + { + await Clients.All.SendAsync("ReceiveMessage", user); + } + + public static readonly ConcurrentDictionary> ClientResponsesString = new ConcurrentDictionary>(); + public static readonly ConcurrentDictionary> ClientResponsesInt = new ConcurrentDictionary>(); + public static readonly ConcurrentDictionary> ClientResponsesBool = new ConcurrentDictionary>(); + public static readonly ConcurrentDictionary> ClientResponsesJObject = new ConcurrentDictionary>(); + public static readonly ConcurrentDictionary> ClientResponsesJArray = new ConcurrentDictionary>(); + + public void SendClientResponseString(string guidString, string response) + { + TaskCompletionSource tcs; + Guid guid = new Guid(guidString); + + if (ClientResponsesString.TryGetValue(guid, out tcs)) + { + // Trigger the task continuation + tcs.TrySetResult(response); + //tcs.SetResult(response); + + } + else + { + // Client response for something that isn't being tracked, might be an error + //Test Only + throw new Exception("Unexpected Response"); + } + } + + public void SendClientResponseBool(string guidString, bool response) + { + TaskCompletionSource tcs; + Guid guid = new Guid(guidString); + + if (ClientResponsesBool.TryGetValue(guid, out tcs)) + { + // Trigger the task continuation + tcs.TrySetResult(response); + } + else + { + // Client response for something that isn't being tracked, might be an error + //Test Only + throw new Exception("Unexpected Response"); + } + } + + public void SendClientResponseJObject(string guidString, JObject response) + { + TaskCompletionSource tcs; + Guid guid = new Guid(guidString); + + if (ClientResponsesJObject.TryGetValue(guid, out tcs)) + { + // Trigger the task continuation + tcs.TrySetResult(response); + } + else + { + // Client response for something that isn't being tracked, might be an error + //Test Only + throw new Exception("Unexpected Response"); + } + } + + public void SendClientResponseInt(string guidString, JObject response) + { + TaskCompletionSource tcs; + Guid guid = new Guid(guidString); + + if (ClientResponsesJObject.TryGetValue(guid, out tcs)) + { + // Trigger the task continuation + tcs.TrySetResult(response); + } + else + { + // Client response for something that isn't being tracked, might be an error + //Test Only + throw new Exception("Unexpected Response"); + } + } + + + public void SendClientResponseJArray(string guidString, JArray response) + { + TaskCompletionSource tcs; + Guid guid = new Guid(guidString); + + if (ClientResponsesJArray.TryGetValue(guid, out tcs)) + { + tcs.TrySetResult(response); + } + else + { + throw new Exception("Unexpected Response"); + } + } + + #region App + + public void AppWindowAllClosed(string id) + { + // We invoke this hub always because we dont know if it's started independent from electron + // If the main app quits id = 0, else we get the event id from electron (appWindowAllClosedEventId) + Electron.App.TriggerOnWindowAllClosed(); + } + + public void AppBeforeQuit(string id) + { + Electron.App.TriggerOnBeforeQuit(new QuitEventArgs()); + } + + public void AppWillQuit(string id) + { + Electron.App.TriggerOnWillQuit(new QuitEventArgs()); + } + + public void AppBrowserWindowBlur(string id) + { + Electron.App.TriggerOnBrowserWindowBlur(); + } + + public void AppBrowserWindowFocus(string id) + { + Electron.App.TriggerOnBrowserWindowFocus(); + } + + public async Task AppBrowserWindowCreated(string id) + { + Electron.App.TriggerOnBrowserWindowCreated(); + } + + public void AppWebContentsCreated(string id) + { + Electron.App.TriggerOnWebContentsCreated(); + } + + public void AppAccessibilitySupportChanged(string id, bool state) + { + Electron.App.TriggerOnAccessibilitySupportChanged(state); + } + + public void AppOpenFile(string id, string file) + { + Electron.App.TriggerOnOpenFile(file); + } + + public void AppOpenUrl(string id, string url) + { + Electron.App.TriggerOnOpenUrl(url); + } + #endregion + + #region AutoUpdater + + public void AutoUpdaterOnError(string id, string error) + { + Electron.AutoUpdater.TriggerOnError(error); + } + + public void AutoUpdaterOnCheckingForUpdate(string id) + { + Electron.AutoUpdater.TriggerOnCheckingForUpdate(); + } + + public void AutoUpdaterOnUpdateAvailable(string id, JObject jobject) + { + Electron.AutoUpdater.TriggerOnUpdateAvailable(jobject); + } + + public void AutoUpdaterOnUpdateNotAvailable(string id, JObject jobject) + { + Electron.AutoUpdater.TriggerOnUpdateNotAvailable(jobject); + } + + public void AutoUpdaterOnDownloadProgress(string id, JObject jobject) + { + Electron.AutoUpdater.TriggerOnUpdateNotAvailable(jobject); + } + + public void AutoUpdaterOnUpdateDownloaded(string id, JObject jobject) + { + Electron.AutoUpdater.TriggerOnUpdateNotAvailable(jobject); + } + + #endregion + + #region BrowserWindow + + public void BrowserWindowReadyToShow(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnReadyToShow(); + } + + public void BrowserWindowPageTitleUpdated(string id, string title) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnPageTitleUpdated(title); + } + + public void BrowserWindowClose(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnClose(); + } + + public void BrowserWindowsClosed(JArray ids) + { + foreach (var id in ids) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == (int)id).FirstOrDefault(); + window.TriggerOnClosed(); + } + } + + public void BrowserWindowClosed(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnClosed(); + } + + public void BrowserWindowSessionEnd(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnSessionEnd(); + } + + public void BrowserWindowUnresponsive(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnUnresponsive(); + } + + public void BrowserWindowResponsive(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnResponsive(); + } + + public void BrowserWindowBlur(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnBlur(); + } + + public void BrowserWindowFocus(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnFocus(); + } + + public void BrowserWindowShow(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnShow(); + } + + public void BrowserWindowHide(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnHide(); + } + + public void BrowserWindowMaximize(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnMaximize(); + } + + public void BrowserWindowUnmaximize(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnUnmaximize(); + } + + public void BrowserWindowMinimize(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnMinimize(); + } + + public void BrowserWindowRestore(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnRestore(); + } + + public void BrowserWindowResize(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnResize(); + } + + public void BrowserWindowMove(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnMove(); + } + + public void BrowserWindowMoved(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnMoved(); + } + + public void BrowserWindowEnterFullScreen(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnEnterFullScreen(); + } + + public void BrowserWindowLeaveFullScreen(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnLeaveFullScreen(); + } + + public void BrowserWindowEnterHtmlFullScreen(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnEnterHtmlFullScreen(); + } + + public void BrowserWindowLeaveHtmlFullScreen(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnLeaveHtmlFullScreen(); + } + + public void BrowserWindowAppCommand(string id, string command) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnAppCommand(command); + } + + public void BrowserWindowScrollTouchBegin(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnScrollTouchBegin(); + } + + public void BrowserWindowScrollTouchEnd(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnScrollTouchEnd(); + } + + public void BrowserWindowScrollTouchEdge(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnScrollTouchEdge(); + } + + public void BrowserWindowSwipe(string id, string direction) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnSwipe(direction); + } + + public void BrowserWindowSheetBegin(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnSheetBegin(); + } + + public void BrowserWindowSheetEnd(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnSheetEnd(); + } + + public void BrowserWindowNewWindowForTab(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnNewWindowForTab(); + } + + public void BrowserWindowMenuItemClicked(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.TriggerOnMenuItemClicked(id); + } + + public void BrowserWindowThumbbarButtonClicked(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + ThumbarButton thumbarButton = window.ThumbarButtons.Where(x => x.Id == id).FirstOrDefault(); + thumbarButton?.Click(); + } + + #endregion + + #region Cookies + public void CookiesOnChanged(string id, JArray jarray) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.WebContents.Session.Cookies.TriggerOnChanged(jarray); + } + #endregion + + #region Dock + public void DockMenuItemClicked(string id) + { + MenuItem menuItem = Dock.Instance.MenuItems.Where(x => x.Id == id).FirstOrDefault(); + menuItem?.Click(); + } + #endregion + + #region GlobalShortcut + public void GlobalShortcutPressed(string id) + { + if (GlobalShortcut.Instance._shortcuts.ContainsKey(id.ToString())) + { + GlobalShortcut.Instance._shortcuts.Where(x => x.Key == id).FirstOrDefault().Value(); + } + } + #endregion + + #region HostHook + public void HostHookResult(string socketEventName, params dynamic[] arguments) + { + + } + + public void HostHookError(string socketEventName, params dynamic[] arguments) + { + + } + #endregion + + #region Menu + public void MenuMenuItemClicked(string id) + { + MenuItem menuItem = Menu.Instance.MenuItems.Where(x => x.Id == id).FirstOrDefault(); + menuItem.Click?.Invoke(); + } + + public void MenuContextMenuItemClicked(string id, JArray results) + { + var itemId = ((JArray)results).First.ToString(); + var browserWindowId = (int)((JArray)results).Last; + + MenuItem menuItem = Menu.Instance.ContextMenuItems[browserWindowId].Where(x => x.Id == itemId).FirstOrDefault(); + menuItem.Click?.Invoke(); + } + #endregion + + #region NativeTheme + public void NativeThemeOnChanged(string id) + { + NativeTheme.Instance.TriggerOnUpdated(); + } + #endregion + + #region Notifications + public void NotificationEventOnShow(string id) + { + Notification.Instance.NotificationOptions.Single(x => x.ShowID == id.ToString()).OnShow(); + } + + public void NotificationEventOnClick(string id) + { + Notification.Instance.NotificationOptions.Single(x => x.ShowID == id.ToString()).OnClick(); + } + + public void NotificationEventOnClose(string id) + { + Notification.Instance.NotificationOptions.Single(x => x.ShowID == id.ToString()).OnClose(); + } + + public void NotificationEventOnReply(string id, JArray args) + { + var arguments = ((JArray)args).ToObject(); + Notification.Instance.NotificationOptions.Single(x => x.ReplyID == arguments[0].ToString()).OnReply(arguments[1].ToString()); + } + + public void NotificationEventOnAction(string id, JArray args) + { + var arguments = ((JArray)args).ToObject(); + Notification.Instance.NotificationOptions.Single(x => x.ReplyID == arguments[0].ToString()).OnAction(arguments[1].ToString()); + } + #endregion + + #region PowerMonitor + + public void PowerMonitorOnLockScreen() + { + Electron.PowerMonitor.TriggerOnLockScreen(); + } + + public void PowerMonitorOnUnLockScreen() + { + Electron.PowerMonitor.TriggerOnUnLockScreen(); + } + + + public void PowerMonitorOnSuspend() + { + Electron.PowerMonitor.TriggerOnSuspend(); + } + + public void PowerMonitorOnResume() + { + Electron.PowerMonitor.TriggerOnResume(); + } + + public void PowerMonitorOnAC() + { + Electron.PowerMonitor.TriggerOnAC(); + } + + public void PowerMonitorOnBattery() + { + Electron.PowerMonitor.TriggerOnBattery(); + } + + public void PowerMonitorOnShutdown() + { + Electron.PowerMonitor.TriggerOnShutdown(); + } + + #endregion + + #region IpcMain + + #endregion + + #region Screen + + public void ScreenOnDisplayAdded(string id, JObject display) + { + Electron.Screen.TriggerOnDisplayAdded(display.ToObject()); + } + + public void ScreenOnDisplayRemoved(string id, JObject display) + { + Electron.Screen.TriggerOnDisplayRemoved(display.ToObject()); + } + + public void ScreenOnDisplayMetricsChanged(string id, JArray args) + { + var display = ((JArray)args).First.ToObject(); + var metrics = ((JArray)args).Last.ToObject(); + Electron.Screen.TriggerOnDisplayMetricsChanged(display, metrics); + } + + #endregion + + #region Tray + public void TrayOnClick(string id, JArray jarray) + { + var args = ((JArray)jarray).ToObject(); + var trayClickEventArgs = ((JObject)args[0]).ToObject(); + var bounds = ((JObject)args[1]).ToObject(); + Tray.Instance.TriggerOnClick(trayClickEventArgs, bounds); + } + + public void TrayOnRightClick(string id, JArray jarray) + { + var args = ((JArray)jarray).ToObject(); + var trayClickEventArgs = ((JObject)args[0]).ToObject(); + var bounds = ((JObject)args[1]).ToObject(); + Tray.Instance.TriggerOnRightClick(trayClickEventArgs, bounds); + } + + public void TrayOnDoubleClick(string id, JArray jarray) + { + var args = ((JArray)jarray).ToObject(); + var trayClickEventArgs = ((JObject)args[0]).ToObject(); + var bounds = ((JObject)args[1]).ToObject(); + Tray.Instance.TriggerOnRightClick(trayClickEventArgs, bounds); + } + + public void TrayOnBalloonShow(string id) + { + Tray.Instance.TriggerOnBalloonShow(); + } + + public void TrayOnBalloonClick(string id) + { + Tray.Instance.TriggerOnBalloonClick(); + } + + public void TrayOnBalloonClosed(string id) + { + Tray.Instance.TriggerOnBalloonClosed(); + } + + public void TrayOnMenuItemClicked(string id) + { + MenuItem menuItem = Tray.Instance.MenuItems.Where(x => x.Id == id).FirstOrDefault(); + menuItem?.Click(); + } + #endregion + + #region WebContents + public void WebContentOnCrashed(string id, bool crashed) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.WebContents.TriggerOnCrashed(crashed); + } + + public void WebContentOnDidFinishLoad(string id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + window.WebContents.TriggerOnDidFinishLoad(); + } + #endregion + + + + public override async Task OnConnectedAsync() + { + Electron.ElectronConnected = true; + await base.OnConnectedAsync(); + + ElectronClients.ClientsList newClient = new ElectronClients.ClientsList(); + newClient.ConnectionId = Context.ConnectionId; + newClient.ElectronClient = true; + ElectronClients.ElectronConnections.Clients.Add(newClient); + } + + } +} diff --git a/ElectronNET.API/HybridSupport.cs b/ElectronNET.API/HybridSupport.cs index 935ea512..f7b67e4d 100644 --- a/ElectronNET.API/HybridSupport.cs +++ b/ElectronNET.API/HybridSupport.cs @@ -15,7 +15,8 @@ public static bool IsElectronActive { get { - return !string.IsNullOrEmpty(BridgeSettings.SocketPort); + //return !string.IsNullOrEmpty(BridgeSettings.SocketPort); + return true; } } } diff --git a/ElectronNET.API/IpcMain.cs b/ElectronNET.API/IpcMain.cs index 3e950c12..26d177db 100644 --- a/ElectronNET.API/IpcMain.cs +++ b/ElectronNET.API/IpcMain.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using Microsoft.AspNetCore.SignalR; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; using System; @@ -8,6 +9,7 @@ namespace ElectronNET.API { + /// /// Communicate asynchronously from the main process to renderer processes. /// @@ -45,8 +47,8 @@ internal static IpcMain Instance /// Callback Method. public void On(string channel, Action listener) { - BridgeConnector.Socket.Emit("registerIpcMainChannel", channel); - BridgeConnector.Socket.Off(channel); + Electron.SignalrElectron.Clients.All.SendAsync("registerIpcMainChannel", channel); + /*BridgeConnector.Socket.Off(channel); BridgeConnector.Socket.On(channel, (args) => { List objectArray = FormatArguments(args); @@ -59,7 +61,7 @@ public void On(string channel, Action listener) { listener(objectArray); } - }); + });*/ } private List FormatArguments(object args) @@ -89,8 +91,8 @@ private List FormatArguments(object args) /// public void OnSync(string channel, Func listener) { - BridgeConnector.Socket.Emit("registerSyncIpcMainChannel", channel); - BridgeConnector.Socket.On(channel, (args) => { + Electron.SignalrElectron.Clients.All.SendAsync("registerSyncIpcMainChannel", channel); + /*BridgeConnector.Socket.On(channel, (args) => { List objectArray = FormatArguments(args); object parameter; if (objectArray.Count == 1) @@ -103,8 +105,8 @@ public void OnSync(string channel, Func listener) } var result = listener(parameter); - BridgeConnector.Socket.Emit(channel + "Sync", result); - }); + Electron.SignalrElectron.Clients.All.SendAsync(channel + "Sync", result); + });*/ } /// @@ -115,8 +117,8 @@ public void OnSync(string channel, Func listener) /// Callback Method. public void Once(string channel, Action listener) { - BridgeConnector.Socket.Emit("registerOnceIpcMainChannel", channel); - BridgeConnector.Socket.On(channel, (args) => + Electron.SignalrElectron.Clients.All.SendAsync("registerOnceIpcMainChannel", channel); + /*BridgeConnector.Socket.On(channel, (args) => { List objectArray = FormatArguments(args); @@ -128,7 +130,7 @@ public void Once(string channel, Action listener) { listener(objectArray); } - }); + });*/ } /// @@ -137,7 +139,7 @@ public void Once(string channel, Action listener) /// Channelname. public void RemoveAllListeners(string channel) { - BridgeConnector.Socket.Emit("removeAllListenersIpcMainChannel", channel); + Electron.SignalrElectron.Clients.All.SendAsync("removeAllListenersIpcMainChannel", channel); } /// @@ -171,11 +173,11 @@ public void Send(BrowserWindow browserWindow, string channel, params object[] da if(jobjects.Count > 0 || jarrays.Count > 0) { - BridgeConnector.Socket.Emit("sendToIpcRenderer", JObject.FromObject(browserWindow, _jsonSerializer), channel, jarrays.ToArray(), jobjects.ToArray(), objects.ToArray()); + Electron.SignalrElectron.Clients.All.SendAsync("sendToIpcRenderer", JObject.FromObject(browserWindow, _jsonSerializer), channel, jarrays.ToArray(), jobjects.ToArray(), objects.ToArray()); } else { - BridgeConnector.Socket.Emit("sendToIpcRenderer", JObject.FromObject(browserWindow, _jsonSerializer), channel, data); + Electron.SignalrElectron.Clients.All.SendAsync("sendToIpcRenderer", JObject.FromObject(browserWindow, _jsonSerializer), channel, data); } } @@ -210,11 +212,11 @@ public void Send(BrowserView browserView, string channel, params object[] data) if(jobjects.Count > 0 || jarrays.Count > 0) { - BridgeConnector.Socket.Emit("sendToIpcRendererBrowserView", browserView.Id, channel, jarrays.ToArray(), jobjects.ToArray(), objects.ToArray()); + Electron.SignalrElectron.Clients.All.SendAsync("sendToIpcRendererBrowserView", browserView.Id, channel, jarrays.ToArray(), jobjects.ToArray(), objects.ToArray()); } else { - BridgeConnector.Socket.Emit("sendToIpcRendererBrowserView", browserView.Id, channel, data); + Electron.SignalrElectron.Clients.All.SendAsync("sendToIpcRendererBrowserView", browserView.Id, channel, data); } } diff --git a/ElectronNET.API/Menu.cs b/ElectronNET.API/Menu.cs index 8397a10d..05d68e29 100644 --- a/ElectronNET.API/Menu.cs +++ b/ElectronNET.API/Menu.cs @@ -6,6 +6,8 @@ using ElectronNET.API.Extensions; using System.Linq; using System.Collections.ObjectModel; +using System; +using Microsoft.AspNetCore.SignalR; namespace ElectronNET.API { @@ -51,21 +53,15 @@ internal static Menu Instance /// Sets the application menu. /// /// The menu items. - public void SetApplicationMenu(MenuItem[] menuItems) + public async void SetApplicationMenu(MenuItem[] menuItems) { _menuItems.Clear(); menuItems.AddMenuItemsId(); menuItems.AddSubmenuTypes(); - BridgeConnector.Socket.Emit("menu-setApplicationMenu", JArray.FromObject(menuItems, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("menu-setApplicationMenu", JArray.FromObject(menuItems, _jsonSerializer)); _menuItems.AddRange(menuItems); - - BridgeConnector.Socket.Off("menuItemClicked"); - BridgeConnector.Socket.On("menuItemClicked", (id) => { - MenuItem menuItem = _menuItems.GetMenuItem(id.ToString()); - menuItem.Click?.Invoke(); - }); } /// @@ -82,12 +78,12 @@ public void SetApplicationMenu(MenuItem[] menuItems) /// /// The browser window. /// The menu items. - public void SetContextMenu(BrowserWindow browserWindow, MenuItem[] menuItems) + public async void SetContextMenu(BrowserWindow browserWindow, MenuItem[] menuItems) { menuItems.AddMenuItemsId(); menuItems.AddSubmenuTypes(); - BridgeConnector.Socket.Emit("menu-setContextMenu", browserWindow.Id, JArray.FromObject(menuItems, _jsonSerializer)); + Electron.SignalrElectron.Clients.All.SendAsync("menu-setContextMenu", browserWindow.Id, JArray.FromObject(menuItems, _jsonSerializer)); if (!_contextMenuItems.ContainsKey(browserWindow.Id)) { @@ -95,25 +91,15 @@ public void SetContextMenu(BrowserWindow browserWindow, MenuItem[] menuItems) var x = _contextMenuItems.ToDictionary(kv => kv.Key, kv => kv.Value.AsReadOnly()); ContextMenuItems = new ReadOnlyDictionary>(x); } - - BridgeConnector.Socket.Off("contextMenuItemClicked"); - BridgeConnector.Socket.On("contextMenuItemClicked", (results) => - { - var id = ((JArray)results).First.ToString(); - var browserWindowId = (int)((JArray)results).Last; - - MenuItem menuItem = _contextMenuItems[browserWindowId].GetMenuItem(id); - menuItem.Click?.Invoke(); - }); } /// /// Contexts the menu popup. /// /// The browser window. - public void ContextMenuPopup(BrowserWindow browserWindow) + public async void ContextMenuPopup(BrowserWindow browserWindow) { - BridgeConnector.Socket.Emit("menu-contextMenuPopup", browserWindow.Id); + await Electron.SignalrElectron.Clients.All.SendAsync("menu-contextMenuPopup", browserWindow.Id); } private JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/Models/ElectronClients.cs b/ElectronNET.API/Models/ElectronClients.cs new file mode 100644 index 00000000..944fc228 --- /dev/null +++ b/ElectronNET.API/Models/ElectronClients.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Threading.Tasks; + +namespace ElectronNET.API.Models +{ + public class ElectronClients + { + public static ElectronClients ElectronConnections = new ElectronClients(); + + public List Clients { get; set; } = new List(); + + public class ClientsList + { + public string ConnectionId { get; set; } + public bool ElectronClient { get; set; } + } + } +} diff --git a/ElectronNET.API/NativeTheme.cs b/ElectronNET.API/NativeTheme.cs index 037a97a6..e3a5d30a 100644 --- a/ElectronNET.API/NativeTheme.cs +++ b/ElectronNET.API/NativeTheme.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using ElectronNET.API.Entities; using ElectronNET.API.Extensions; +using Microsoft.AspNetCore.SignalR; namespace ElectronNET.API { @@ -90,33 +91,22 @@ internal static NativeTheme Instance /// Your application should then always use to determine what CSS to apply. /// /// The new ThemeSource. - public void SetThemeSource(ThemeSourceMode themeSourceMode) + public async Task SetThemeSource(ThemeSourceMode themeSourceMode) { var themeSource = themeSourceMode.GetDescription(); - BridgeConnector.Socket.Emit("nativeTheme-themeSource", themeSource); + await Electron.SignalrElectron.Clients.All.SendAsync("nativeTheme-themeSource", themeSource); } /// /// A property that can be , or . It is used to override () and /// supercede the value that Chromium has chosen to use internally. /// - public Task GetThemeSourceAsync() + public async Task GetThemeSourceAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("nativeTheme-themeSource-getCompleted", (themeSource) => - { - BridgeConnector.Socket.Off("nativeTheme-themeSource-getCompleted"); - - var themeSourceValue = (ThemeSourceMode)Enum.Parse(typeof(ThemeSourceMode), (string)themeSource, true); - - taskCompletionSource.SetResult(themeSourceValue); - }); - - BridgeConnector.Socket.Emit("nativeTheme-themeSource-get"); - - return taskCompletionSource.Task; + var resultSignalr = await SignalrSerializeHelper.GetSignalrResultString("nativeTheme-themeSource-get"); + var themeSourceValue = (ThemeSourceMode)Enum.Parse(typeof(ThemeSourceMode), (string)resultSignalr, true); + return themeSourceValue; } /// @@ -124,57 +114,27 @@ public Task GetThemeSourceAsync() /// being instructed to show a dark-style UI. If you want to modify this value you /// should use . /// - public Task ShouldUseDarkColorsAsync() + public async Task ShouldUseDarkColorsAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("nativeTheme-shouldUseDarkColors-completed", (shouldUseDarkColors) => { - BridgeConnector.Socket.Off("nativeTheme-shouldUseDarkColors-completed"); - - taskCompletionSource.SetResult((bool)shouldUseDarkColors); - }); - - BridgeConnector.Socket.Emit("nativeTheme-shouldUseDarkColors"); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("nativeTheme-shouldUseDarkColors"); } /// /// A for if the OS / Chromium currently has high-contrast mode enabled or is /// being instructed to show a high-contrast UI. /// - public Task ShouldUseHighContrastColorsAsync() + public async Task ShouldUseHighContrastColorsAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("nativeTheme-shouldUseHighContrastColors-completed", (shouldUseHighContrastColors) => { - BridgeConnector.Socket.Off("nativeTheme-shouldUseHighContrastColors-completed"); - - taskCompletionSource.SetResult((bool)shouldUseHighContrastColors); - }); - - BridgeConnector.Socket.Emit("nativeTheme-shouldUseHighContrastColors"); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("nativeTheme-shouldUseHighContrastColors"); } /// /// A for if the OS / Chromium currently has an inverted color scheme or is /// being instructed to use an inverted color scheme. /// - public Task ShouldUseInvertedColorSchemeAsync() + public async Task ShouldUseInvertedColorSchemeAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("nativeTheme-shouldUseInvertedColorScheme-completed", (shouldUseInvertedColorScheme) => { - BridgeConnector.Socket.Off("nativeTheme-shouldUseInvertedColorScheme-completed"); - - taskCompletionSource.SetResult((bool)shouldUseInvertedColorScheme); - }); - - BridgeConnector.Socket.Emit("nativeTheme-shouldUseInvertedColorScheme"); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("nativeTheme-shouldUseInvertedColorScheme"); } /// @@ -187,26 +147,21 @@ public event Action Updated { if (_updated == null) { - BridgeConnector.Socket.On("nativeTheme-updated" + GetHashCode(), () => - { - _updated(); - }); - - BridgeConnector.Socket.Emit("register-nativeTheme-updated-event", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-nativeTheme-updated-event", GetHashCode()); } _updated += value; } remove { _updated -= value; - - if (_updated == null) - { - BridgeConnector.Socket.Off("nativeTheme-updated" + GetHashCode()); - } } } + public void TriggerOnUpdated() + { + _updated(); + } + private event Action _updated; } } \ No newline at end of file diff --git a/ElectronNET.API/Notification.cs b/ElectronNET.API/Notification.cs index 68ac4e14..34d329e8 100644 --- a/ElectronNET.API/Notification.cs +++ b/ElectronNET.API/Notification.cs @@ -1,4 +1,5 @@ using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -38,17 +39,18 @@ internal static Notification Instance } } + public IReadOnlyCollection NotificationOptions { get { return _notificationOptions.AsReadOnly(); } } private static List _notificationOptions = new List(); /// /// Create OS desktop notifications /// /// - public void Show(NotificationOptions notificationOptions) + public async void Show(NotificationOptions notificationOptions) { GenerateIDsForDefinedActions(notificationOptions); - BridgeConnector.Socket.Emit("createNotification", JObject.FromObject(notificationOptions, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("createNotification", JObject.FromObject(notificationOptions, _jsonSerializer)); } private static void GenerateIDsForDefinedActions(NotificationOptions notificationOptions) @@ -59,57 +61,30 @@ private static void GenerateIDsForDefinedActions(NotificationOptions notificatio { notificationOptions.ShowID = Guid.NewGuid().ToString(); isActionDefined = true; - - BridgeConnector.Socket.Off("NotificationEventShow"); - BridgeConnector.Socket.On("NotificationEventShow", (id) => { - _notificationOptions.Single(x => x.ShowID == id.ToString()).OnShow(); - }); } if (notificationOptions.OnClick != null) { notificationOptions.ClickID = Guid.NewGuid().ToString(); isActionDefined = true; - - BridgeConnector.Socket.Off("NotificationEventClick"); - BridgeConnector.Socket.On("NotificationEventClick", (id) => { - _notificationOptions.Single(x => x.ClickID == id.ToString()).OnClick(); - }); } if (notificationOptions.OnClose != null) { notificationOptions.CloseID = Guid.NewGuid().ToString(); isActionDefined = true; - - BridgeConnector.Socket.Off("NotificationEventClose"); - BridgeConnector.Socket.On("NotificationEventClose", (id) => { - _notificationOptions.Single(x => x.CloseID == id.ToString()).OnClose(); - }); } if (notificationOptions.OnReply != null) { notificationOptions.ReplyID = Guid.NewGuid().ToString(); isActionDefined = true; - - BridgeConnector.Socket.Off("NotificationEventReply"); - BridgeConnector.Socket.On("NotificationEventReply", (args) => { - var arguments = ((JArray)args).ToObject(); - _notificationOptions.Single(x => x.ReplyID == arguments[0].ToString()).OnReply(arguments[1].ToString()); - }); } if (notificationOptions.OnAction != null) { notificationOptions.ActionID = Guid.NewGuid().ToString(); isActionDefined = true; - - BridgeConnector.Socket.Off("NotificationEventAction"); - BridgeConnector.Socket.On("NotificationEventAction", (args) => { - var arguments = ((JArray)args).ToObject(); - _notificationOptions.Single(x => x.ReplyID == arguments[0].ToString()).OnAction(arguments[1].ToString()); - }); } if (isActionDefined) @@ -122,19 +97,9 @@ private static void GenerateIDsForDefinedActions(NotificationOptions notificatio /// Whether or not desktop notifications are supported on the current system. /// /// - public Task IsSupportedAsync() + public async Task IsSupportedAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("notificationIsSupportedComplete", (isSupported) => - { - BridgeConnector.Socket.Off("notificationIsSupportedComplete"); - taskCompletionSource.SetResult((bool)isSupported); - }); - - BridgeConnector.Socket.Emit("notificationIsSupported"); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("notificationIsSupported"); } private JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/PowerMonitor.cs b/ElectronNET.API/PowerMonitor.cs index 03e68748..b2397264 100644 --- a/ElectronNET.API/PowerMonitor.cs +++ b/ElectronNET.API/PowerMonitor.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.AspNetCore.SignalR; +using System; using System.Threading.Tasks; namespace ElectronNET.API @@ -17,24 +18,21 @@ public event Action OnLockScreen { if (_lockScreen == null) { - BridgeConnector.Socket.On("pm-lock-screen" , () => - { - _lockScreen(); - }); - - BridgeConnector.Socket.Emit("register-pm-lock-screen"); + Electron.SignalrElectron.Clients.All.SendAsync("register-pm-lock-screen"); } _lockScreen += value; } remove { _lockScreen -= value; - - if (_lockScreen == null) - BridgeConnector.Socket.Off("pm-lock-screen"); } } + public void TriggerOnLockScreen() + { + _lockScreen(); + } + private event Action _lockScreen; /// @@ -46,24 +44,21 @@ public event Action OnUnLockScreen { if (_unlockScreen == null) { - BridgeConnector.Socket.On("pm-unlock-screen", () => - { - _unlockScreen(); - }); - - BridgeConnector.Socket.Emit("register-pm-unlock-screen"); + Electron.SignalrElectron.Clients.All.SendAsync("register-pm-unlock-screen"); } _unlockScreen += value; } remove { _unlockScreen -= value; - - if (_unlockScreen == null) - BridgeConnector.Socket.Off("pm-unlock-screen"); } } + public void TriggerOnUnLockScreen() + { + _unlockScreen(); + } + private event Action _unlockScreen; /// @@ -75,24 +70,21 @@ public event Action OnSuspend { if (_suspend == null) { - BridgeConnector.Socket.On("pm-suspend", () => - { - _suspend(); - }); - - BridgeConnector.Socket.Emit("register-pm-suspend"); + Electron.SignalrElectron.Clients.All.SendAsync("register-pm-suspend"); } _suspend += value; } remove { _suspend -= value; - - if (_suspend == null) - BridgeConnector.Socket.Off("pm-suspend"); } } + public void TriggerOnSuspend() + { + _suspend(); + } + private event Action _suspend; /// @@ -104,24 +96,21 @@ public event Action OnResume { if (_resume == null) { - BridgeConnector.Socket.On("pm-resume", () => - { - _resume(); - }); - - BridgeConnector.Socket.Emit("register-pm-resume"); + Electron.SignalrElectron.Clients.All.SendAsync("register-pm-resume"); } _resume += value; } remove { _resume -= value; - - if (_resume == null) - BridgeConnector.Socket.Off("pm-resume"); } } + public void TriggerOnResume() + { + _resume(); + } + private event Action _resume; /// @@ -133,24 +122,21 @@ public event Action OnAC { if (_onAC == null) { - BridgeConnector.Socket.On("pm-on-ac", () => - { - _onAC(); - }); - - BridgeConnector.Socket.Emit("register-pm-on-ac"); + Electron.SignalrElectron.Clients.All.SendAsync("register-pm-on-ac"); } _onAC += value; } remove { _onAC -= value; - - if (_onAC == null) - BridgeConnector.Socket.Off("pm-on-ac"); } } + public void TriggerOnAC() + { + _onAC(); + } + private event Action _onAC; /// @@ -162,24 +148,21 @@ public event Action OnBattery { if (_onBattery == null) { - BridgeConnector.Socket.On("pm-on-battery", () => - { - _onBattery(); - }); - - BridgeConnector.Socket.Emit("register-pm-on-battery"); + Electron.SignalrElectron.Clients.All.SendAsync("register-pm-on-battery"); } _onBattery += value; } remove { _onBattery -= value; - - if (_onBattery == null) - BridgeConnector.Socket.Off("pm-on-battery"); } } + public void TriggerOnBattery() + { + _onBattery(); + } + private event Action _onBattery; @@ -195,24 +178,21 @@ public event Action OnShutdown { if (_shutdown == null) { - BridgeConnector.Socket.On("pm-shutdown", () => - { - _shutdown(); - }); - - BridgeConnector.Socket.Emit("register-pm-shutdown"); + Electron.SignalrElectron.Clients.All.SendAsync("register-pm-shutdown"); } _shutdown += value; } remove { _shutdown -= value; - - if (_shutdown == null) - BridgeConnector.Socket.Off("pm-on-shutdown"); } } + public void TriggerOnShutdown() + { + _shutdown(); + } + private event Action _shutdown; private static PowerMonitor _powerMonitor; diff --git a/ElectronNET.API/Screen.cs b/ElectronNET.API/Screen.cs index 31cecb5f..7f3c0857 100644 --- a/ElectronNET.API/Screen.cs +++ b/ElectronNET.API/Screen.cs @@ -1,4 +1,5 @@ using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -21,24 +22,21 @@ public event Action OnDisplayAdded { if (_onDisplayAdded == null) { - BridgeConnector.Socket.On("screen-display-added-event" + GetHashCode(), (display) => - { - _onDisplayAdded(((JObject)display).ToObject()); - }); - - BridgeConnector.Socket.Emit("register-screen-display-added", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-screen-display-added", GetHashCode()); } _onDisplayAdded += value; } remove { _onDisplayAdded -= value; - - if (_onDisplayAdded == null) - BridgeConnector.Socket.Off("screen-display-added-event" + GetHashCode()); } } + public void TriggerOnDisplayAdded(Display display) + { + _onDisplayAdded(display); + } + private event Action _onDisplayAdded; /// @@ -50,24 +48,21 @@ public event Action OnDisplayRemoved { if (_onDisplayRemoved == null) { - BridgeConnector.Socket.On("screen-display-removed-event" + GetHashCode(), (display) => - { - _onDisplayRemoved(((JObject)display).ToObject()); - }); - - BridgeConnector.Socket.Emit("register-screen-display-removed", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-screen-display-removed", GetHashCode()); } _onDisplayRemoved += value; } remove { _onDisplayRemoved -= value; - - if (_onDisplayRemoved == null) - BridgeConnector.Socket.Off("screen-display-removed-event" + GetHashCode()); } } + public void TriggerOnDisplayRemoved(Display display) + { + _onDisplayAdded(display); + } + private event Action _onDisplayRemoved; /// @@ -81,27 +76,22 @@ public event Action OnDisplayMetricsChanged { if (_onDisplayMetricsChanged == null) { - BridgeConnector.Socket.On("screen-display-metrics-changed-event" + GetHashCode(), (args) => - { - var display = ((JArray)args).First.ToObject(); - var metrics = ((JArray)args).Last.ToObject(); + Electron.SignalrElectron.Clients.All.SendAsync("register-screen-display-metrics-changed", GetHashCode()); - _onDisplayMetricsChanged(display, metrics); - }); - - BridgeConnector.Socket.Emit("register-screen-display-metrics-changed", GetHashCode()); } _onDisplayMetricsChanged += value; } remove { _onDisplayMetricsChanged -= value; - - if (_onDisplayMetricsChanged == null) - BridgeConnector.Socket.Off("screen-display-metrics-changed-event" + GetHashCode()); } } + public void TriggerOnDisplayMetricsChanged(Display display, string[] metrics) + { + _onDisplayMetricsChanged(display, metrics); + } + private event Action _onDisplayMetricsChanged; private static Screen _screen; @@ -132,100 +122,50 @@ internal static Screen Instance /// The current absolute position of the mouse pointer. /// /// - public Task GetCursorScreenPointAsync() + public async Task GetCursorScreenPointAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("screen-getCursorScreenPointCompleted", (point) => - { - BridgeConnector.Socket.Off("screen-getCursorScreenPointCompleted"); - - taskCompletionSource.SetResult(((JObject)point).ToObject()); - }); - - BridgeConnector.Socket.Emit("screen-getCursorScreenPoint"); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("screen-getCursorScreenPoint"); + return signalrResult.ToObject(); } /// /// macOS: The height of the menu bar in pixels. /// /// The height of the menu bar in pixels. - public Task GetMenuBarHeightAsync() + public async Task GetMenuBarHeightAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("screen-getMenuBarHeightCompleted", (height) => - { - BridgeConnector.Socket.Off("screen-getMenuBarHeightCompleted"); - - taskCompletionSource.SetResult(int.Parse(height.ToString())); - }); - - BridgeConnector.Socket.Emit("screen-getMenuBarHeight"); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultString("screen-getMenuBarHeight"); + return int.Parse(signalrResult); } /// /// The primary display. /// /// - public Task GetPrimaryDisplayAsync() + public async Task GetPrimaryDisplayAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("screen-getPrimaryDisplayCompleted", (display) => - { - BridgeConnector.Socket.Off("screen-getPrimaryDisplayCompleted"); - - taskCompletionSource.SetResult(((JObject)display).ToObject()); - }); - - BridgeConnector.Socket.Emit("screen-getPrimaryDisplay"); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("screen-getPrimaryDisplay"); + return signalrResult.ToObject(); } /// /// An array of displays that are currently available. /// /// An array of displays that are currently available. - public Task GetAllDisplaysAsync() + public async Task GetAllDisplaysAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("screen-getAllDisplaysCompleted", (displays) => - { - BridgeConnector.Socket.Off("screen-getAllDisplaysCompleted"); - - taskCompletionSource.SetResult(((JArray)displays).ToObject()); - }); - - BridgeConnector.Socket.Emit("screen-getAllDisplays"); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJArray("screen-getAllDisplays"); + return signalrResult.ToObject(); } /// /// The display nearest the specified point. /// /// The display nearest the specified point. - public Task GetDisplayNearestPointAsync(Point point) + public async Task GetDisplayNearestPointAsync(Point point) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("screen-getDisplayNearestPointCompleted", (display) => - { - BridgeConnector.Socket.Off("screen-getDisplayNearestPointCompleted"); - - taskCompletionSource.SetResult(((JObject)display).ToObject()); - }); - - BridgeConnector.Socket.Emit("screen-getDisplayNearestPoint", JObject.FromObject(point, _jsonSerializer)); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("screen-getDisplayNearestPoint", JObject.FromObject(point, _jsonSerializer)); + return signalrResult.ToObject(); } /// @@ -233,20 +173,10 @@ public Task GetDisplayNearestPointAsync(Point point) /// /// /// The display that most closely intersects the provided bounds. - public Task GetDisplayMatchingAsync(Rectangle rectangle) + public async Task GetDisplayMatchingAsync(Rectangle rectangle) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("screen-getDisplayMatching", (display) => - { - BridgeConnector.Socket.Off("screen-getDisplayMatching"); - - taskCompletionSource.SetResult(((JObject)display).ToObject()); - }); - - BridgeConnector.Socket.Emit("screen-getDisplayMatching", JObject.FromObject(rectangle, _jsonSerializer)); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("screen-getDisplayMatching", JObject.FromObject(rectangle, _jsonSerializer)); + return signalrResult.ToObject(); } private JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/Session.cs b/ElectronNET.API/Session.cs index a4cb6bb6..63d9c069 100644 --- a/ElectronNET.API/Session.cs +++ b/ElectronNET.API/Session.cs @@ -1,4 +1,5 @@ using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -35,9 +36,9 @@ internal Session(int id) /// Dynamically sets whether to always send credentials for HTTP NTLM or Negotiate authentication. /// /// A comma-separated list of servers for which integrated authentication is enabled. - public void AllowNTLMCredentialsForDomains(string domains) + public async Task AllowNTLMCredentialsForDomains(string domains) { - BridgeConnector.Socket.Emit("webContents-session-allowNTLMCredentialsForDomains", Id, domains); + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-allowNTLMCredentialsForDomains", Id, domains); } /// @@ -45,99 +46,44 @@ public void AllowNTLMCredentialsForDomains(string domains) /// /// /// - public Task ClearAuthCacheAsync(RemovePassword options) + public async Task ClearAuthCacheAsync(RemovePassword options) { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-clearAuthCache-completed" + guid, () => - { - BridgeConnector.Socket.Off("webContents-session-clearAuthCache-completed" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("webContents-session-clearAuthCache", Id, JObject.FromObject(options, _jsonSerializer), guid); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("webContents-session-clearAuthCache", Id, JObject.FromObject(options, _jsonSerializer)); } /// /// Clears the session’s HTTP authentication cache. /// - public Task ClearAuthCacheAsync() + public async Task ClearAuthCacheAsync() { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-clearAuthCache-completed" + guid, () => - { - BridgeConnector.Socket.Off("webContents-session-clearAuthCache-completed" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("webContents-session-clearAuthCache", Id, guid); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("webContents-session-clearAuthCache", Id); } /// /// Clears the session’s HTTP cache. /// /// - public Task ClearCacheAsync() + public async Task ClearCacheAsync() { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-clearCache-completed" + guid, () => - { - BridgeConnector.Socket.Off("webContents-session-clearCache-completed" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("webContents-session-clearCache", Id, guid); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("webContents-session-clearCache", Id); } /// /// Clears the host resolver cache. /// /// - public Task ClearHostResolverCacheAsync() + public async Task ClearHostResolverCacheAsync() { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-clearHostResolverCache-completed" + guid, () => - { - BridgeConnector.Socket.Off("webContents-session-clearHostResolverCache-completed" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("webContents-session-clearHostResolverCache", Id, guid); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("webContents-session-clearHostResolverCache", Id); } /// /// Clears the data of web storages. /// /// - public Task ClearStorageDataAsync() + public async Task ClearStorageDataAsync() { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-clearStorageData-completed" + guid, () => - { - BridgeConnector.Socket.Off("webContents-session-clearStorageData-completed" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("webContents-session-clearStorageData", Id, guid); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("webContents-session-clearStorageData", Id); } /// @@ -145,20 +91,9 @@ public Task ClearStorageDataAsync() /// /// /// - public Task ClearStorageDataAsync(ClearStorageDataOptions options) + public async Task ClearStorageDataAsync(ClearStorageDataOptions options) { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-clearStorageData-options-completed" + guid, () => - { - BridgeConnector.Socket.Off("webContents-session-clearStorageData-options-completed" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("webContents-session-clearStorageData-options", Id, JObject.FromObject(options, _jsonSerializer), guid); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("webContents-session-clearStorageData-options", Id, JObject.FromObject(options, _jsonSerializer)); } /// @@ -169,35 +104,35 @@ public Task ClearStorageDataAsync(ClearStorageDataOptions options) /// API is called on the DownloadItem. /// /// - public void CreateInterruptedDownload(CreateInterruptedDownloadOptions options) + public async Task CreateInterruptedDownload(CreateInterruptedDownloadOptions options) { - BridgeConnector.Socket.Emit("webContents-session-createInterruptedDownload", Id, JObject.FromObject(options, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-createInterruptedDownload", Id, JObject.FromObject(options, _jsonSerializer)); } /// /// Disables any network emulation already active for the session. Resets to the /// original network configuration. /// - public void DisableNetworkEmulation() + public async Task DisableNetworkEmulation() { - BridgeConnector.Socket.Emit("webContents-session-disableNetworkEmulation", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-disableNetworkEmulation", Id); } /// /// Emulates network with the given configuration for the session. /// /// - public void EnableNetworkEmulation(EnableNetworkEmulationOptions options) + public async Task EnableNetworkEmulation(EnableNetworkEmulationOptions options) { - BridgeConnector.Socket.Emit("webContents-session-enableNetworkEmulation", Id, JObject.FromObject(options, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-enableNetworkEmulation", Id, JObject.FromObject(options, _jsonSerializer)); } /// /// Writes any unwritten DOMStorage data to disk. /// - public void FlushStorageData() + public async Task FlushStorageData() { - BridgeConnector.Socket.Emit("webContents-session-flushStorageData", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-flushStorageData", Id); } /// @@ -205,83 +140,39 @@ public void FlushStorageData() /// /// /// - public Task GetBlobDataAsync(string identifier) + public async Task GetBlobDataAsync(string identifier) { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-getBlobData-completed" + guid, (buffer) => - { - var result = ((JArray)buffer).ToObject(); - - BridgeConnector.Socket.Off("webContents-session-getBlobData-completed" + guid); - taskCompletionSource.SetResult(result); - }); - - BridgeConnector.Socket.Emit("webContents-session-getBlobData", Id, identifier, guid); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJArray("webContents-session-getBlobData", Id, identifier); + return signalrResult.ToObject(); } /// /// Get session's current cache size. /// /// Callback is invoked with the session's current cache size. - public Task GetCacheSizeAsync() + public async Task GetCacheSizeAsync() { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-getCacheSize-completed" + guid, (size) => - { - BridgeConnector.Socket.Off("webContents-session-getCacheSize-completed" + guid); - taskCompletionSource.SetResult((int)size); - }); - - BridgeConnector.Socket.Emit("webContents-session-getCacheSize", Id, guid); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultString("webContents-session-getCacheSize", Id); + return int.Parse(signalrResult); } /// /// /// /// - public Task GetPreloadsAsync() + public async Task GetPreloadsAsync() { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-getPreloads-completed" + guid, (preloads) => - { - var result = ((JArray)preloads).ToObject(); - BridgeConnector.Socket.Off("webContents-session-getPreloads-completed" + guid); - taskCompletionSource.SetResult(result); - }); - - BridgeConnector.Socket.Emit("webContents-session-getPreloads", Id, guid); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJArray("webContents-session-getPreloads", Id); + return signalrResult.ToObject(); } /// /// /// /// - public Task GetUserAgent() + public async Task GetUserAgent() { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-getUserAgent-completed" + guid, (userAgent) => - { - BridgeConnector.Socket.Off("webContents-session-getUserAgent-completed" + guid); - taskCompletionSource.SetResult(userAgent.ToString()); - }); - - BridgeConnector.Socket.Emit("webContents-session-getUserAgent", Id, guid); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultString("webContents-session-getUserAgent", Id); } /// @@ -290,20 +181,9 @@ public Task GetUserAgent() /// /// /// - public Task ResolveProxyAsync(string url) + public async Task ResolveProxyAsync(string url) { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-resolveProxy-completed" + guid, (proxy) => - { - BridgeConnector.Socket.Off("webContents-session-resolveProxy-completed" + guid); - taskCompletionSource.SetResult(proxy.ToString()); - }); - - BridgeConnector.Socket.Emit("webContents-session-resolveProxy", Id, url, guid); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultString("webContents-session-resolveProxy", Id, url); } /// @@ -311,9 +191,9 @@ public Task ResolveProxyAsync(string url) /// Downloads under the respective app folder. /// /// - public void SetDownloadPath(string path) + public async Task SetDownloadPath(string path) { - BridgeConnector.Socket.Emit("webContents-session-setDownloadPath", Id, path); + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-setDownloadPath", Id, path); } /// @@ -321,9 +201,9 @@ public void SetDownloadPath(string path) /// this session just before normal preload scripts run. /// /// - public void SetPreloads(string[] preloads) + public async Task SetPreloads(string[] preloads) { - BridgeConnector.Socket.Emit("webContents-session-setPreloads", Id, preloads); + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-setPreloads", Id, preloads); } /// @@ -332,20 +212,9 @@ public void SetPreloads(string[] preloads) /// /// /// - public Task SetProxyAsync(ProxyConfig config) + public async Task SetProxyAsync(ProxyConfig config) { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-setProxy-completed" + guid, () => - { - BridgeConnector.Socket.Off("webContents-session-setProxy-completed" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("webContents-session-setProxy", Id, JObject.FromObject(config, _jsonSerializer), guid); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("webContents-session-setProxy", Id, JObject.FromObject(config, _jsonSerializer)); } /// @@ -354,9 +223,9 @@ public Task SetProxyAsync(ProxyConfig config) /// user agent. /// /// - public void SetUserAgent(string userAgent) + public async Task SetUserAgent(string userAgent) { - BridgeConnector.Socket.Emit("webContents-session-setUserAgent", Id, userAgent); + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-setUserAgent", Id, userAgent); } /// @@ -370,9 +239,9 @@ public void SetUserAgent(string userAgent) /// The /// acceptLanguages must a comma separated ordered list of language codes, for /// example "en-US,fr,de,ko,zh-CN,ja". - public void SetUserAgent(string userAgent, string acceptLanguages) + public async Task SetUserAgent(string userAgent, string acceptLanguages) { - BridgeConnector.Socket.Emit("webContents-session-setUserAgent", Id, userAgent, acceptLanguages); + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-setUserAgent", Id, userAgent, acceptLanguages); } /// @@ -380,21 +249,10 @@ public void SetUserAgent(string userAgent, string acceptLanguages) /// Note: This API cannot be called before the ready event of the app module is emitted. /// /// - public Task GetAllExtensionsAsync() + public async Task GetAllExtensionsAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("webContents-session-getAllExtensions-completed", (extensionslist) => - { - BridgeConnector.Socket.Off("webContents-session-getAllExtensions-completed"); - var chromeExtensionInfos = ((JArray)extensionslist).ToObject(); - - taskCompletionSource.SetResult(chromeExtensionInfos); - }); - - BridgeConnector.Socket.Emit("webContents-session-getAllExtensions", Id); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJArray("webContents-session-getAllExtensions", Id); + return signalrResult.ToObject(); } /// @@ -402,9 +260,9 @@ public Task GetAllExtensionsAsync() /// Note: This API cannot be called before the ready event of the app module is emitted. /// /// Name of the Chrome extension to remove - public void RemoveExtension(string name) + public async Task RemoveExtension(string name) { - BridgeConnector.Socket.Emit("webContents-session-removeExtension", Id, name); + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-removeExtension", Id, name); } /// @@ -434,20 +292,10 @@ public void RemoveExtension(string name) /// inject content scripts into `file://` pages. This is required e.g. for loading /// devtools extensions on `file://` URLs. Defaults to false. /// - public Task LoadExtensionAsync(string path, bool allowFileAccess = false) + public async Task LoadExtensionAsync(string path, bool allowFileAccess = false) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("webContents-session-loadExtension-completed", (extension) => - { - BridgeConnector.Socket.Off("webContents-session-loadExtension-completed"); - - taskCompletionSource.SetResult(((JObject)extension).ToObject()); - }); - - BridgeConnector.Socket.Emit("webContents-session-loadExtension", Id, path, allowFileAccess); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("webContents-session-loadExtension", Id, path, allowFileAccess); + return signalrResult.ToObject(); } private JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/Shell.cs b/ElectronNET.API/Shell.cs index 71f458e4..787493f5 100644 --- a/ElectronNET.API/Shell.cs +++ b/ElectronNET.API/Shell.cs @@ -1,4 +1,5 @@ using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -40,18 +41,9 @@ internal static Shell Instance /// Show the given file in a file manager. If possible, select the file. /// /// The full path to the directory / file. - public Task ShowItemInFolderAsync(string fullPath) + public async Task ShowItemInFolderAsync(string fullPath) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("shell-showItemInFolderCompleted", () => - { - BridgeConnector.Socket.Off("shell-showItemInFolderCompleted"); - }); - - BridgeConnector.Socket.Emit("shell-showItemInFolder", fullPath); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("shell-showItemInFolder", fullPath); } /// @@ -59,20 +51,9 @@ public Task ShowItemInFolderAsync(string fullPath) /// /// The path to the directory / file. /// The error message corresponding to the failure if a failure occurred, otherwise . - public Task OpenPathAsync(string path) + public async Task OpenPathAsync(string path) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("shell-openPathCompleted", (errorMessage) => - { - BridgeConnector.Socket.Off("shell-openPathCompleted"); - - taskCompletionSource.SetResult((string) errorMessage); - }); - - BridgeConnector.Socket.Emit("shell-openPath", path); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultString("shell-openPath", path); } /// @@ -93,27 +74,16 @@ public Task OpenExternalAsync(string url) /// Max 2081 characters on windows. /// Controls the behavior of OpenExternal. /// The error message corresponding to the failure if a failure occurred, otherwise . - public Task OpenExternalAsync(string url, OpenExternalOptions options) + public async Task OpenExternalAsync(string url, OpenExternalOptions options) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("shell-openExternalCompleted", (error) => - { - BridgeConnector.Socket.Off("shell-openExternalCompleted"); - - taskCompletionSource.SetResult((string) error); - }); - if (options == null) { - BridgeConnector.Socket.Emit("shell-openExternal", url); + return await SignalrSerializeHelper.GetSignalrResultString("shell-openExternal", url); } else { - BridgeConnector.Socket.Emit("shell-openExternal", url, JObject.FromObject(options, _jsonSerializer)); + return await SignalrSerializeHelper.GetSignalrResultString("shell-openExternal", url, JObject.FromObject(options, _jsonSerializer)); } - - return taskCompletionSource.Task; } /// @@ -121,28 +91,17 @@ public Task OpenExternalAsync(string url, OpenExternalOptions options) /// /// The full path to the directory / file. /// Whether the item was successfully moved to the trash. - public Task TrashItemAsync(string fullPath) + public async Task TrashItemAsync(string fullPath) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("shell-trashItem-completed", (success) => - { - BridgeConnector.Socket.Off("shell-trashItem-completed"); - - taskCompletionSource.SetResult((bool) success); - }); - - BridgeConnector.Socket.Emit("shell-trashItem", fullPath); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("shell-trashItem", fullPath); } /// /// Play the beep sound. /// - public void Beep() + public async void Beep() { - BridgeConnector.Socket.Emit("shell-beep"); + await Electron.SignalrElectron.Clients.All.SendAsync("shell-beep"); } /// @@ -152,20 +111,9 @@ public void Beep() /// Default is /// Structure of a shortcut. /// Whether the shortcut was created successfully. - public Task WriteShortcutLinkAsync(string shortcutPath, ShortcutLinkOperation operation, ShortcutDetails options) + public async Task WriteShortcutLinkAsync(string shortcutPath, ShortcutLinkOperation operation, ShortcutDetails options) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("shell-writeShortcutLinkCompleted", (success) => - { - BridgeConnector.Socket.Off("shell-writeShortcutLinkCompleted"); - - taskCompletionSource.SetResult((bool) success); - }); - - BridgeConnector.Socket.Emit("shell-writeShortcutLink", shortcutPath, operation.GetDescription(), JObject.FromObject(options, _jsonSerializer)); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("shell-writeShortcutLink", shortcutPath, operation.GetDescription(), JObject.FromObject(options, _jsonSerializer)); } /// @@ -174,23 +122,10 @@ public Task WriteShortcutLinkAsync(string shortcutPath, ShortcutLinkOperat /// /// The path tot the shortcut. /// of the shortcut. - public Task ReadShortcutLinkAsync(string shortcutPath) + public async Task ReadShortcutLinkAsync(string shortcutPath) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("shell-readShortcutLinkCompleted", (shortcutDetails) => - { - BridgeConnector.Socket.Off("shell-readShortcutLinkCompleted"); - - var shortcutObject = shortcutDetails as JObject; - var details = shortcutObject?.ToObject(); - - taskCompletionSource.SetResult(details); - }); - - BridgeConnector.Socket.Emit("shell-readShortcutLink", shortcutPath); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("shell-readShortcutLink", shortcutPath); + return signalrResult?.ToObject(); } private readonly JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/Tray.cs b/ElectronNET.API/Tray.cs index a5aac8a1..08261115 100644 --- a/ElectronNET.API/Tray.cs +++ b/ElectronNET.API/Tray.cs @@ -1,5 +1,6 @@ using ElectronNET.API.Entities; using ElectronNET.API.Extensions; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -23,27 +24,21 @@ public event Action OnClick { if (_click == null) { - BridgeConnector.Socket.On("tray-click-event" + GetHashCode(), (result) => - { - var args = ((JArray)result).ToObject(); - var trayClickEventArgs = ((JObject)args[0]).ToObject(); - var bounds = ((JObject)args[1]).ToObject(); - _click(trayClickEventArgs, bounds); - }); - - BridgeConnector.Socket.Emit("register-tray-click", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-tray-click", GetHashCode()); } _click += value; } remove { _click -= value; - - if (_click == null) - BridgeConnector.Socket.Off("tray-click-event" + GetHashCode()); } } + public void TriggerOnClick(TrayClickEventArgs trayClickEventArgs, Rectangle rectangle) + { + _click(trayClickEventArgs, rectangle); + } + private event Action _click; /// @@ -55,27 +50,21 @@ public event Action OnRightClick { if (_rightClick == null) { - BridgeConnector.Socket.On("tray-right-click-event" + GetHashCode(), (result) => - { - var args = ((JArray)result).ToObject(); - var trayClickEventArgs = ((JObject)args[0]).ToObject(); - var bounds = ((JObject)args[1]).ToObject(); - _rightClick(trayClickEventArgs, bounds); - }); - - BridgeConnector.Socket.Emit("register-tray-right-click", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-tray-right-click", GetHashCode()); } _rightClick += value; } remove { _rightClick -= value; - - if (_rightClick == null) - BridgeConnector.Socket.Off("tray-right-click-event" + GetHashCode()); } } + public void TriggerOnRightClick(TrayClickEventArgs trayClickEventArgs, Rectangle rectangle) + { + _rightClick(trayClickEventArgs, rectangle); + } + private event Action _rightClick; /// @@ -87,27 +76,21 @@ public event Action OnDoubleClick { if (_doubleClick == null) { - BridgeConnector.Socket.On("tray-double-click-event" + GetHashCode(), (result) => - { - var args = ((JArray)result).ToObject(); - var trayClickEventArgs = ((JObject)args[0]).ToObject(); - var bounds = ((JObject)args[1]).ToObject(); - _doubleClick(trayClickEventArgs, bounds); - }); - - BridgeConnector.Socket.Emit("register-tray-double-click", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-tray-double-click", GetHashCode()); } _doubleClick += value; } remove { _doubleClick -= value; - - if (_doubleClick == null) - BridgeConnector.Socket.Off("tray-double-click-event" + GetHashCode()); } } + public void TriggerOnDoubleClick(TrayClickEventArgs trayClickEventArgs, Rectangle rectangle) + { + _doubleClick(trayClickEventArgs, rectangle); + } + private event Action _doubleClick; /// @@ -119,24 +102,21 @@ public event Action OnBalloonShow { if (_balloonShow == null) { - BridgeConnector.Socket.On("tray-balloon-show-event" + GetHashCode(), () => - { - _balloonShow(); - }); - - BridgeConnector.Socket.Emit("register-tray-balloon-show", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-tray-balloon-show", GetHashCode()); } _balloonShow += value; } remove { _balloonShow -= value; - - if (_balloonShow == null) - BridgeConnector.Socket.Off("tray-balloon-show-event" + GetHashCode()); } } + public void TriggerOnBalloonShow() + { + _balloonShow(); + } + private event Action _balloonShow; /// @@ -148,24 +128,21 @@ public event Action OnBalloonClick { if (_balloonClick == null) { - BridgeConnector.Socket.On("tray-balloon-click-event" + GetHashCode(), () => - { - _balloonClick(); - }); - - BridgeConnector.Socket.Emit("register-tray-balloon-click", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-tray-balloon-click", GetHashCode()); } _balloonClick += value; } remove { _balloonClick -= value; - - if (_balloonClick == null) - BridgeConnector.Socket.Off("tray-balloon-click-event" + GetHashCode()); } } + public void TriggerOnBalloonClick() + { + _balloonClick(); + } + private event Action _balloonClick; /// @@ -178,24 +155,21 @@ public event Action OnBalloonClosed { if (_balloonClosed == null) { - BridgeConnector.Socket.On("tray-balloon-closed-event" + GetHashCode(), () => - { - _balloonClosed(); - }); - - BridgeConnector.Socket.Emit("register-tray-balloon-closed", GetHashCode()); + Electron.SignalrElectron.Clients.All.SendAsync("register-tray-balloon-closed", GetHashCode()); } _balloonClosed += value; } remove { _balloonClosed -= value; - - if (_balloonClosed == null) - BridgeConnector.Socket.Off("tray-balloon-closed-event" + GetHashCode()); } } + public void TriggerOnBalloonClosed() + { + _balloonClosed(); + } + private event Action _balloonClosed; // TODO: Implement macOS Events @@ -248,36 +222,30 @@ public void Show(string image, MenuItem menuItem) /// /// The image. /// The menu items. - public void Show(string image, MenuItem[] menuItems) + public async Task Show(string image, MenuItem[] menuItems) { menuItems.AddMenuItemsId(); - BridgeConnector.Socket.Emit("create-tray", image, JArray.FromObject(menuItems, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("create-tray", image, JArray.FromObject(menuItems, _jsonSerializer)); + _items.Clear(); _items.AddRange(menuItems); - - BridgeConnector.Socket.Off("trayMenuItemClicked"); - BridgeConnector.Socket.On("trayMenuItemClicked", (id) => - { - MenuItem menuItem = _items.GetMenuItem(id.ToString()); - menuItem?.Click(); - }); } /// /// Shows the Traybar (empty). /// /// The image. - public void Show(string image) + public async Task Show(string image) { - BridgeConnector.Socket.Emit("create-tray", image); + await Electron.SignalrElectron.Clients.All.SendAsync("create-tray", image); } /// /// Destroys the tray icon immediately. /// - public void Destroy() + public async void Destroy() { - BridgeConnector.Socket.Emit("tray-destroy"); + await Electron.SignalrElectron.Clients.All.SendAsync("tray-destroy"); _items.Clear(); } @@ -285,65 +253,54 @@ public void Destroy() /// Sets the image associated with this tray icon. /// /// - public void SetImage(string image) + public async void SetImage(string image) { - BridgeConnector.Socket.Emit("tray-setImage", image); + await Electron.SignalrElectron.Clients.All.SendAsync("tray-setImage", image); } /// /// Sets the image associated with this tray icon when pressed on macOS. /// /// - public void SetPressedImage(string image) + public async void SetPressedImage(string image) { - BridgeConnector.Socket.Emit("tray-setPressedImage", image); + await Electron.SignalrElectron.Clients.All.SendAsync("tray-setPressedImage", image); } /// /// Sets the hover text for this tray icon. /// /// - public void SetToolTip(string toolTip) + public async void SetToolTip(string toolTip) { - BridgeConnector.Socket.Emit("tray-setToolTip", toolTip); + await Electron.SignalrElectron.Clients.All.SendAsync("tray-setToolTip", toolTip); } /// /// macOS: Sets the title displayed aside of the tray icon in the status bar. /// /// - public void SetTitle(string title) + public async void SetTitle(string title) { - BridgeConnector.Socket.Emit("tray-setTitle", title); + await Electron.SignalrElectron.Clients.All.SendAsync("tray-setTitle", title); } /// /// Windows: Displays a tray balloon. /// /// - public void DisplayBalloon(DisplayBalloonOptions options) + public async void DisplayBalloon(DisplayBalloonOptions options) { - BridgeConnector.Socket.Emit("tray-displayBalloon", JObject.FromObject(options, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("tray-displayBalloon", JObject.FromObject(options, _jsonSerializer)); } /// /// Whether the tray icon is destroyed. /// /// - public Task IsDestroyedAsync() + public async Task IsDestroyedAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("tray-isDestroyedCompleted", (isDestroyed) => - { - BridgeConnector.Socket.Off("tray-isDestroyedCompleted"); - - taskCompletionSource.SetResult((bool)isDestroyed); - }); - - BridgeConnector.Socket.Emit("tray-isDestroyed"); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultBool("tray-isDestroyed"); } private JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/WebContents.cs b/ElectronNET.API/WebContents.cs index 66800d5f..392e7aa7 100644 --- a/ElectronNET.API/WebContents.cs +++ b/ElectronNET.API/WebContents.cs @@ -1,4 +1,5 @@ using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; @@ -34,24 +35,21 @@ public event Action OnCrashed { if (_crashed == null) { - BridgeConnector.Socket.On("webContents-crashed" + Id, (killed) => - { - _crashed((bool)killed); - }); - - BridgeConnector.Socket.Emit("register-webContents-crashed", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-webContents-crashed", Id); } _crashed += value; } remove { _crashed -= value; - - if (_crashed == null) - BridgeConnector.Socket.Off("webContents-crashed" + Id); } } + public void TriggerOnCrashed(bool crashed) + { + _crashed(crashed); + } + private event Action _crashed; /// @@ -64,24 +62,21 @@ public event Action OnDidFinishLoad { if (_didFinishLoad == null) { - BridgeConnector.Socket.On("webContents-didFinishLoad" + Id, () => - { - _didFinishLoad(); - }); - - BridgeConnector.Socket.Emit("register-webContents-didFinishLoad", Id); + Electron.SignalrElectron.Clients.All.SendAsync("register-webContents-didFinishLoad", Id); } _didFinishLoad += value; } remove { _didFinishLoad -= value; - - if (_didFinishLoad == null) - BridgeConnector.Socket.Off("webContents-didFinishLoad" + Id); } } + public void TriggerOnDidFinishLoad() + { + _didFinishLoad(); + } + private event Action _didFinishLoad; internal WebContents(int id) @@ -93,38 +88,28 @@ internal WebContents(int id) /// /// Opens the devtools. /// - public void OpenDevTools() + public async void OpenDevTools() { - BridgeConnector.Socket.Emit("webContentsOpenDevTools", Id); + await Electron.SignalrElectron.Clients.All.SendAsync("webContentsOpenDevTools", Id); } /// /// Opens the devtools. /// /// - public void OpenDevTools(OpenDevToolsOptions openDevToolsOptions) + public async void OpenDevTools(OpenDevToolsOptions openDevToolsOptions) { - BridgeConnector.Socket.Emit("webContentsOpenDevTools", Id, JObject.FromObject(openDevToolsOptions, _jsonSerializer)); + await Electron.SignalrElectron.Clients.All.SendAsync("webContentsOpenDevTools", Id, JObject.FromObject(openDevToolsOptions, _jsonSerializer)); } /// /// Get system printers. /// /// printers - public Task GetPrintersAsync() + public async Task GetPrintersAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("webContents-getPrinters-completed", (printers) => - { - BridgeConnector.Socket.Off("webContents-getPrinters-completed"); - - taskCompletionSource.SetResult(((Newtonsoft.Json.Linq.JArray)printers).ToObject()); - }); - - BridgeConnector.Socket.Emit("webContents-getPrinters", Id); - - return taskCompletionSource.Task; + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJArray("webContents-getPrinters", Id); + return signalrResult.ToObject(); } /// @@ -132,26 +117,16 @@ public Task GetPrintersAsync() /// /// /// success - public Task PrintAsync(PrintOptions options = null) + public async Task PrintAsync(PrintOptions options = null) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("webContents-print-completed", (success) => - { - BridgeConnector.Socket.Off("webContents-print-completed"); - taskCompletionSource.SetResult((bool)success); - }); - - if(options == null) + if (options == null) { - BridgeConnector.Socket.Emit("webContents-print", Id, ""); + return await SignalrSerializeHelper.GetSignalrResultBool("webContents-print", Id, new JObject()); } else { - BridgeConnector.Socket.Emit("webContents-print", Id, JObject.FromObject(options, _jsonSerializer)); + return await SignalrSerializeHelper.GetSignalrResultBool("webContents-print", Id, JObject.FromObject(options, _jsonSerializer)); } - - return taskCompletionSource.Task; } /// @@ -163,26 +138,16 @@ public Task PrintAsync(PrintOptions options = null) /// /// /// success - public Task PrintToPDFAsync(string path, PrintToPDFOptions options = null) + public async Task PrintToPDFAsync(string path, PrintToPDFOptions options = null) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("webContents-printToPDF-completed", (success) => - { - BridgeConnector.Socket.Off("webContents-printToPDF-completed"); - taskCompletionSource.SetResult((bool)success); - }); - - if(options == null) + if (options == null) { - BridgeConnector.Socket.Emit("webContents-printToPDF", Id, "", path); + return await SignalrSerializeHelper.GetSignalrResultBool("webContents-printToPDF", Id, new JObject(), path); } else { - BridgeConnector.Socket.Emit("webContents-printToPDF", Id, JObject.FromObject(options, _jsonSerializer), path); + return await SignalrSerializeHelper.GetSignalrResultBool("webContents-printToPDF", Id, JObject.FromObject(options, _jsonSerializer), path); } - - return taskCompletionSource.Task; } /// @@ -190,20 +155,9 @@ public Task PrintToPDFAsync(string path, PrintToPDFOptions options = null) /// It's usefull if a web-server redirects you and you need to know where it redirects. For instance, It's useful in case of Implicit Authorization. /// /// URL of the loaded page - public Task GetUrl() + public async Task GetUrl() { - var taskCompletionSource = new TaskCompletionSource(); - - var eventString = "webContents-getUrl" + Id; - BridgeConnector.Socket.On(eventString, (url) => - { - BridgeConnector.Socket.Off(eventString); - taskCompletionSource.SetResult((string)url); - }); - - BridgeConnector.Socket.Emit("webContents-getUrl", Id); - - return taskCompletionSource.Task; + return await SignalrSerializeHelper.GetSignalrResultString("webContents-getUrl", Id); } /// @@ -236,26 +190,21 @@ public Task LoadURLAsync(string url) /// /// /// - public Task LoadURLAsync(string url, LoadURLOptions options) + public async Task LoadURLAsync(string url, LoadURLOptions options) { var taskCompletionSource = new TaskCompletionSource(); - BridgeConnector.Socket.On("webContents-loadURL-complete" + Id, () => + var signalrResult = await SignalrSerializeHelper.GetSignalrResultString("webContents-loadURL", Id, url, JObject.FromObject(options, _jsonSerializer)); + + if (String.IsNullOrEmpty(signalrResult)) { - BridgeConnector.Socket.Off("webContents-loadURL-complete" + Id); - BridgeConnector.Socket.Off("webContents-loadURL-error" + Id); taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.On("webContents-loadURL-error" + Id, (error) => + } else { - BridgeConnector.Socket.Off("webContents-loadURL-error" + Id); - taskCompletionSource.SetException(new InvalidOperationException(error.ToString())); - }); - - BridgeConnector.Socket.Emit("webContents-loadURL", Id, url, JObject.FromObject(options, _jsonSerializer)); + taskCompletionSource.SetException(new InvalidOperationException(signalrResult.ToString())); + } - return taskCompletionSource.Task; + return; } /// @@ -265,9 +214,9 @@ public Task LoadURLAsync(string url, LoadURLOptions options) /// /// Whether the webContents belong to a BrowserWindow or not (the other option is a BrowserView) /// Absolute path to the CSS file location - public void InsertCSS(bool isBrowserWindow, string path) + public async Task InsertCSS(bool isBrowserWindow, string path) { - BridgeConnector.Socket.Emit("webContents-insertCSS", Id, isBrowserWindow, path); + await Electron.SignalrElectron.Clients.All.SendAsync("webContents-insertCSS", Id, isBrowserWindow, path); } private JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.API/WebHostBuilderExtensions.cs b/ElectronNET.API/WebHostBuilderExtensions.cs index af7cf910..e5d9db37 100644 --- a/ElectronNET.API/WebHostBuilderExtensions.cs +++ b/ElectronNET.API/WebHostBuilderExtensions.cs @@ -16,19 +16,25 @@ public static class WebHostBuilderExtensions /// The builder. /// The arguments. /// - public static IWebHostBuilder UseElectron(this IWebHostBuilder builder, string[] args) + public static IWebHostBuilder UseElectron(this IWebHostBuilder builder, string[] args, string signalrPort = null) { foreach (string argument in args) { - if (argument.ToUpper().Contains("ELECTRONPORT")) + if (argument.ToUpper().Contains("ELECTRONPORT") && signalrPort == null) { BridgeSettings.SocketPort = argument.ToUpper().Replace("/ELECTRONPORT=", ""); Console.WriteLine("Use Electron Port: " + BridgeSettings.SocketPort); - } - else if (argument.ToUpper().Contains("ELECTRONWEBPORT")) + } else if(argument.ToUpper().Contains("ELECTRONWEBPORT") && signalrPort == null) { BridgeSettings.WebPort = argument.ToUpper().Replace("/ELECTRONWEBPORT=", ""); } + + if (signalrPort != null) + { + BridgeSettings.SocketPort = signalrPort; + Console.WriteLine("Use Electron Port: " + BridgeSettings.SocketPort); + BridgeSettings.WebPort = signalrPort; + } } if (HybridSupport.IsElectronActive) diff --git a/ElectronNET.API/WindowManager.cs b/ElectronNET.API/WindowManager.cs index 4ac85dab..583cd422 100644 --- a/ElectronNET.API/WindowManager.cs +++ b/ElectronNET.API/WindowManager.cs @@ -7,6 +7,9 @@ using System.Linq; using System.Runtime.InteropServices; using System.Threading.Tasks; +using ElectronNET.API.Hubs; +using Microsoft.AspNetCore.SignalR; +using System.Threading; namespace ElectronNET.API { @@ -50,7 +53,7 @@ public bool IsQuitOnWindowAllClosed get { return _isQuitOnWindowAllClosed; } set { - BridgeConnector.Socket.Emit("quit-app-window-all-closed-event", value); + Electron.SignalrElectron.Clients.All.SendAsync("quit-app-window-all-closed-event", value); _isQuitOnWindowAllClosed = value; } } @@ -90,34 +93,13 @@ public async Task CreateWindowAsync(string loadUrl = "http://loca /// The options. /// The load URL. /// - public Task CreateWindowAsync(BrowserWindowOptions options, string loadUrl = "http://localhost") + public async Task CreateWindowAsync(BrowserWindowOptions options, string loadUrl = "http://127.0.0.1:5000") { - var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + var taskCompletionSource = new TaskCompletionSource(); + HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); - BridgeConnector.Socket.On("BrowserWindowCreated", (id) => - { - BridgeConnector.Socket.Off("BrowserWindowCreated"); - - string windowId = id.ToString(); - BrowserWindow browserWindow = new BrowserWindow(int.Parse(windowId)); - _browserWindows.Add(browserWindow); - - taskCompletionSource.SetResult(browserWindow); - }); - - BridgeConnector.Socket.Off("BrowserWindowClosed"); - BridgeConnector.Socket.On("BrowserWindowClosed", (ids) => - { - var browserWindowIds = ((JArray)ids).ToObject(); - - for (int index = 0; index < _browserWindows.Count; index++) - { - if (!browserWindowIds.Contains(_browserWindows[index].Id)) - { - _browserWindows.RemoveAt(index); - } - } - }); + string browserWindowId = null; if (loadUrl.ToUpper() == "HTTP://LOCALHOST") { @@ -136,8 +118,8 @@ public Task CreateWindowAsync(BrowserWindowOptions options, strin { options.X = 0; options.Y = 0; + browserWindowId = await SignalrSerializeHelper.GetSignalrResultString("createBrowserWindow", JObject.FromObject(options, _jsonSerializer), loadUrl); - BridgeConnector.Socket.Emit("createBrowserWindow", JObject.FromObject(options, _jsonSerializer), loadUrl); } else { @@ -153,10 +135,15 @@ public Task CreateWindowAsync(BrowserWindowOptions options, strin ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore }; - BridgeConnector.Socket.Emit("createBrowserWindow", JObject.FromObject(options, ownjsonSerializer), loadUrl); + browserWindowId = await SignalrSerializeHelper.GetSignalrResultString("createBrowserWindow", JObject.FromObject(options, _jsonSerializer), loadUrl); } - return taskCompletionSource.Task; + BrowserWindow browserWindow; + browserWindow = new BrowserWindow(int.Parse(browserWindowId)); + _browserWindows.Add(browserWindow); + + + return browserWindow; } private bool isWindows10() @@ -182,30 +169,21 @@ public Task CreateBrowserViewAsync() /// /// /// - public Task CreateBrowserViewAsync(BrowserViewConstructorOptions options) + public async Task CreateBrowserViewAsync(BrowserViewConstructorOptions options) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("BrowserViewCreated", (id) => - { - BridgeConnector.Socket.Off("BrowserViewCreated"); - - string browserViewId = id.ToString(); - BrowserView browserView = new BrowserView(int.Parse(browserViewId)); - - _browserViews.Add(browserView); - - taskCompletionSource.SetResult(browserView); - }); - var ownjsonSerializer = new JsonSerializer() { ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore }; - BridgeConnector.Socket.Emit("createBrowserView", JObject.FromObject(options, ownjsonSerializer)); - return taskCompletionSource.Task; + var browserWindowResult = await SignalrSerializeHelper.GetSignalrResultString("createBrowserView", JObject.FromObject(options, ownjsonSerializer)); + + string browserViewId = browserWindowResult.ToString(); + BrowserView browserView = new BrowserView(int.Parse(browserViewId)); + + _browserViews.Add(browserView); + return browserView; } private JsonSerializer _jsonSerializer = new JsonSerializer() diff --git a/ElectronNET.Host/ElectronHostHook/connector.js b/ElectronNET.Host/ElectronHostHook/connector.js index 5e5a0e81..d9410b84 100644 --- a/ElectronNET.Host/ElectronHostHook/connector.js +++ b/ElectronNET.Host/ElectronHostHook/connector.js @@ -14,12 +14,12 @@ class Connector { try { javaScriptCode(...args, (data) => { if (data) { - this.socket.emit(`${key}Complete${id}`, data); + this.socket.invoke(`${key}Complete${id}`, data); } }); } catch (error) { - this.socket.emit(`${key}Error${id}`, `Host Hook Exception`, error); + this.socket.invoke(`${key}Error${id}`, `Host Hook Exception`, error); } }); } diff --git a/ElectronNET.Host/ElectronHostHook/connector.js.map b/ElectronNET.Host/ElectronHostHook/connector.js.map index be84b690..4322ef0d 100644 --- a/ElectronNET.Host/ElectronHostHook/connector.js.map +++ b/ElectronNET.Host/ElectronHostHook/connector.js.map @@ -1 +1 @@ -{"version":3,"file":"connector.js","sourceRoot":"","sources":["connector.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAS;IAClB,YAAoB,MAAuB;IACvC,aAAa;IACN,GAAiB;QAFR,WAAM,GAAN,MAAM,CAAiB;QAEhC,QAAG,GAAH,GAAG,CAAc;IAAI,CAAC;IAEjC,EAAE,CAAC,GAAW,EAAE,cAAwB;QACpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACnC,MAAM,EAAE,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;YAE9B,IAAI;gBACA,cAAc,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC7B,IAAI,IAAI,EAAE;wBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;qBACjD;gBACL,CAAC,CAAC,CAAC;aACN;YAAC,OAAO,KAAK,EAAE;gBACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;aACtE;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AApBD,8BAoBC"} \ No newline at end of file +{"version":3,"file":"connector.js","sourceRoot":"","sources":["connector.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAS;IAClB,YAAoB,MAAyB;IACzC,aAAa;IACN,GAAiB;QAFR,WAAM,GAAN,MAAM,CAAmB;QAElC,QAAG,GAAH,GAAG,CAAc;IAAI,CAAC;IAEjC,EAAE,CAAC,GAAW,EAAE,cAAwB;QACpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACnC,MAAM,EAAE,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;YAE9B,IAAI;gBACA,cAAc,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC7B,IAAI,IAAI,EAAE;wBACN,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;qBACnD;gBACL,CAAC,CAAC,CAAC;aACN;YAAC,OAAO,KAAK,EAAE;gBACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,QAAQ,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;aACxE;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AApBD,8BAoBC"} \ No newline at end of file diff --git a/ElectronNET.Host/ElectronHostHook/connector.ts b/ElectronNET.Host/ElectronHostHook/connector.ts index aabc182a..c8412d45 100644 --- a/ElectronNET.Host/ElectronHostHook/connector.ts +++ b/ElectronNET.Host/ElectronHostHook/connector.ts @@ -1,5 +1,5 @@ export class Connector { - constructor(private socket: SocketIO.Socket, + constructor(private socket: SignalR.Hub.Proxy, // @ts-ignore public app: Electron.App) { } @@ -10,11 +10,11 @@ export class Connector { try { javaScriptCode(...args, (data) => { if (data) { - this.socket.emit(`${key}Complete${id}`, data); + this.socket.invoke(`${key}Complete${id}`, data); } }); } catch (error) { - this.socket.emit(`${key}Error${id}`, `Host Hook Exception`, error); + this.socket.invoke(`${key}Error${id}`, `Host Hook Exception`, error); } }); } diff --git a/ElectronNET.Host/ElectronHostHook/index.js.map b/ElectronNET.Host/ElectronHostHook/index.js.map index 868dd903..b99cf581 100644 --- a/ElectronNET.Host/ElectronHostHook/index.js.map +++ b/ElectronNET.Host/ElectronHostHook/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AAExC,MAAa,WAAY,SAAQ,qBAAS;IACtC,YAAY,MAAuB,EAAS,GAAiB;QACzD,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QADqB,QAAG,GAAH,GAAG,CAAc;IAE7D,CAAC;IAED,WAAW;QACP,8CAA8C;IAClD,CAAC;CACJ;AARD,kCAQC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AAExC,MAAa,WAAY,SAAQ,qBAAS;IACtC,YAAY,MAAyB,EAAS,GAAiB;QAC3D,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QADuB,QAAG,GAAH,GAAG,CAAc;IAE/D,CAAC;IAED,WAAW;QACP,8CAA8C;IAClD,CAAC;CACJ;AARD,kCAQC"} \ No newline at end of file diff --git a/ElectronNET.Host/ElectronHostHook/index.ts b/ElectronNET.Host/ElectronHostHook/index.ts index a2e4e184..e494cc15 100644 --- a/ElectronNET.Host/ElectronHostHook/index.ts +++ b/ElectronNET.Host/ElectronHostHook/index.ts @@ -3,7 +3,7 @@ import * as Electron from "electron"; import { Connector } from "./connector"; export class HookService extends Connector { - constructor(socket: SocketIO.Socket, public app: Electron.App) { + constructor(socket: SignalR.Hub.Proxy, public app: Electron.App) { super(socket, app); } diff --git a/ElectronNET.Host/ElectronHostHook/package.json b/ElectronNET.Host/ElectronHostHook/package.json index 874b6ba6..41ff43d2 100644 --- a/ElectronNET.Host/ElectronHostHook/package.json +++ b/ElectronNET.Host/ElectronHostHook/package.json @@ -7,12 +7,15 @@ }, "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "start": "tsc -p ." }, "keywords": [], "author": "Gregor Biswanger", "license": "MIT", "devDependencies": { + "@microsoft/signalr": "^6.0.2", + "@types/signalr": "^2.2.37", "@types/socket.io": "^2.1.12", "typescript": "^4.3.5" } diff --git a/ElectronNET.Host/api/app.js b/ElectronNET.Host/api/app.js index 783b204a..5858d3f8 100644 --- a/ElectronNET.Host/api/app.js +++ b/ElectronNET.Host/api/app.js @@ -1,13 +1,13 @@ "use strict"; -let isQuitWindowAllClosed = true, electronSocket; +let isQuitWindowAllClosed = true; let appWindowAllClosedEventId; module.exports = (socket, app) => { - electronSocket = socket; // By default, quit when all windows are closed app.on('window-all-closed', () => { // On macOS it is common for applications and their menu bar // to stay active until the user quits explicitly with Cmd + Q if (process.platform !== 'darwin' && isQuitWindowAllClosed) { + socket.invoke('AppWindowAllClosed', 0); app.quit(); } else if (appWindowAllClosedEventId) { @@ -15,50 +15,50 @@ module.exports = (socket, app) => { // - OR - // If the user has indicated NOT to quit when all windows are closed, // emit the event. - electronSocket.emit('app-window-all-closed' + appWindowAllClosedEventId); + socket.invoke('AppWindowAllClosed', appWindowAllClosedEventId); } }); socket.on('quit-app-window-all-closed-event', (quit) => { isQuitWindowAllClosed = quit; }); socket.on('register-app-window-all-closed-event', (id) => { - appWindowAllClosedEventId = id; + socket.invoke('AppWindowAllClosed', id); }); socket.on('register-app-before-quit-event', (id) => { app.on('before-quit', (event) => { event.preventDefault(); - electronSocket.emit('app-before-quit' + id); + socket.invoke('AppBeforeQuit', id); }); }); socket.on('register-app-will-quit-event', (id) => { app.on('will-quit', (event) => { event.preventDefault(); - electronSocket.emit('app-will-quit' + id); + socket.invoke('AppWillQuit', id); }); }); socket.on('register-app-browser-window-blur-event', (id) => { app.on('browser-window-blur', () => { - electronSocket.emit('app-browser-window-blur' + id); + socket.invoke('AppBrowserWindowBlur', id); }); }); socket.on('register-app-browser-window-focus-event', (id) => { app.on('browser-window-focus', () => { - electronSocket.emit('app-browser-window-focus' + id); + socket.invoke('AppBrowserWindowFocus', id); }); }); socket.on('register-app-browser-window-created-event', (id) => { app.on('browser-window-created', () => { - electronSocket.emit('app-browser-window-created' + id); + socket.invoke('AppBrowserWindowCreated', id); }); }); socket.on('register-app-web-contents-created-event', (id) => { app.on('web-contents-created', () => { - electronSocket.emit('app-web-contents-created' + id); + socket.invoke('AppWebContentsCreated', id); }); }); socket.on('register-app-accessibility-support-changed-event', (id) => { app.on('accessibility-support-changed', (event, accessibilitySupportEnabled) => { - electronSocket.emit('app-accessibility-support-changed' + id, accessibilitySupportEnabled); + socket.invoke('AppAccessibilitySupportChanged', id, accessibilitySupportEnabled); }); }); socket.on('appQuit', () => { @@ -79,44 +79,44 @@ module.exports = (socket, app) => { socket.on('appShow', () => { app.show(); }); - socket.on('appGetAppPath', () => { + socket.on('appGetAppPath', (guid) => { const path = app.getAppPath(); - electronSocket.emit('appGetAppPathCompleted', path); + socket.invoke('SendClientResponseString', guid, path); }); socket.on('appSetAppLogsPath', (path) => { app.setAppLogsPath(path); }); - socket.on('appGetPath', (name) => { + socket.on('appGetPath', (guid, name) => { const path = app.getPath(name); - electronSocket.emit('appGetPathCompleted', path); + socket.invoke('SendClientResponseString', guid, path); }); socket.on('appGetFileIcon', async (path, options) => { let error = {}; if (options) { const nativeImage = await app.getFileIcon(path, options).catch((errorFileIcon) => error = errorFileIcon); - electronSocket.emit('appGetFileIconCompleted', [error, nativeImage]); + socket.invoke('appGetFileIconCompleted', [error, nativeImage]); } else { const nativeImage = await app.getFileIcon(path).catch((errorFileIcon) => error = errorFileIcon); - electronSocket.emit('appGetFileIconCompleted', [error, nativeImage]); + socket.invoke('appGetFileIconCompleted', [error, nativeImage]); } }); socket.on('appSetPath', (name, path) => { app.setPath(name, path); }); - socket.on('appGetVersion', () => { + socket.on('appGetVersion', (guid) => { const version = app.getVersion(); - electronSocket.emit('appGetVersionCompleted', version); + socket.invoke('SendClientResponseString', guid, version); }); - socket.on('appGetName', () => { - electronSocket.emit('appGetNameCompleted', app.name); + socket.on('appGetName', (guid) => { + socket.invoke('SendClientResponseString', guid, name); }); socket.on('appSetName', (name) => { app.name = name; }); - socket.on('appGetLocale', () => { + socket.on('appGetLocale', (guid) => { const locale = app.getLocale(); - electronSocket.emit('appGetLocaleCompleted', locale); + socket.invoke('SendClientResponseString', guid, locale); }); socket.on('appAddRecentDocument', (path) => { app.addRecentDocument(path); @@ -124,39 +124,39 @@ module.exports = (socket, app) => { socket.on('appClearRecentDocuments', () => { app.clearRecentDocuments(); }); - socket.on('appSetAsDefaultProtocolClient', (protocol, path, args) => { + socket.on('appSetAsDefaultProtocolClient', (guid, protocol, path, args) => { const success = app.setAsDefaultProtocolClient(protocol, path, args); - electronSocket.emit('appSetAsDefaultProtocolClientCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); }); - socket.on('appRemoveAsDefaultProtocolClient', (protocol, path, args) => { + socket.on('appRemoveAsDefaultProtocolClient', (guid, protocol, path, args) => { const success = app.removeAsDefaultProtocolClient(protocol, path, args); - electronSocket.emit('appRemoveAsDefaultProtocolClientCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); }); - socket.on('appIsDefaultProtocolClient', (protocol, path, args) => { + socket.on('appIsDefaultProtocolClient', (guid, protocol, path, args) => { const success = app.isDefaultProtocolClient(protocol, path, args); - electronSocket.emit('appIsDefaultProtocolClientCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); }); - socket.on('appSetUserTasks', (tasks) => { + socket.on('appSetUserTasks', (guid, tasks) => { const success = app.setUserTasks(tasks); - electronSocket.emit('appSetUserTasksCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); }); - socket.on('appGetJumpListSettings', () => { + socket.on('appGetJumpListSettings', (guid) => { const jumpListSettings = app.getJumpListSettings(); - electronSocket.emit('appGetJumpListSettingsCompleted', jumpListSettings); + socket.invoke('SendClientResponseJObject', guid, jumpListSettings); }); socket.on('appSetJumpList', (categories) => { app.setJumpList(categories); }); - socket.on('appRequestSingleInstanceLock', () => { + socket.on('appRequestSingleInstanceLock', (guid) => { const success = app.requestSingleInstanceLock(); - electronSocket.emit('appRequestSingleInstanceLockCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); app.on('second-instance', (event, args = [], workingDirectory = '') => { - electronSocket.emit('secondInstance', [args, workingDirectory]); + socket.invoke('SendClientResponseJArray', guid, [args, workingDirectory]); }); }); - socket.on('appHasSingleInstanceLock', () => { + socket.on('appHasSingleInstanceLock', (guid) => { const hasLock = app.hasSingleInstanceLock(); - electronSocket.emit('appHasSingleInstanceLockCompleted', hasLock); + socket.invoke('SendClientResponseBool', guid, hasLock); }); socket.on('appReleaseSingleInstanceLock', () => { app.releaseSingleInstanceLock(); @@ -164,9 +164,9 @@ module.exports = (socket, app) => { socket.on('appSetUserActivity', (type, userInfo, webpageUrl) => { app.setUserActivity(type, userInfo, webpageUrl); }); - socket.on('appGetCurrentActivityType', () => { + socket.on('appGetCurrentActivityType', (guid) => { const activityType = app.getCurrentActivityType(); - electronSocket.emit('appGetCurrentActivityTypeCompleted', activityType); + socket.invoke('SendClientResponseString', guid, activityType); }); socket.on('appInvalidateCurrentActivity', () => { app.invalidateCurrentActivity(); @@ -177,41 +177,45 @@ module.exports = (socket, app) => { socket.on('appSetAppUserModelId', (id) => { app.setAppUserModelId(id); }); - socket.on('appImportCertificate', (options) => { + socket.on('appImportCertificate', (guid, options) => { app.importCertificate(options, (result) => { - electronSocket.emit('appImportCertificateCompleted', result); + socket.invoke('SendClientResponseString', guid, result); }); }); - socket.on('appGetAppMetrics', () => { + socket.on('appGetAppMetrics', (guid) => { const processMetrics = app.getAppMetrics(); - electronSocket.emit('appGetAppMetricsCompleted', processMetrics); + socket.invoke('SendClientResponseJArray', guid, processMetrics); }); - socket.on('appGetGpuFeatureStatus', () => { + socket.on('appGetGpuFeatureStatus', (guid) => { const gpuFeatureStatus = app.getGPUFeatureStatus(); - electronSocket.emit('appGetGpuFeatureStatusCompleted', gpuFeatureStatus); + socket.invoke('SendClientResponseJObject', guid, gpuFeatureStatus); }); - socket.on('appSetBadgeCount', (count) => { + socket.on('appSetBadgeCount', (guid, count) => { const success = app.setBadgeCount(count); - electronSocket.emit('appSetBadgeCountCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); }); - socket.on('appGetBadgeCount', () => { + socket.on('appGetBadgeCount', (guid) => { const count = app.getBadgeCount(); - electronSocket.emit('appGetBadgeCountCompleted', count); + socket.invoke('SendClientResponseString', guid, count); }); - socket.on('appIsUnityRunning', () => { + socket.on('appIsUnityRunning', (guid) => { const isUnityRunning = app.isUnityRunning(); - electronSocket.emit('appIsUnityRunningCompleted', isUnityRunning); + socket.invoke('SendClientResponseBool', guid, isUnityRunning); }); - socket.on('appGetLoginItemSettings', (options) => { + socket.on('appGetLoginItemSettings', (guid) => { + const loginItemSettings = app.getLoginItemSettings(); + socket.invoke('SendClientResponseJObject', guid, loginItemSettings); + }); + socket.on('appGetLoginItemSettingsWithOptions', (guid, options) => { const loginItemSettings = app.getLoginItemSettings(options); - electronSocket.emit('appGetLoginItemSettingsCompleted', loginItemSettings); + socket.invoke('SendClientResponseJObject', guid, loginItemSettings); }); socket.on('appSetLoginItemSettings', (settings) => { app.setLoginItemSettings(settings); }); - socket.on('appIsAccessibilitySupportEnabled', () => { + socket.on('appIsAccessibilitySupportEnabled', (guid) => { const isAccessibilitySupportEnabled = app.isAccessibilitySupportEnabled(); - electronSocket.emit('appIsAccessibilitySupportEnabledCompleted', isAccessibilitySupportEnabled); + socket.invoke('SendClientResponseBool', guid, isAccessibilitySupportEnabled); }); socket.on('appSetAccessibilitySupportEnabled', (enabled) => { app.setAccessibilitySupportEnabled(enabled); @@ -222,29 +226,38 @@ module.exports = (socket, app) => { socket.on('appSetAboutPanelOptions', (options) => { app.setAboutPanelOptions(options); }); - socket.on('appGetUserAgentFallback', () => { - electronSocket.emit('appGetUserAgentFallbackCompleted', app.userAgentFallback); + socket.on('appGetUserAgentFallback', (guid) => { + socket.invoke('SendClientResponseString', guid, app.userAgentFallback); }); socket.on('appSetUserAgentFallback', (userAgent) => { app.userAgentFallback = userAgent; }); + // Testing, this is potentially dangerous + socket.on('appEval', (evalString) => { + console.log("######################"); + console.log(evalString); + console.log("######################"); + eval(evalString); + }); + //ToDo: We dont know what type we need to return here socket.on('register-app-on-event', (eventName, listenerName) => { app.on(eventName, (...args) => { + console.log(listenerName); if (args.length > 1) { - electronSocket.emit(listenerName, args[1]); + socket.invoke(listenerName, args[1]); } else { - electronSocket.emit(listenerName); + socket.invoke(listenerName); } }); }); socket.on('register-app-once-event', (eventName, listenerName) => { app.once(eventName, (...args) => { if (args.length > 1) { - electronSocket.emit(listenerName, args[1]); + socket.invoke(listenerName, args[1]); } else { - electronSocket.emit(listenerName); + socket.invoke(listenerName); } }); }); diff --git a/ElectronNET.Host/api/app.js.map b/ElectronNET.Host/api/app.js.map index 25e66972..9dd262ad 100644 --- a/ElectronNET.Host/api/app.js.map +++ b/ElectronNET.Host/api/app.js.map @@ -1 +1 @@ -{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/app.ts b/ElectronNET.Host/api/app.ts index 1f04f9f0..8d44c170 100644 --- a/ElectronNET.Host/api/app.ts +++ b/ElectronNET.Host/api/app.ts @@ -1,22 +1,21 @@ -import { Socket } from "net"; -let isQuitWindowAllClosed = true, electronSocket; +let isQuitWindowAllClosed = true; let appWindowAllClosedEventId; -export = (socket: Socket, app: Electron.App) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { // By default, quit when all windows are closed app.on('window-all-closed', () => { // On macOS it is common for applications and their menu bar // to stay active until the user quits explicitly with Cmd + Q if (process.platform !== 'darwin' && isQuitWindowAllClosed) { + socket.invoke('AppWindowAllClosed', 0); app.quit(); } else if (appWindowAllClosedEventId) { // If the user is on macOS // - OR - // If the user has indicated NOT to quit when all windows are closed, // emit the event. - electronSocket.emit('app-window-all-closed' + appWindowAllClosedEventId); + socket.invoke('AppWindowAllClosed', appWindowAllClosedEventId); } }); @@ -25,14 +24,14 @@ export = (socket: Socket, app: Electron.App) => { }); socket.on('register-app-window-all-closed-event', (id) => { - appWindowAllClosedEventId = id; + socket.invoke('AppWindowAllClosed', id); }); socket.on('register-app-before-quit-event', (id) => { app.on('before-quit', (event) => { event.preventDefault(); - electronSocket.emit('app-before-quit' + id); + socket.invoke('AppBeforeQuit', id); }); }); @@ -40,37 +39,37 @@ export = (socket: Socket, app: Electron.App) => { app.on('will-quit', (event) => { event.preventDefault(); - electronSocket.emit('app-will-quit' + id); + socket.invoke('AppWillQuit', id); }); }); socket.on('register-app-browser-window-blur-event', (id) => { app.on('browser-window-blur', () => { - electronSocket.emit('app-browser-window-blur' + id); + socket.invoke('AppBrowserWindowBlur', id); }); }); socket.on('register-app-browser-window-focus-event', (id) => { app.on('browser-window-focus', () => { - electronSocket.emit('app-browser-window-focus' + id); + socket.invoke('AppBrowserWindowFocus', id); }); }); socket.on('register-app-browser-window-created-event', (id) => { app.on('browser-window-created', () => { - electronSocket.emit('app-browser-window-created' + id); + socket.invoke('AppBrowserWindowCreated', id); }); }); socket.on('register-app-web-contents-created-event', (id) => { app.on('web-contents-created', () => { - electronSocket.emit('app-web-contents-created' + id); + socket.invoke('AppWebContentsCreated', id); }); }); socket.on('register-app-accessibility-support-changed-event', (id) => { app.on('accessibility-support-changed', (event, accessibilitySupportEnabled) => { - electronSocket.emit('app-accessibility-support-changed' + id, accessibilitySupportEnabled); + socket.invoke('AppAccessibilitySupportChanged', id, accessibilitySupportEnabled); }); }); @@ -98,18 +97,18 @@ export = (socket: Socket, app: Electron.App) => { app.show(); }); - socket.on('appGetAppPath', () => { + socket.on('appGetAppPath', (guid) => { const path = app.getAppPath(); - electronSocket.emit('appGetAppPathCompleted', path); + socket.invoke('SendClientResponseString', guid, path); }); socket.on('appSetAppLogsPath', (path) => { app.setAppLogsPath(path); }); - socket.on('appGetPath', (name) => { + socket.on('appGetPath', (guid, name) => { const path = app.getPath(name); - electronSocket.emit('appGetPathCompleted', path); + socket.invoke('SendClientResponseString', guid, path); }); socket.on('appGetFileIcon', async (path, options) => { @@ -118,11 +117,11 @@ export = (socket: Socket, app: Electron.App) => { if (options) { const nativeImage = await app.getFileIcon(path, options).catch((errorFileIcon) => error = errorFileIcon); - electronSocket.emit('appGetFileIconCompleted', [error, nativeImage]); + socket.invoke('appGetFileIconCompleted', [error, nativeImage]); } else { const nativeImage = await app.getFileIcon(path).catch((errorFileIcon) => error = errorFileIcon); - electronSocket.emit('appGetFileIconCompleted', [error, nativeImage]); + socket.invoke('appGetFileIconCompleted', [error, nativeImage]); } }); @@ -130,22 +129,22 @@ export = (socket: Socket, app: Electron.App) => { app.setPath(name, path); }); - socket.on('appGetVersion', () => { + socket.on('appGetVersion', (guid) => { const version = app.getVersion(); - electronSocket.emit('appGetVersionCompleted', version); + socket.invoke('SendClientResponseString', guid, version); }); - socket.on('appGetName', () => { - electronSocket.emit('appGetNameCompleted', app.name); + socket.on('appGetName', (guid) => { + socket.invoke('SendClientResponseString', guid, name); }); socket.on('appSetName', (name) => { app.name = name; }); - socket.on('appGetLocale', () => { + socket.on('appGetLocale', (guid) => { const locale = app.getLocale(); - electronSocket.emit('appGetLocaleCompleted', locale); + socket.invoke('SendClientResponseString', guid, locale); }); socket.on('appAddRecentDocument', (path) => { @@ -156,48 +155,48 @@ export = (socket: Socket, app: Electron.App) => { app.clearRecentDocuments(); }); - socket.on('appSetAsDefaultProtocolClient', (protocol, path, args) => { + socket.on('appSetAsDefaultProtocolClient', (guid, protocol, path, args) => { const success = app.setAsDefaultProtocolClient(protocol, path, args); - electronSocket.emit('appSetAsDefaultProtocolClientCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); }); - socket.on('appRemoveAsDefaultProtocolClient', (protocol, path, args) => { + socket.on('appRemoveAsDefaultProtocolClient', (guid, protocol, path, args) => { const success = app.removeAsDefaultProtocolClient(protocol, path, args); - electronSocket.emit('appRemoveAsDefaultProtocolClientCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); }); - socket.on('appIsDefaultProtocolClient', (protocol, path, args) => { + socket.on('appIsDefaultProtocolClient', (guid, protocol, path, args) => { const success = app.isDefaultProtocolClient(protocol, path, args); - electronSocket.emit('appIsDefaultProtocolClientCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); }); - socket.on('appSetUserTasks', (tasks) => { + socket.on('appSetUserTasks', (guid, tasks) => { const success = app.setUserTasks(tasks); - electronSocket.emit('appSetUserTasksCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); }); - socket.on('appGetJumpListSettings', () => { + socket.on('appGetJumpListSettings', (guid) => { const jumpListSettings = app.getJumpListSettings(); - electronSocket.emit('appGetJumpListSettingsCompleted', jumpListSettings); + socket.invoke('SendClientResponseJObject', guid, jumpListSettings); }); socket.on('appSetJumpList', (categories) => { app.setJumpList(categories); }); - socket.on('appRequestSingleInstanceLock', () => { + socket.on('appRequestSingleInstanceLock', (guid) => { const success = app.requestSingleInstanceLock(); - electronSocket.emit('appRequestSingleInstanceLockCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); app.on('second-instance', (event, args = [], workingDirectory = '') => { - electronSocket.emit('secondInstance', [args, workingDirectory]); + socket.invoke('SendClientResponseJArray', guid, [args, workingDirectory]); }); }); - socket.on('appHasSingleInstanceLock', () => { + socket.on('appHasSingleInstanceLock', (guid) => { const hasLock = app.hasSingleInstanceLock(); - electronSocket.emit('appHasSingleInstanceLockCompleted', hasLock); + socket.invoke('SendClientResponseBool', guid, hasLock); }); socket.on('appReleaseSingleInstanceLock', () => { @@ -208,9 +207,9 @@ export = (socket: Socket, app: Electron.App) => { app.setUserActivity(type, userInfo, webpageUrl); }); - socket.on('appGetCurrentActivityType', () => { + socket.on('appGetCurrentActivityType', (guid) => { const activityType = app.getCurrentActivityType(); - electronSocket.emit('appGetCurrentActivityTypeCompleted', activityType); + socket.invoke('SendClientResponseString', guid, activityType); }); socket.on('appInvalidateCurrentActivity', () => { @@ -225,49 +224,54 @@ export = (socket: Socket, app: Electron.App) => { app.setAppUserModelId(id); }); - socket.on('appImportCertificate', (options) => { + socket.on('appImportCertificate', (guid, options) => { app.importCertificate(options, (result) => { - electronSocket.emit('appImportCertificateCompleted', result); + socket.invoke('SendClientResponseString', guid, result); }); }); - socket.on('appGetAppMetrics', () => { + socket.on('appGetAppMetrics', (guid) => { const processMetrics = app.getAppMetrics(); - electronSocket.emit('appGetAppMetricsCompleted', processMetrics); + socket.invoke('SendClientResponseJArray', guid, processMetrics); }); - socket.on('appGetGpuFeatureStatus', () => { + socket.on('appGetGpuFeatureStatus', (guid) => { const gpuFeatureStatus = app.getGPUFeatureStatus(); - electronSocket.emit('appGetGpuFeatureStatusCompleted', gpuFeatureStatus); + socket.invoke('SendClientResponseJObject', guid, gpuFeatureStatus); }); - socket.on('appSetBadgeCount', (count) => { + socket.on('appSetBadgeCount', (guid, count) => { const success = app.setBadgeCount(count); - electronSocket.emit('appSetBadgeCountCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); }); - socket.on('appGetBadgeCount', () => { + socket.on('appGetBadgeCount', (guid) => { const count = app.getBadgeCount(); - electronSocket.emit('appGetBadgeCountCompleted', count); + socket.invoke('SendClientResponseString', guid, count); }); - socket.on('appIsUnityRunning', () => { + socket.on('appIsUnityRunning', (guid) => { const isUnityRunning = app.isUnityRunning(); - electronSocket.emit('appIsUnityRunningCompleted', isUnityRunning); + socket.invoke('SendClientResponseBool', guid, isUnityRunning); }); - socket.on('appGetLoginItemSettings', (options) => { + socket.on('appGetLoginItemSettings', (guid) => { + const loginItemSettings = app.getLoginItemSettings(); + socket.invoke('SendClientResponseJObject', guid, loginItemSettings); + }); + + socket.on('appGetLoginItemSettingsWithOptions', (guid, options) => { const loginItemSettings = app.getLoginItemSettings(options); - electronSocket.emit('appGetLoginItemSettingsCompleted', loginItemSettings); + socket.invoke('SendClientResponseJObject', guid, loginItemSettings); }); socket.on('appSetLoginItemSettings', (settings) => { app.setLoginItemSettings(settings); }); - socket.on('appIsAccessibilitySupportEnabled', () => { + socket.on('appIsAccessibilitySupportEnabled', (guid) => { const isAccessibilitySupportEnabled = app.isAccessibilitySupportEnabled(); - electronSocket.emit('appIsAccessibilitySupportEnabledCompleted', isAccessibilitySupportEnabled); + socket.invoke('SendClientResponseBool', guid, isAccessibilitySupportEnabled); }); socket.on('appSetAccessibilitySupportEnabled', (enabled) => { @@ -282,20 +286,30 @@ export = (socket: Socket, app: Electron.App) => { app.setAboutPanelOptions(options); }); - socket.on('appGetUserAgentFallback', () => { - electronSocket.emit('appGetUserAgentFallbackCompleted', app.userAgentFallback); + socket.on('appGetUserAgentFallback', (guid) => { + socket.invoke('SendClientResponseString', guid, app.userAgentFallback); }); socket.on('appSetUserAgentFallback', (userAgent) => { app.userAgentFallback = userAgent; }); + // Testing, this is potentially dangerous + socket.on('appEval', (evalString) => { + console.log("######################"); + console.log(evalString); + console.log("######################"); + eval(evalString); + }); + + //ToDo: We dont know what type we need to return here socket.on('register-app-on-event', (eventName, listenerName) => { app.on(eventName, (...args) => { + console.log(listenerName); if (args.length > 1) { - electronSocket.emit(listenerName, args[1]); + socket.invoke(listenerName, args[1]); } else { - electronSocket.emit(listenerName); + socket.invoke(listenerName); } }); }); @@ -303,9 +317,9 @@ export = (socket: Socket, app: Electron.App) => { socket.on('register-app-once-event', (eventName, listenerName) => { app.once(eventName, (...args) => { if (args.length > 1) { - electronSocket.emit(listenerName, args[1]); + socket.invoke(listenerName, args[1]); } else { - electronSocket.emit(listenerName); + socket.invoke(listenerName); } }); }); diff --git a/ElectronNET.Host/api/autoUpdater.js b/ElectronNET.Host/api/autoUpdater.js index 3ba69caa..e87027e3 100644 --- a/ElectronNET.Host/api/autoUpdater.js +++ b/ElectronNET.Host/api/autoUpdater.js @@ -1,102 +1,100 @@ "use strict"; const electron_updater_1 = require("electron-updater"); -let electronSocket; -module.exports = (socket) => { - electronSocket = socket; +module.exports = (socket, app) => { socket.on('register-autoUpdater-error-event', (id) => { electron_updater_1.autoUpdater.on('error', (error) => { - electronSocket.emit('autoUpdater-error' + id, error.message); + socket.invoke('AutoUpdaterOnError', id, error.message); }); }); socket.on('register-autoUpdater-checking-for-update-event', (id) => { electron_updater_1.autoUpdater.on('checking-for-update', () => { - electronSocket.emit('autoUpdater-checking-for-update' + id); + socket.invoke('AutoUpdaterOnCheckingForUpdate', id); }); }); socket.on('register-autoUpdater-update-available-event', (id) => { electron_updater_1.autoUpdater.on('update-available', (updateInfo) => { - electronSocket.emit('autoUpdater-update-available' + id, updateInfo); + socket.invoke('AutoUpdaterOnUpdateAvailable', id, updateInfo); }); }); socket.on('register-autoUpdater-update-not-available-event', (id) => { electron_updater_1.autoUpdater.on('update-not-available', (updateInfo) => { - electronSocket.emit('autoUpdater-update-not-available' + id, updateInfo); + socket.invoke('AutoUpdaterOnUpdateNotAvailable', id, updateInfo); }); }); socket.on('register-autoUpdater-download-progress-event', (id) => { electron_updater_1.autoUpdater.on('download-progress', (progressInfo) => { - electronSocket.emit('autoUpdater-download-progress' + id, progressInfo); + socket.invoke('AutoUpdaterOnDownloadProgress', id, progressInfo); }); }); socket.on('register-autoUpdater-update-downloaded-event', (id) => { electron_updater_1.autoUpdater.on('update-downloaded', (updateInfo) => { - electronSocket.emit('autoUpdater-update-downloaded' + id, updateInfo); + socket.invoke('AutoUpdaterOnUpdateDownloaded', id, updateInfo); }); }); // Properties ***** - socket.on('autoUpdater-autoDownload-get', () => { - electronSocket.emit('autoUpdater-autoDownload-get-reply', electron_updater_1.autoUpdater.autoDownload); + socket.on('autoUpdater-autoDownload-get', (guid) => { + socket.invoke('SendClientResponseBool', guid, electron_updater_1.autoUpdater.autoDownload); }); socket.on('autoUpdater-autoDownload-set', (value) => { electron_updater_1.autoUpdater.autoDownload = value; }); - socket.on('autoUpdater-autoInstallOnAppQuit-get', () => { - electronSocket.emit('autoUpdater-autoInstallOnAppQuit-get-reply', electron_updater_1.autoUpdater.autoInstallOnAppQuit); + socket.on('autoUpdater-autoInstallOnAppQuit-get', (guid) => { + socket.invoke('SendClientResponseBool', guid, electron_updater_1.autoUpdater.autoInstallOnAppQuit); }); socket.on('autoUpdater-autoInstallOnAppQuit-set', (value) => { electron_updater_1.autoUpdater.autoInstallOnAppQuit = value; }); - socket.on('autoUpdater-allowPrerelease-get', () => { - electronSocket.emit('autoUpdater-allowPrerelease-get-reply', electron_updater_1.autoUpdater.allowPrerelease); + socket.on('autoUpdater-allowPrerelease-get', (guid) => { + socket.invoke('SendClientResponseBool', guid, electron_updater_1.autoUpdater.allowPrerelease); }); socket.on('autoUpdater-allowPrerelease-set', (value) => { electron_updater_1.autoUpdater.allowPrerelease = value; }); - socket.on('autoUpdater-fullChangelog-get', () => { - electronSocket.emit('autoUpdater-fullChangelog-get-reply', electron_updater_1.autoUpdater.fullChangelog); + socket.on('autoUpdater-fullChangelog-get', (guid) => { + socket.invoke('SendClientResponseBool', guid, electron_updater_1.autoUpdater.fullChangelog); }); socket.on('autoUpdater-fullChangelog-set', (value) => { electron_updater_1.autoUpdater.fullChangelog = value; }); - socket.on('autoUpdater-allowDowngrade-get', () => { - electronSocket.emit('autoUpdater-allowDowngrade-get-reply', electron_updater_1.autoUpdater.allowDowngrade); + socket.on('autoUpdater-allowDowngrade-get', (guid) => { + socket.invoke('SendClientResponseBool', guid, electron_updater_1.autoUpdater.allowDowngrade); }); socket.on('autoUpdater-allowDowngrade-set', (value) => { electron_updater_1.autoUpdater.allowDowngrade = value; }); - socket.on('autoUpdater-updateConfigPath-get', () => { - electronSocket.emit('autoUpdater-updateConfigPath-get-reply', electron_updater_1.autoUpdater.updateConfigPath || ''); + socket.on('autoUpdater-updateConfigPath-get', (guid) => { + socket.invoke('SendClientResponseString', guid, electron_updater_1.autoUpdater.updateConfigPath || ''); }); socket.on('autoUpdater-updateConfigPath-set', (value) => { electron_updater_1.autoUpdater.updateConfigPath = value; }); - socket.on('autoUpdater-currentVersion-get', () => { - electronSocket.emit('autoUpdater-currentVersion-get-reply', electron_updater_1.autoUpdater.currentVersion); + socket.on('autoUpdater-currentVersion-get', (guid) => { + socket.invoke('SendClientResponseJObject', guid, electron_updater_1.autoUpdater.currentVersion); }); - socket.on('autoUpdater-channel-get', () => { - electronSocket.emit('autoUpdater-channel-get-reply', electron_updater_1.autoUpdater.channel || ''); + socket.on('autoUpdater-channel-get', (guid) => { + socket.invoke('SendClientResponseString', guid, electron_updater_1.autoUpdater.channel || ''); }); socket.on('autoUpdater-channel-set', (value) => { electron_updater_1.autoUpdater.channel = value; }); socket.on('autoUpdater-requestHeaders-get', () => { - electronSocket.emit('autoUpdater-requestHeaders-get-reply', electron_updater_1.autoUpdater.requestHeaders); + socket.invoke('SendClientResponseJObject', electron_updater_1.autoUpdater.requestHeaders); }); socket.on('autoUpdater-requestHeaders-set', (value) => { electron_updater_1.autoUpdater.requestHeaders = value; }); socket.on('autoUpdaterCheckForUpdatesAndNotify', async (guid) => { electron_updater_1.autoUpdater.checkForUpdatesAndNotify().then((updateCheckResult) => { - electronSocket.emit('autoUpdaterCheckForUpdatesAndNotifyComplete' + guid, updateCheckResult); + socket.invoke('SendClientResponseJObject', guid, updateCheckResult); }).catch((error) => { - electronSocket.emit('autoUpdaterCheckForUpdatesAndNotifyError' + guid, error); + socket.invoke('SendClientResponseJObject', guid, error); }); }); socket.on('autoUpdaterCheckForUpdates', async (guid) => { electron_updater_1.autoUpdater.checkForUpdates().then((updateCheckResult) => { - electronSocket.emit('autoUpdaterCheckForUpdatesComplete' + guid, updateCheckResult); + socket.invoke('SendClientResponseJObject', guid, updateCheckResult); }).catch((error) => { - electronSocket.emit('autoUpdaterCheckForUpdatesError' + guid, error); + socket.invoke('SendClientResponseJObject', guid, error); }); }); socket.on('autoUpdaterQuitAndInstall', async (isSilent, isForceRunAfter) => { @@ -104,11 +102,11 @@ module.exports = (socket) => { }); socket.on('autoUpdaterDownloadUpdate', async (guid) => { const downloadedPath = await electron_updater_1.autoUpdater.downloadUpdate(); - electronSocket.emit('autoUpdaterDownloadUpdateComplete' + guid, downloadedPath); + socket.invoke('SendClientResponseString', guid, downloadedPath); }); socket.on('autoUpdaterGetFeedURL', async (guid) => { const feedUrl = await electron_updater_1.autoUpdater.getFeedURL(); - electronSocket.emit('autoUpdaterGetFeedURLComplete' + guid, feedUrl || ''); + socket.invoke('SendClientResponseString', guid, feedUrl || ''); }); }; //# sourceMappingURL=autoUpdater.js.map \ No newline at end of file diff --git a/ElectronNET.Host/api/autoUpdater.js.map b/ElectronNET.Host/api/autoUpdater.js.map index 3e9bdd2c..d1228984 100644 --- a/ElectronNET.Host/api/autoUpdater.js.map +++ b/ElectronNET.Host/api/autoUpdater.js.map @@ -1 +1 @@ -{"version":3,"file":"autoUpdater.js","sourceRoot":"","sources":["autoUpdater.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"autoUpdater.js","sourceRoot":"","sources":["autoUpdater.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/autoUpdater.ts b/ElectronNET.Host/api/autoUpdater.ts index f72c5d18..bfbb43b0 100644 --- a/ElectronNET.Host/api/autoUpdater.ts +++ b/ElectronNET.Host/api/autoUpdater.ts @@ -1,102 +1,100 @@ import { Socket } from 'net'; import { autoUpdater } from 'electron-updater'; -let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { socket.on('register-autoUpdater-error-event', (id) => { autoUpdater.on('error', (error) => { - electronSocket.emit('autoUpdater-error' + id, error.message); + socket.invoke('AutoUpdaterOnError', id, error.message); }); }); socket.on('register-autoUpdater-checking-for-update-event', (id) => { autoUpdater.on('checking-for-update', () => { - electronSocket.emit('autoUpdater-checking-for-update' + id); + socket.invoke('AutoUpdaterOnCheckingForUpdate', id); }); }); socket.on('register-autoUpdater-update-available-event', (id) => { autoUpdater.on('update-available', (updateInfo) => { - electronSocket.emit('autoUpdater-update-available' + id, updateInfo); + socket.invoke('AutoUpdaterOnUpdateAvailable', id, updateInfo); }); }); socket.on('register-autoUpdater-update-not-available-event', (id) => { autoUpdater.on('update-not-available', (updateInfo) => { - electronSocket.emit('autoUpdater-update-not-available' + id, updateInfo); + socket.invoke('AutoUpdaterOnUpdateNotAvailable', id, updateInfo); }); }); socket.on('register-autoUpdater-download-progress-event', (id) => { autoUpdater.on('download-progress', (progressInfo) => { - electronSocket.emit('autoUpdater-download-progress' + id, progressInfo); + socket.invoke('AutoUpdaterOnDownloadProgress', id, progressInfo); }); }); socket.on('register-autoUpdater-update-downloaded-event', (id) => { autoUpdater.on('update-downloaded', (updateInfo) => { - electronSocket.emit('autoUpdater-update-downloaded' + id, updateInfo); + socket.invoke('AutoUpdaterOnUpdateDownloaded', id, updateInfo); }); }); // Properties ***** - socket.on('autoUpdater-autoDownload-get', () => { - electronSocket.emit('autoUpdater-autoDownload-get-reply', autoUpdater.autoDownload); + socket.on('autoUpdater-autoDownload-get', (guid) => { + socket.invoke('SendClientResponseBool', guid, autoUpdater.autoDownload); }); socket.on('autoUpdater-autoDownload-set', (value) => { autoUpdater.autoDownload = value; }); - socket.on('autoUpdater-autoInstallOnAppQuit-get', () => { - electronSocket.emit('autoUpdater-autoInstallOnAppQuit-get-reply', autoUpdater.autoInstallOnAppQuit); + socket.on('autoUpdater-autoInstallOnAppQuit-get', (guid) => { + socket.invoke('SendClientResponseBool', guid, autoUpdater.autoInstallOnAppQuit); }); socket.on('autoUpdater-autoInstallOnAppQuit-set', (value) => { autoUpdater.autoInstallOnAppQuit = value; }); - socket.on('autoUpdater-allowPrerelease-get', () => { - electronSocket.emit('autoUpdater-allowPrerelease-get-reply', autoUpdater.allowPrerelease); + socket.on('autoUpdater-allowPrerelease-get', (guid) => { + socket.invoke('SendClientResponseBool', guid, autoUpdater.allowPrerelease); }); socket.on('autoUpdater-allowPrerelease-set', (value) => { autoUpdater.allowPrerelease = value; }); - socket.on('autoUpdater-fullChangelog-get', () => { - electronSocket.emit('autoUpdater-fullChangelog-get-reply', autoUpdater.fullChangelog); + socket.on('autoUpdater-fullChangelog-get', (guid) => { + socket.invoke('SendClientResponseBool', guid, autoUpdater.fullChangelog); }); socket.on('autoUpdater-fullChangelog-set', (value) => { autoUpdater.fullChangelog = value; }); - socket.on('autoUpdater-allowDowngrade-get', () => { - electronSocket.emit('autoUpdater-allowDowngrade-get-reply', autoUpdater.allowDowngrade); + socket.on('autoUpdater-allowDowngrade-get', (guid) => { + socket.invoke('SendClientResponseBool', guid, autoUpdater.allowDowngrade); }); socket.on('autoUpdater-allowDowngrade-set', (value) => { autoUpdater.allowDowngrade = value; }); - socket.on('autoUpdater-updateConfigPath-get', () => { - electronSocket.emit('autoUpdater-updateConfigPath-get-reply', autoUpdater.updateConfigPath || ''); + socket.on('autoUpdater-updateConfigPath-get', (guid) => { + socket.invoke('SendClientResponseString', guid, autoUpdater.updateConfigPath || ''); }); socket.on('autoUpdater-updateConfigPath-set', (value) => { autoUpdater.updateConfigPath = value; }); - socket.on('autoUpdater-currentVersion-get', () => { - electronSocket.emit('autoUpdater-currentVersion-get-reply', autoUpdater.currentVersion); + socket.on('autoUpdater-currentVersion-get', (guid) => { + socket.invoke('SendClientResponseJObject', guid, autoUpdater.currentVersion); }); - socket.on('autoUpdater-channel-get', () => { - electronSocket.emit('autoUpdater-channel-get-reply', autoUpdater.channel || ''); + socket.on('autoUpdater-channel-get', (guid) => { + socket.invoke('SendClientResponseString', guid, autoUpdater.channel || ''); }); socket.on('autoUpdater-channel-set', (value) => { @@ -104,7 +102,7 @@ export = (socket: Socket) => { }); socket.on('autoUpdater-requestHeaders-get', () => { - electronSocket.emit('autoUpdater-requestHeaders-get-reply', autoUpdater.requestHeaders); + socket.invoke('SendClientResponseJObject', autoUpdater.requestHeaders); }); socket.on('autoUpdater-requestHeaders-set', (value) => { @@ -113,17 +111,17 @@ export = (socket: Socket) => { socket.on('autoUpdaterCheckForUpdatesAndNotify', async (guid) => { autoUpdater.checkForUpdatesAndNotify().then((updateCheckResult) => { - electronSocket.emit('autoUpdaterCheckForUpdatesAndNotifyComplete' + guid, updateCheckResult); + socket.invoke('SendClientResponseJObject', guid, updateCheckResult); }).catch((error) => { - electronSocket.emit('autoUpdaterCheckForUpdatesAndNotifyError' + guid, error); + socket.invoke('SendClientResponseJObject', guid, error); }); }); socket.on('autoUpdaterCheckForUpdates', async (guid) => { autoUpdater.checkForUpdates().then((updateCheckResult) => { - electronSocket.emit('autoUpdaterCheckForUpdatesComplete' + guid, updateCheckResult); + socket.invoke('SendClientResponseJObject', guid, updateCheckResult); }).catch((error) => { - electronSocket.emit('autoUpdaterCheckForUpdatesError' + guid, error); + socket.invoke('SendClientResponseJObject', guid, error); }); }); @@ -133,11 +131,11 @@ export = (socket: Socket) => { socket.on('autoUpdaterDownloadUpdate', async (guid) => { const downloadedPath = await autoUpdater.downloadUpdate(); - electronSocket.emit('autoUpdaterDownloadUpdateComplete' + guid, downloadedPath); + socket.invoke('SendClientResponseString', guid, downloadedPath); }); socket.on('autoUpdaterGetFeedURL', async (guid) => { const feedUrl = await autoUpdater.getFeedURL(); - electronSocket.emit('autoUpdaterGetFeedURLComplete' + guid, feedUrl || ''); + socket.invoke('SendClientResponseString', guid, feedUrl || ''); }); }; diff --git a/ElectronNET.Host/api/browserView.js b/ElectronNET.Host/api/browserView.js index 17e01897..182f17b9 100644 --- a/ElectronNET.Host/api/browserView.js +++ b/ElectronNET.Host/api/browserView.js @@ -3,11 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.browserViewMediateService = exports.browserViewApi = void 0; const electron_1 = require("electron"); const browserViews = (global['browserViews'] = global['browserViews'] || []); -let browserView, electronSocket; +let browserView; const proxyToCredentialsMap = (global['proxyToCredentialsMap'] = global['proxyToCredentialsMap'] || []); const browserViewApi = (socket) => { - electronSocket = socket; - socket.on('createBrowserView', (options) => { + socket.on('createBrowserView', (guid, options) => { if (!hasOwnChildreen(options, 'webPreferences', 'nodeIntegration')) { options = { ...options, webPreferences: { nodeIntegration: true, contextIsolation: false } }; } @@ -20,11 +19,11 @@ const browserViewApi = (socket) => { proxyToCredentialsMap[options.proxy] = options.proxyCredentials; } browserViews.push(browserView); - electronSocket.emit('BrowserViewCreated', browserView['id']); + socket.invoke('SendClientResponseString', guid, browserView['id']); }); - socket.on('browserView-getBounds', (id) => { + socket.on('browserView-getBounds', (guid, id) => { const bounds = getBrowserViewById(id).getBounds(); - electronSocket.emit('browserView-getBounds-reply', bounds); + socket.invoke('SendClientResponseJObject', guid, bounds); }); socket.on('browserView-setBounds', (id, bounds) => { getBrowserViewById(id).setBounds(bounds); diff --git a/ElectronNET.Host/api/browserView.js.map b/ElectronNET.Host/api/browserView.js.map index 596b53ab..d58ebb18 100644 --- a/ElectronNET.Host/api/browserView.js.map +++ b/ElectronNET.Host/api/browserView.js.map @@ -1 +1 @@ -{"version":3,"file":"browserView.js","sourceRoot":"","sources":["browserView.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browserView.js","sourceRoot":"","sources":["browserView.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/browserView.ts b/ElectronNET.Host/api/browserView.ts index 5d7a314b..c28e85ae 100644 --- a/ElectronNET.Host/api/browserView.ts +++ b/ElectronNET.Host/api/browserView.ts @@ -1,13 +1,11 @@ -import { Socket } from 'net'; import { BrowserView } from 'electron'; const browserViews: BrowserView[] = (global['browserViews'] = global['browserViews'] || []) as BrowserView[]; -let browserView: BrowserView, electronSocket; +let browserView: BrowserView; const proxyToCredentialsMap: { [proxy: string]: string } = (global['proxyToCredentialsMap'] = global['proxyToCredentialsMap'] || []) as { [proxy: string]: string }; -const browserViewApi = (socket: Socket) => { - electronSocket = socket; +const browserViewApi = (socket: SignalR.Hub.Proxy) => { - socket.on('createBrowserView', (options) => { + socket.on('createBrowserView', (guid, options) => { if (!hasOwnChildreen(options, 'webPreferences', 'nodeIntegration')) { options = { ...options, webPreferences: { nodeIntegration: true, contextIsolation: false } }; } @@ -25,13 +23,12 @@ const browserViewApi = (socket: Socket) => { browserViews.push(browserView); - electronSocket.emit('BrowserViewCreated', browserView['id']); + socket.invoke('SendClientResponseString', guid, browserView['id']); }); - socket.on('browserView-getBounds', (id) => { + socket.on('browserView-getBounds', (guid, id) => { const bounds = getBrowserViewById(id).getBounds(); - - electronSocket.emit('browserView-getBounds-reply', bounds); + socket.invoke('SendClientResponseJObject', guid, bounds); }); socket.on('browserView-setBounds', (id, bounds) => { diff --git a/ElectronNET.Host/api/browserWindows.js b/ElectronNET.Host/api/browserWindows.js index e2513868..06a76b3f 100644 --- a/ElectronNET.Host/api/browserWindows.js +++ b/ElectronNET.Host/api/browserWindows.js @@ -4,11 +4,10 @@ const browserView_1 = require("./browserView"); const path = require('path'); const windows = (global['browserWindows'] = global['browserWindows'] || []); let readyToShowWindowsIds = []; -let window, lastOptions, electronSocket; +let window, lastOptions; let mainWindowURL; const proxyToCredentialsMap = (global['proxyToCredentialsMap'] = global['proxyToCredentialsMap'] || []); module.exports = (socket, app) => { - electronSocket = socket; app.on('login', (event, webContents, request, authInfo, callback) => { if (authInfo.isProxy) { let proxy = `${authInfo.host}:${authInfo.port}`; @@ -23,159 +22,162 @@ module.exports = (socket, app) => { socket.on('register-browserWindow-ready-to-show', (id) => { if (readyToShowWindowsIds.includes(id)) { readyToShowWindowsIds = readyToShowWindowsIds.filter(value => value !== id); - electronSocket.emit('browserWindow-ready-to-show' + id); + socket.invoke('browserWindow-ready-to-show' + id); } getWindowById(id).on('ready-to-show', () => { readyToShowWindowsIds.push(id); - electronSocket.emit('browserWindow-ready-to-show' + id); + socket.invoke('BrowserWindowReadyToShow', id); }); }); socket.on('register-browserWindow-page-title-updated', (id) => { getWindowById(id).on('page-title-updated', (event, title) => { - electronSocket.emit('browserWindow-page-title-updated' + id, title); + socket.invoke('BrowserWindowPageTitleUpdated', id, title); }); }); socket.on('register-browserWindow-close', (id) => { getWindowById(id).on('close', () => { - electronSocket.emit('browserWindow-close' + id); + socket.invoke('BrowserWindowClose', id); }); }); socket.on('register-browserWindow-closed', (id) => { getWindowById(id).on('closed', () => { - electronSocket.emit('browserWindow-closed' + id); + console.log(id); + socket.invoke('BrowserWindowClosed', id); }); }); socket.on('register-browserWindow-session-end', (id) => { getWindowById(id).on('session-end', () => { - electronSocket.emit('browserWindow-session-end' + id); + socket.invoke('BrowserWindowSessionEnd', id); }); }); socket.on('register-browserWindow-unresponsive', (id) => { getWindowById(id).on('unresponsive', () => { - electronSocket.emit('browserWindow-unresponsive' + id); + socket.invoke('BrowserWindowUnresponsive', id); }); }); socket.on('register-browserWindow-responsive', (id) => { getWindowById(id).on('responsive', () => { - electronSocket.emit('browserWindow-responsive' + id); + socket.invoke('BrowserWindowResponsive', id); }); }); + //Testing socket.on('register-browserWindow-blur', (id) => { getWindowById(id).on('blur', () => { - electronSocket.emit('browserWindow-blur' + id); + console.log("BLUR"); + socket.invoke('BrowserWindowBlur', id); }); }); socket.on('register-browserWindow-focus', (id) => { getWindowById(id).on('focus', () => { - electronSocket.emit('browserWindow-focus' + id); + socket.invoke('BrowserWindowFocus', id); }); }); socket.on('register-browserWindow-show', (id) => { getWindowById(id).on('show', () => { - electronSocket.emit('browserWindow-show' + id); + socket.invoke('BrowserWindowShow', id); }); }); socket.on('register-browserWindow-hide', (id) => { getWindowById(id).on('hide', () => { - electronSocket.emit('browserWindow-hide' + id); + socket.invoke('BrowserWindowHide', id); }); }); socket.on('register-browserWindow-maximize', (id) => { getWindowById(id).on('maximize', () => { - electronSocket.emit('browserWindow-maximize' + id); + socket.invoke('BrowserWindowMaximize', id); }); }); socket.on('register-browserWindow-unmaximize', (id) => { getWindowById(id).on('unmaximize', () => { - electronSocket.emit('browserWindow-unmaximize' + id); + socket.invoke('BrowserWindowUnmaximize', id); }); }); socket.on('register-browserWindow-minimize', (id) => { getWindowById(id).on('minimize', () => { - electronSocket.emit('browserWindow-minimize' + id); + socket.invoke('BrowserWindowMinimize', id); }); }); socket.on('register-browserWindow-restore', (id) => { getWindowById(id).on('restore', () => { - electronSocket.emit('browserWindow-restore' + id); + socket.invoke('BrowserWindowRestore', id); }); }); socket.on('register-browserWindow-resize', (id) => { getWindowById(id).on('resize', () => { - electronSocket.emit('browserWindow-resize' + id); + socket.invoke('BrowserWindowResize', id); }); }); socket.on('register-browserWindow-move', (id) => { getWindowById(id).on('move', () => { - electronSocket.emit('browserWindow-move' + id); + socket.invoke('BrowserWindowMove', id); }); }); socket.on('register-browserWindow-moved', (id) => { getWindowById(id).on('moved', () => { - electronSocket.emit('browserWindow-moved' + id); + socket.invoke('BrowserWindowMoved', id); }); }); socket.on('register-browserWindow-enter-full-screen', (id) => { getWindowById(id).on('enter-full-screen', () => { - electronSocket.emit('browserWindow-enter-full-screen' + id); + socket.invoke('BrowserWindowEnterFullScreen', id); }); }); socket.on('register-browserWindow-leave-full-screen', (id) => { getWindowById(id).on('leave-full-screen', () => { - electronSocket.emit('browserWindow-leave-full-screen' + id); + socket.invoke('BrowserWindowLeaveFullScreen', id); }); }); socket.on('register-browserWindow-enter-html-full-screen', (id) => { getWindowById(id).on('enter-html-full-screen', () => { - electronSocket.emit('browserWindow-enter-html-full-screen' + id); + socket.invoke('BrowserWindowEnterHtmlFullScreen', id); }); }); socket.on('register-browserWindow-leave-html-full-screen', (id) => { getWindowById(id).on('leave-html-full-screen', () => { - electronSocket.emit('browserWindow-leave-html-full-screen' + id); + socket.invoke('BrowserWindowLeaveHtmlFullScreen', id); }); }); socket.on('register-browserWindow-app-command', (id) => { getWindowById(id).on('app-command', (event, command) => { - electronSocket.emit('browserWindow-app-command' + id, command); + socket.invoke('BrowserWindowAppCommand', id, command); }); }); socket.on('register-browserWindow-scroll-touch-begin', (id) => { getWindowById(id).on('scroll-touch-begin', () => { - electronSocket.emit('browserWindow-scroll-touch-begin' + id); + socket.invoke('BrowserWindowScrollTouchBegin', id); }); }); socket.on('register-browserWindow-scroll-touch-end', (id) => { getWindowById(id).on('scroll-touch-end', () => { - electronSocket.emit('browserWindow-scroll-touch-end' + id); + socket.invoke('BrowserWindowScrollTouchEnd', id); }); }); socket.on('register-browserWindow-scroll-touch-edge', (id) => { getWindowById(id).on('scroll-touch-edge', () => { - electronSocket.emit('browserWindow-scroll-touch-edge' + id); + socket.invoke('BrowserWindowScrollTouchEdge', id); }); }); socket.on('register-browserWindow-swipe', (id) => { getWindowById(id).on('swipe', (event, direction) => { - electronSocket.emit('browserWindow-swipe' + id, direction); + socket.invoke('BrowserWindowSwipe', id, direction); }); }); socket.on('register-browserWindow-sheet-begin', (id) => { getWindowById(id).on('sheet-begin', () => { - electronSocket.emit('browserWindow-sheet-begin' + id); + socket.invoke('BrowserWindowSheetBegin', id); }); }); socket.on('register-browserWindow-sheet-end', (id) => { getWindowById(id).on('sheet-end', () => { - electronSocket.emit('browserWindow-sheet-end' + id); + socket.invoke('BrowserWindowSheetEnd', id); }); }); socket.on('register-browserWindow-new-window-for-tab', (id) => { getWindowById(id).on('new-window-for-tab', () => { - electronSocket.emit('browserWindow-new-window-for-tab' + id); + socket.invoke('BrowserWindowNewWindowForTab', id); }); }); - socket.on('createBrowserWindow', (options, loadUrl) => { + socket.on('createBrowserWindow', (guid, options, loadUrl) => { if (options.webPreferences && !('nodeIntegration' in options.webPreferences)) { options = { ...options, webPreferences: { ...options.webPreferences, nodeIntegration: true, contextIsolation: false } }; } @@ -188,7 +190,7 @@ module.exports = (socket, app) => { if (window) { window.reload(); windows.push(window); - electronSocket.emit('BrowserWindowCreated', window.id); + socket.invoke('SendClientResponseString', guid, window.id); return; } } @@ -221,7 +223,9 @@ module.exports = (socket, app) => { windows.splice(index, 1); const ids = []; windows.forEach(x => ids.push(x.id)); - electronSocket.emit('BrowserWindowClosed', ids); + console.log("------------------------------------"); + console.log(ids); + socket.invoke('BrowserWindowsClosed', ids); } } } @@ -247,7 +251,7 @@ module.exports = (socket, app) => { app['mainWindow'] = window; } windows.push(window); - electronSocket.emit('BrowserWindowCreated', window.id); + socket.invoke('SendClientResponseString', guid, window.id); }); socket.on('browserWindowDestroy', (id) => { getWindowById(id).destroy(); @@ -261,13 +265,13 @@ module.exports = (socket, app) => { socket.on('browserWindowBlur', (id) => { getWindowById(id).blur(); }); - socket.on('browserWindowIsFocused', (id) => { + socket.on('browserWindowIsFocused', (guid, id) => { const isFocused = getWindowById(id).isFocused(); - electronSocket.emit('browserWindow-isFocused-completed', isFocused); + socket.invoke('SendClientResponseBool', guid, isFocused); }); - socket.on('browserWindowIsDestroyed', (id) => { + socket.on('browserWindowIsDestroyed', (guid, id) => { const isDestroyed = getWindowById(id).isDestroyed(); - electronSocket.emit('browserWindow-isDestroyed-completed', isDestroyed); + socket.invoke('SendClientResponseBool', guid, isDestroyed); }); socket.on('browserWindowShow', (id) => { getWindowById(id).show(); @@ -278,13 +282,13 @@ module.exports = (socket, app) => { socket.on('browserWindowHide', (id) => { getWindowById(id).hide(); }); - socket.on('browserWindowIsVisible', (id) => { + socket.on('browserWindowIsVisible', (guid, id) => { const isVisible = getWindowById(id).isVisible(); - electronSocket.emit('browserWindow-isVisible-completed', isVisible); + socket.invoke('SendClientResponseBool', guid, isVisible); }); - socket.on('browserWindowIsModal', (id) => { + socket.on('browserWindowIsModal', (guid, id) => { const isModal = getWindowById(id).isModal(); - electronSocket.emit('browserWindow-isModal-completed', isModal); + socket.invoke('SendClientResponseBool', guid, isModal); }); socket.on('browserWindowMaximize', (id) => { getWindowById(id).maximize(); @@ -292,9 +296,9 @@ module.exports = (socket, app) => { socket.on('browserWindowUnmaximize', (id) => { getWindowById(id).unmaximize(); }); - socket.on('browserWindowIsMaximized', (id) => { + socket.on('browserWindowIsMaximized', (guid, id) => { const isMaximized = getWindowById(id).isMaximized(); - electronSocket.emit('browserWindow-isMaximized-completed', isMaximized); + socket.invoke('SendClientResponseBool', guid, isMaximized); }); socket.on('browserWindowMinimize', (id) => { getWindowById(id).minimize(); @@ -302,16 +306,16 @@ module.exports = (socket, app) => { socket.on('browserWindowRestore', (id) => { getWindowById(id).restore(); }); - socket.on('browserWindowIsMinimized', (id) => { + socket.on('browserWindowIsMinimized', (guid, id) => { const isMinimized = getWindowById(id).isMinimized(); - electronSocket.emit('browserWindow-isMinimized-completed', isMinimized); + socket.invoke('SendClientResponseBool', guid, isMinimized); }); socket.on('browserWindowSetFullScreen', (id, fullscreen) => { getWindowById(id).setFullScreen(fullscreen); }); - socket.on('browserWindowIsFullScreen', (id) => { + socket.on('browserWindowIsFullScreen', (guid, id) => { const isFullScreen = getWindowById(id).isFullScreen(); - electronSocket.emit('browserWindow-isFullScreen-completed', isFullScreen); + socket.invoke('SendClientResponseBool', guid, isFullScreen); }); socket.on('browserWindowSetAspectRatio', (id, aspectRatio, extraSize) => { getWindowById(id).setAspectRatio(aspectRatio, extraSize); @@ -325,93 +329,93 @@ module.exports = (socket, app) => { socket.on('browserWindowSetBounds', (id, bounds, animate) => { getWindowById(id).setBounds(bounds, animate); }); - socket.on('browserWindowGetBounds', (id) => { + socket.on('browserWindowGetBounds', (guid, id) => { const rectangle = getWindowById(id).getBounds(); - electronSocket.emit('browserWindow-getBounds-completed', rectangle); + socket.invoke('SendClientResponseJObject', guid, rectangle); }); socket.on('browserWindowSetContentBounds', (id, bounds, animate) => { getWindowById(id).setContentBounds(bounds, animate); }); - socket.on('browserWindowGetContentBounds', (id) => { + socket.on('browserWindowGetContentBounds', (guid, id) => { const rectangle = getWindowById(id).getContentBounds(); - electronSocket.emit('browserWindow-getContentBounds-completed', rectangle); + socket.invoke('SendClientResponseBool', guid, rectangle); }); socket.on('browserWindowSetSize', (id, width, height, animate) => { getWindowById(id).setSize(width, height, animate); }); - socket.on('browserWindowGetSize', (id) => { + socket.on('browserWindowGetSize', (guid, id) => { const size = getWindowById(id).getSize(); - electronSocket.emit('browserWindow-getSize-completed', size); + socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetContentSize', (id, width, height, animate) => { getWindowById(id).setContentSize(width, height, animate); }); - socket.on('browserWindowGetContentSize', (id) => { + socket.on('browserWindowGetContentSize', (guid, id) => { const size = getWindowById(id).getContentSize(); - electronSocket.emit('browserWindow-getContentSize-completed', size); + socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetMinimumSize', (id, width, height) => { getWindowById(id).setMinimumSize(width, height); }); - socket.on('browserWindowGetMinimumSize', (id) => { + socket.on('browserWindowGetMinimumSize', (guid, id) => { const size = getWindowById(id).getMinimumSize(); - electronSocket.emit('browserWindow-getMinimumSize-completed', size); + socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetMaximumSize', (id, width, height) => { getWindowById(id).setMaximumSize(width, height); }); - socket.on('browserWindowGetMaximumSize', (id) => { + socket.on('browserWindowGetMaximumSize', (guid, id) => { const size = getWindowById(id).getMaximumSize(); - electronSocket.emit('browserWindow-getMaximumSize-completed', size); + socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetResizable', (id, resizable) => { getWindowById(id).setResizable(resizable); }); - socket.on('browserWindowIsResizable', (id) => { + socket.on('browserWindowIsResizable', (guid, id) => { const resizable = getWindowById(id).isResizable(); - electronSocket.emit('browserWindow-isResizable-completed', resizable); + socket.invoke('SendClientResponseBool', guid, resizable); }); socket.on('browserWindowSetMovable', (id, movable) => { getWindowById(id).setMovable(movable); }); - socket.on('browserWindowIsMovable', (id) => { + socket.on('browserWindowIsMovable', (guid, id) => { const movable = getWindowById(id).isMovable(); - electronSocket.emit('browserWindow-isMovable-completed', movable); + socket.invoke('SendClientResponseBool', guid, movable); }); socket.on('browserWindowSetMinimizable', (id, minimizable) => { getWindowById(id).setMinimizable(minimizable); }); - socket.on('browserWindowIsMinimizable', (id) => { + socket.on('browserWindowIsMinimizable', (guid, id) => { const minimizable = getWindowById(id).isMinimizable(); - electronSocket.emit('browserWindow-isMinimizable-completed', minimizable); + socket.invoke('SendClientResponseBool', guid, minimizable); }); socket.on('browserWindowSetMaximizable', (id, maximizable) => { getWindowById(id).setMaximizable(maximizable); }); - socket.on('browserWindowIsMaximizable', (id) => { + socket.on('browserWindowIsMaximizable', (guid, id) => { const maximizable = getWindowById(id).isMaximizable(); - electronSocket.emit('browserWindow-isMaximizable-completed', maximizable); + socket.invoke('SendClientResponseBool', guid, maximizable); }); socket.on('browserWindowSetFullScreenable', (id, fullscreenable) => { getWindowById(id).setFullScreenable(fullscreenable); }); - socket.on('browserWindowIsFullScreenable', (id) => { + socket.on('browserWindowIsFullScreenable', (guid, id) => { const fullscreenable = getWindowById(id).isFullScreenable(); - electronSocket.emit('browserWindow-isFullScreenable-completed', fullscreenable); + socket.invoke('SendClientResponseBool', guid, fullscreenable); }); socket.on('browserWindowSetClosable', (id, closable) => { getWindowById(id).setClosable(closable); }); - socket.on('browserWindowIsClosable', (id) => { + socket.on('browserWindowIsClosable', (guid, id) => { const closable = getWindowById(id).isClosable(); - electronSocket.emit('browserWindow-isClosable-completed', closable); + socket.invoke('SendClientResponseBool', guid, closable); }); socket.on('browserWindowSetAlwaysOnTop', (id, flag, level, relativeLevel) => { getWindowById(id).setAlwaysOnTop(flag, level, relativeLevel); }); - socket.on('browserWindowIsAlwaysOnTop', (id) => { + socket.on('browserWindowIsAlwaysOnTop', (guid, id) => { const isAlwaysOnTop = getWindowById(id).isAlwaysOnTop(); - electronSocket.emit('browserWindow-isAlwaysOnTop-completed', isAlwaysOnTop); + socket.invoke('SendClientResponseBool', guid, isAlwaysOnTop); }); socket.on('browserWindowCenter', (id) => { getWindowById(id).center(); @@ -419,19 +423,16 @@ module.exports = (socket, app) => { socket.on('browserWindowSetPosition', (id, x, y, animate) => { getWindowById(id).setPosition(x, y, animate); }); - socket.on('browserWindowGetPosition', (id) => { + socket.on('browserWindowGetPosition', (guid, id) => { const position = getWindowById(id).getPosition(); - electronSocket.emit('browserWindow-getPosition-completed', position); + socket.invoke('SendClientResponseJArray', guid, position); }); socket.on('browserWindowSetTitle', (id, title) => { getWindowById(id).setTitle(title); }); - socket.on('browserWindowGetTitle', (id) => { + socket.on('browserWindowGetTitle', (guid, id) => { const title = getWindowById(id).getTitle(); - electronSocket.emit('browserWindow-getTitle-completed', title); - }); - socket.on('browserWindowSetTitle', (id, title) => { - getWindowById(id).setTitle(title); + socket.invoke('SendClientResponseString', guid, title); }); socket.on('browserWindowSetSheetOffset', (id, offsetY, offsetX) => { if (offsetX) { @@ -450,27 +451,27 @@ module.exports = (socket, app) => { socket.on('browserWindowSetKiosk', (id, flag) => { getWindowById(id).setKiosk(flag); }); - socket.on('browserWindowIsKiosk', (id) => { + socket.on('browserWindowIsKiosk', (guid, id) => { const isKiosk = getWindowById(id).isKiosk(); - electronSocket.emit('browserWindow-isKiosk-completed', isKiosk); + socket.invoke('SendClientResponseBool', guid, isKiosk); }); socket.on('browserWindowGetNativeWindowHandle', (id) => { const nativeWindowHandle = getWindowById(id).getNativeWindowHandle().readInt32LE(0).toString(16); - electronSocket.emit('browserWindow-getNativeWindowHandle-completed', nativeWindowHandle); + socket.invoke('SendClientResponseString', nativeWindowHandle); }); socket.on('browserWindowSetRepresentedFilename', (id, filename) => { getWindowById(id).setRepresentedFilename(filename); }); - socket.on('browserWindowGetRepresentedFilename', (id) => { + socket.on('browserWindowGetRepresentedFilename', (guid, id) => { const pathname = getWindowById(id).getRepresentedFilename(); - electronSocket.emit('browserWindow-getRepresentedFilename-completed', pathname); + socket.invoke('SendClientResponseString', guid, pathname); }); socket.on('browserWindowSetDocumentEdited', (id, edited) => { getWindowById(id).setDocumentEdited(edited); }); - socket.on('browserWindowIsDocumentEdited', (id) => { + socket.on('browserWindowIsDocumentEdited', (guid, id) => { const edited = getWindowById(id).isDocumentEdited(); - electronSocket.emit('browserWindow-isDocumentEdited-completed', edited); + socket.invoke('SendClientResponseBool', guid, edited); }); socket.on('browserWindowFocusOnWebView', (id) => { getWindowById(id).focusOnWebView(); @@ -489,7 +490,7 @@ module.exports = (socket, app) => { if (menuItems) { menu = electron_1.Menu.buildFromTemplate(menuItems); addMenuItemClickConnector(menu.items, (id) => { - electronSocket.emit('windowMenuItemClicked', id); + socket.invoke('BrowserWindowMenuItemClicked', id); }); } getWindowById(id).setMenu(menu); @@ -516,20 +517,20 @@ module.exports = (socket, app) => { socket.on('browserWindowSetHasShadow', (id, hasShadow) => { getWindowById(id).setHasShadow(hasShadow); }); - socket.on('browserWindowHasShadow', (id) => { + socket.on('browserWindowHasShadow', (guid, id) => { const hasShadow = getWindowById(id).hasShadow(); - electronSocket.emit('browserWindow-hasShadow-completed', hasShadow); + socket.invoke('SendClientResponseBool', guid, hasShadow); }); socket.on('browserWindowSetThumbarButtons', (id, thumbarButtons) => { thumbarButtons.forEach(thumbarButton => { const imagePath = path.join(__dirname.replace('api', ''), 'bin', thumbarButton.icon.toString()); thumbarButton.icon = electron_1.nativeImage.createFromPath(imagePath); thumbarButton.click = () => { - electronSocket.emit('thumbarButtonClicked', thumbarButton['id']); + socket.invoke('BrowserWindowThumbbarButtonClicked', thumbarButton['id']); }; }); const success = getWindowById(id).setThumbarButtons(thumbarButtons); - electronSocket.emit('browserWindowSetThumbarButtons-completed', success); + socket.invoke('SendClientResponseBool', success); }); socket.on('browserWindowSetThumbnailClip', (id, rectangle) => { getWindowById(id).setThumbnailClip(rectangle); @@ -546,23 +547,23 @@ module.exports = (socket, app) => { socket.on('browserWindowSetAutoHideMenuBar', (id, hide) => { getWindowById(id).setAutoHideMenuBar(hide); }); - socket.on('browserWindowIsMenuBarAutoHide', (id) => { + socket.on('browserWindowIsMenuBarAutoHide', (guid, id) => { const isMenuBarAutoHide = getWindowById(id).isMenuBarAutoHide(); - electronSocket.emit('browserWindow-isMenuBarAutoHide-completed', isMenuBarAutoHide); + socket.invoke('SendClientResponseBool', guid, isMenuBarAutoHide); }); socket.on('browserWindowSetMenuBarVisibility', (id, visible) => { getWindowById(id).setMenuBarVisibility(visible); }); - socket.on('browserWindowIsMenuBarVisible', (id) => { + socket.on('browserWindowIsMenuBarVisible', (guid, id) => { const isMenuBarVisible = getWindowById(id).isMenuBarVisible(); - electronSocket.emit('browserWindow-isMenuBarVisible-completed', isMenuBarVisible); + socket.invoke('SendClientResponseBool', guid, isMenuBarVisible); }); socket.on('browserWindowSetVisibleOnAllWorkspaces', (id, visible) => { getWindowById(id).setVisibleOnAllWorkspaces(visible); }); - socket.on('browserWindowIsVisibleOnAllWorkspaces', (id) => { + socket.on('browserWindowIsVisibleOnAllWorkspaces', (guid, id) => { const isVisibleOnAllWorkspaces = getWindowById(id).isVisibleOnAllWorkspaces(); - electronSocket.emit('browserWindow-isVisibleOnAllWorkspaces-completed', isVisibleOnAllWorkspaces); + socket.invoke('SendClientResponseBool', guid, isVisibleOnAllWorkspaces); }); socket.on('browserWindowSetIgnoreMouseEvents', (id, ignore) => { getWindowById(id).setIgnoreMouseEvents(ignore); @@ -577,17 +578,17 @@ module.exports = (socket, app) => { const browserWindow = electron_1.BrowserWindow.fromId(parent.id); getWindowById(id).setParentWindow(browserWindow); }); - socket.on('browserWindowGetParentWindow', (id) => { + socket.on('browserWindowGetParentWindow', (guid, id) => { const browserWindow = getWindowById(id).getParentWindow(); - electronSocket.emit('browserWindow-getParentWindow-completed', browserWindow.id); + socket.invoke('SendClientResponseString', guid, browserWindow.id); }); - socket.on('browserWindowGetChildWindows', (id) => { + socket.on('browserWindowGetChildWindows', (guid, id) => { const browserWindows = getWindowById(id).getChildWindows(); const ids = []; browserWindows.forEach(x => { ids.push(x.id); }); - electronSocket.emit('browserWindow-getChildWindows-completed', ids); + socket.invoke('SendClientResponseJArray', guid, ids); }); socket.on('browserWindowSetAutoHideCursor', (id, autoHide) => { getWindowById(id).setAutoHideCursor(autoHide); diff --git a/ElectronNET.Host/api/browserWindows.js.map b/ElectronNET.Host/api/browserWindows.js.map index 23ed93c2..e2eb8ed5 100644 --- a/ElectronNET.Host/api/browserWindows.js.map +++ b/ElectronNET.Host/api/browserWindows.js.map @@ -1 +1 @@ -{"version":3,"file":"browserWindows.js","sourceRoot":"","sources":["browserWindows.ts"],"names":[],"mappings":";AACA,uCAA4D;AAC5D,+CAA0D;AAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,OAAO,GAA6B,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAA6B,CAAC;AAClI,IAAI,qBAAqB,GAAa,EAAE,CAAC;AACzC,IAAI,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC;AACxC,IAAI,aAAa,CAAC;AAClB,MAAM,qBAAqB,GAAgC,CAAC,MAAM,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAgC,CAAC;AAEpK,iBAAS,CAAC,MAAc,EAAE,GAAiB,EAAE,EAAE;IAC3C,cAAc,GAAG,MAAM,CAAC;IAExB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAChE,IAAI,QAAQ,CAAC,OAAO,EAAE;YAClB,IAAI,KAAK,GAAG,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAA;YAC/C,IAAI,KAAK,IAAI,qBAAqB,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxF,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,IAAI,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBACrD,IAAI,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBACrD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;aACvB;SACJ;IACL,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,EAAE,CAAC,sCAAsC,EAAE,CAAC,EAAE,EAAE,EAAE;QACrD,IAAI,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACpC,qBAAqB,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;YAC5E,cAAc,CAAC,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;SAC3D;QAED,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,cAAc,CAAC,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2CAA2C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxD,cAAc,CAAC,IAAI,CAAC,kCAAkC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/B,cAAc,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChC,cAAc,CAAC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrC,cAAc,CAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,CAAC,EAAE,EAAE,EAAE;QACpD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;YACtC,cAAc,CAAC,IAAI,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,EAAE;QAClD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YACpC,cAAc,CAAC,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,cAAc,CAAC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/B,cAAc,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,cAAc,CAAC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,cAAc,CAAC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAClC,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,EAAE;QAClD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YACpC,cAAc,CAAC,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAClC,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,EAAE;QAC/C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACjC,cAAc,CAAC,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChC,cAAc,CAAC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,cAAc,CAAC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/B,cAAc,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,CAAC,EAAE,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3C,cAAc,CAAC,IAAI,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,CAAC,EAAE,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3C,cAAc,CAAC,IAAI,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+CAA+C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChD,cAAc,CAAC,IAAI,CAAC,sCAAsC,GAAG,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+CAA+C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChD,cAAc,CAAC,IAAI,CAAC,sCAAsC,GAAG,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACnD,cAAc,CAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2CAA2C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5C,cAAc,CAAC,IAAI,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,EAAE,EAAE;QACxD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1C,cAAc,CAAC,IAAI,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,CAAC,EAAE,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3C,cAAc,CAAC,IAAI,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC/C,cAAc,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrC,cAAc,CAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,EAAE,EAAE,EAAE;QACjD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YACnC,cAAc,CAAC,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2CAA2C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5C,cAAc,CAAC,IAAI,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;QAClD,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;YAC1E,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,CAAC;SAC3H;aAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;YAChC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,CAAC;SAChG;QAED,2DAA2D;QAC3D,IAAI,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,KAAK,OAAO,EAAE;YACxE,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;YAC3B,IAAI,MAAM,EAAE;gBACR,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,cAAc,CAAC,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACvD,OAAO;aACV;SACJ;aAAM;YACH,MAAM,GAAG,IAAI,wBAAa,CAAC,OAAO,CAAC,CAAC;SACvC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE;YACf,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAC,UAAU,EAAE,OAAO,CAAC,KAAK,EAAC,CAAC,CAAC;SACpE;QAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,gBAAgB,EAAE;YAC3C,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;SACnE;QAED,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAC5B,IAAI,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;gBAC3C,qBAAqB,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;aACtF;iBAAM;gBACH,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aACzC;QACL,CAAC,CAAC,CAAC;QAEH,WAAW,GAAG,OAAO,CAAC;QAEtB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI;oBACA,UAAU,CAAC,EAAE,CAAC;iBACjB;gBAAC,OAAO,KAAK,EAAE;oBACZ,IAAI,KAAK,CAAC,OAAO,KAAK,2BAA2B,EAAE;wBAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBAEzB,MAAM,GAAG,GAAG,EAAE,CAAC;wBACf,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACrC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;qBACnD;iBACJ;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YACpB,iEAAiE;YACjE,4DAA4D;YAC5D,IAAI,MAAM,KAAK,IAAI,IAAI,WAAW,EAAE;gBAChC,MAAM,GAAG,IAAI,wBAAa,CAAC,WAAW,CAAC,CAAC;aAC3C;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE;YACT,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SAC3B;QAED,IAAI,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC;YACxC,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE;YAC/C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;SAC1D;QAED,sBAAsB;QACtB,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,SAAS,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE;YACjE,GAAG,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC;YAC/B,GAAG,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;SAC9B;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,cAAc,CAAC,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE;QACrC,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,EAAE;QACnC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,EAAE;QACnC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;QAClC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,EAAE;QACzC,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpD,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;QAClC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1C,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;QAClC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAE5C,cAAc,CAAC,IAAI,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,EAAE;QACtC,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,EAAE;QACxC,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,EAAE;QACzC,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpD,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,EAAE;QACtC,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE;QACrC,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,EAAE;QACzC,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpD,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE;QACvD,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1C,MAAM,YAAY,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC;QAEtD,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE,YAAY,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;QACpE,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE;QAC5D,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QACxD,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC/D,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAEvD,cAAc,CAAC,IAAI,CAAC,0CAA0C,EAAE,SAAS,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC7D,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAEzC,cAAc,CAAC,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QACpE,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,wCAAwC,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC3D,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,wCAAwC,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC3D,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,wCAAwC,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QACrD,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,EAAE;QACzC,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAElD,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,SAAS,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QACjD,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,EAAE;QACvC,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAE9C,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC3C,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAEtD,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE,WAAW,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC3C,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAEtD,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE,WAAW,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE;QAC/D,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,cAAc,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAE5D,cAAc,CAAC,IAAI,CAAC,0CAA0C,EAAE,cAAc,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,oCAAoC,EAAE,QAAQ,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;QACxE,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC3C,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAExD,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE,aAAa,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE;QACpC,aAAa,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE;QACxD,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,EAAE;QACzC,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEjD,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,QAAQ,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE3C,cAAc,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAC9D,IAAI,OAAO,EAAE;YACT,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACtD;aAAM;YACH,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAC9C,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAClD,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAE5C,cAAc,CAAC,IAAI,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,MAAM,kBAAkB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,qBAAqB,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjG,cAAc,CAAC,IAAI,CAAC,+CAA+C,EAAE,kBAAkB,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;QAC9D,aAAa,CAAC,EAAE,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,CAAC,EAAE,EAAE,EAAE;QACpD,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,sBAAsB,EAAE,CAAC;QAE5D,cAAc,CAAC,IAAI,CAAC,gDAAgD,EAAE,QAAQ,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;QACvD,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAEpD,cAAc,CAAC,IAAI,CAAC,0CAA0C,EAAE,MAAM,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,EAAE;QACzC,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE;QACpC,aAAa,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QAChD,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,IAAI,SAAS,EAAE;YACX,IAAI,GAAG,eAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAEzC,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE;gBACzC,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;SACN;QAED,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,EAAE;QACxC,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,SAAS,yBAAyB,CAAC,SAAS,EAAE,QAAQ;QAClD,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aAC3D;YAED,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE;gBACzB,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7C;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;QACtD,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC/D,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QACrD,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,cAAwC,EAAE,EAAE;QACzF,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChG,aAAa,CAAC,IAAI,GAAG,sBAAW,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAC3D,aAAa,CAAC,KAAK,GAAG,GAAG,EAAE;gBACvB,cAAc,CAAC,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACrE,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QACpE,cAAc,CAAC,IAAI,CAAC,0CAA0C,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QACpD,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,EAAE,EAAE;QACxD,aAAa,CAAC,EAAE,CAAC,CAAC,0BAA0B,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QACtD,aAAa,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,EAAE;QAC/C,MAAM,iBAAiB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC;QAEhE,cAAc,CAAC,IAAI,CAAC,2CAA2C,EAAE,iBAAiB,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QAC3D,aAAa,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,gBAAgB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAE9D,cAAc,CAAC,IAAI,CAAC,0CAA0C,EAAE,gBAAgB,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wCAAwC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QAChE,aAAa,CAAC,EAAE,CAAC,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uCAAuC,EAAE,CAAC,EAAE,EAAE,EAAE;QACtD,MAAM,wBAAwB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,wBAAwB,EAAE,CAAC;QAE9E,cAAc,CAAC,IAAI,CAAC,kDAAkD,EAAE,wBAAwB,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QACrD,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;QACrD,MAAM,aAAa,GAAG,wBAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEtD,aAAa,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QAE1D,cAAc,CAAC,IAAI,CAAC,yCAAyC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,MAAM,cAAc,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QAE3D,MAAM,GAAG,GAAG,EAAE,CAAC;QAEf,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACvB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,IAAI,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAC/C,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE;QAC5D,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,uCAAyB,CAAC,aAAa,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,SAAS,aAAa,CAAC,EAAU;QAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;gBACnB,OAAO,OAAO,CAAC;aAClB;SACJ;IACL,CAAC;AACL,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"browserWindows.js","sourceRoot":"","sources":["browserWindows.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/browserWindows.ts b/ElectronNET.Host/api/browserWindows.ts index 6f086e2f..8ba0da7e 100644 --- a/ElectronNET.Host/api/browserWindows.ts +++ b/ElectronNET.Host/api/browserWindows.ts @@ -1,15 +1,13 @@ -import { Socket } from 'net'; import { BrowserWindow, Menu, nativeImage } from 'electron'; import { browserViewMediateService } from './browserView'; const path = require('path'); const windows: Electron.BrowserWindow[] = (global['browserWindows'] = global['browserWindows'] || []) as Electron.BrowserWindow[]; let readyToShowWindowsIds: number[] = []; -let window, lastOptions, electronSocket; +let window, lastOptions; let mainWindowURL; const proxyToCredentialsMap: { [proxy: string]: string } = (global['proxyToCredentialsMap'] = global['proxyToCredentialsMap'] || []) as { [proxy: string]: string }; -export = (socket: Socket, app: Electron.App) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { app.on('login', (event, webContents, request, authInfo, callback) => { if (authInfo.isProxy) { @@ -26,190 +24,193 @@ export = (socket: Socket, app: Electron.App) => { socket.on('register-browserWindow-ready-to-show', (id) => { if (readyToShowWindowsIds.includes(id)) { readyToShowWindowsIds = readyToShowWindowsIds.filter(value => value !== id); - electronSocket.emit('browserWindow-ready-to-show' + id); + socket.invoke('browserWindow-ready-to-show' + id); } getWindowById(id).on('ready-to-show', () => { readyToShowWindowsIds.push(id); - electronSocket.emit('browserWindow-ready-to-show' + id); + socket.invoke('BrowserWindowReadyToShow', id); }); }); socket.on('register-browserWindow-page-title-updated', (id) => { getWindowById(id).on('page-title-updated', (event, title) => { - electronSocket.emit('browserWindow-page-title-updated' + id, title); + socket.invoke('BrowserWindowPageTitleUpdated', id, title); }); }); socket.on('register-browserWindow-close', (id) => { getWindowById(id).on('close', () => { - electronSocket.emit('browserWindow-close' + id); + socket.invoke('BrowserWindowClose', id); }); }); socket.on('register-browserWindow-closed', (id) => { getWindowById(id).on('closed', () => { - electronSocket.emit('browserWindow-closed' + id); + console.log(id); + socket.invoke('BrowserWindowClosed', id); }); }); socket.on('register-browserWindow-session-end', (id) => { getWindowById(id).on('session-end', () => { - electronSocket.emit('browserWindow-session-end' + id); + socket.invoke('BrowserWindowSessionEnd', id); }); }); socket.on('register-browserWindow-unresponsive', (id) => { getWindowById(id).on('unresponsive', () => { - electronSocket.emit('browserWindow-unresponsive' + id); + socket.invoke('BrowserWindowUnresponsive', id); }); }); socket.on('register-browserWindow-responsive', (id) => { getWindowById(id).on('responsive', () => { - electronSocket.emit('browserWindow-responsive' + id); + socket.invoke('BrowserWindowResponsive', id); }); }); + //Testing socket.on('register-browserWindow-blur', (id) => { getWindowById(id).on('blur', () => { - electronSocket.emit('browserWindow-blur' + id); + console.log("BLUR"); + socket.invoke('BrowserWindowBlur', id); }); }); socket.on('register-browserWindow-focus', (id) => { getWindowById(id).on('focus', () => { - electronSocket.emit('browserWindow-focus' + id); + socket.invoke('BrowserWindowFocus', id); }); }); socket.on('register-browserWindow-show', (id) => { getWindowById(id).on('show', () => { - electronSocket.emit('browserWindow-show' + id); + socket.invoke('BrowserWindowShow', id); }); }); socket.on('register-browserWindow-hide', (id) => { getWindowById(id).on('hide', () => { - electronSocket.emit('browserWindow-hide' + id); + socket.invoke('BrowserWindowHide', id); }); }); socket.on('register-browserWindow-maximize', (id) => { getWindowById(id).on('maximize', () => { - electronSocket.emit('browserWindow-maximize' + id); + socket.invoke('BrowserWindowMaximize', id); }); }); socket.on('register-browserWindow-unmaximize', (id) => { getWindowById(id).on('unmaximize', () => { - electronSocket.emit('browserWindow-unmaximize' + id); + socket.invoke('BrowserWindowUnmaximize', id); }); }); socket.on('register-browserWindow-minimize', (id) => { getWindowById(id).on('minimize', () => { - electronSocket.emit('browserWindow-minimize' + id); + socket.invoke('BrowserWindowMinimize', id); }); }); socket.on('register-browserWindow-restore', (id) => { getWindowById(id).on('restore', () => { - electronSocket.emit('browserWindow-restore' + id); + socket.invoke('BrowserWindowRestore', id); }); }); socket.on('register-browserWindow-resize', (id) => { getWindowById(id).on('resize', () => { - electronSocket.emit('browserWindow-resize' + id); + socket.invoke('BrowserWindowResize', id); }); }); socket.on('register-browserWindow-move', (id) => { getWindowById(id).on('move', () => { - electronSocket.emit('browserWindow-move' + id); + socket.invoke('BrowserWindowMove', id); }); }); socket.on('register-browserWindow-moved', (id) => { getWindowById(id).on('moved', () => { - electronSocket.emit('browserWindow-moved' + id); + socket.invoke('BrowserWindowMoved', id); }); }); socket.on('register-browserWindow-enter-full-screen', (id) => { getWindowById(id).on('enter-full-screen', () => { - electronSocket.emit('browserWindow-enter-full-screen' + id); + socket.invoke('BrowserWindowEnterFullScreen', id); }); }); socket.on('register-browserWindow-leave-full-screen', (id) => { getWindowById(id).on('leave-full-screen', () => { - electronSocket.emit('browserWindow-leave-full-screen' + id); + socket.invoke('BrowserWindowLeaveFullScreen', id); }); }); socket.on('register-browserWindow-enter-html-full-screen', (id) => { getWindowById(id).on('enter-html-full-screen', () => { - electronSocket.emit('browserWindow-enter-html-full-screen' + id); + socket.invoke('BrowserWindowEnterHtmlFullScreen', id); }); }); socket.on('register-browserWindow-leave-html-full-screen', (id) => { getWindowById(id).on('leave-html-full-screen', () => { - electronSocket.emit('browserWindow-leave-html-full-screen' + id); + socket.invoke('BrowserWindowLeaveHtmlFullScreen', id); }); }); socket.on('register-browserWindow-app-command', (id) => { getWindowById(id).on('app-command', (event, command) => { - electronSocket.emit('browserWindow-app-command' + id, command); + socket.invoke('BrowserWindowAppCommand', id, command); }); }); socket.on('register-browserWindow-scroll-touch-begin', (id) => { getWindowById(id).on('scroll-touch-begin', () => { - electronSocket.emit('browserWindow-scroll-touch-begin' + id); + socket.invoke('BrowserWindowScrollTouchBegin', id); }); }); socket.on('register-browserWindow-scroll-touch-end', (id) => { getWindowById(id).on('scroll-touch-end', () => { - electronSocket.emit('browserWindow-scroll-touch-end' + id); + socket.invoke('BrowserWindowScrollTouchEnd', id); }); }); socket.on('register-browserWindow-scroll-touch-edge', (id) => { getWindowById(id).on('scroll-touch-edge', () => { - electronSocket.emit('browserWindow-scroll-touch-edge' + id); + socket.invoke('BrowserWindowScrollTouchEdge', id); }); }); socket.on('register-browserWindow-swipe', (id) => { getWindowById(id).on('swipe', (event, direction) => { - electronSocket.emit('browserWindow-swipe' + id, direction); + socket.invoke('BrowserWindowSwipe', id, direction); }); }); socket.on('register-browserWindow-sheet-begin', (id) => { getWindowById(id).on('sheet-begin', () => { - electronSocket.emit('browserWindow-sheet-begin' + id); + socket.invoke('BrowserWindowSheetBegin', id); }); }); socket.on('register-browserWindow-sheet-end', (id) => { getWindowById(id).on('sheet-end', () => { - electronSocket.emit('browserWindow-sheet-end' + id); + socket.invoke('BrowserWindowSheetEnd', id); }); }); socket.on('register-browserWindow-new-window-for-tab', (id) => { getWindowById(id).on('new-window-for-tab', () => { - electronSocket.emit('browserWindow-new-window-for-tab' + id); + socket.invoke('BrowserWindowNewWindowForTab', id); }); }); - socket.on('createBrowserWindow', (options, loadUrl) => { + socket.on('createBrowserWindow', (guid, options, loadUrl) => { if (options.webPreferences && !('nodeIntegration' in options.webPreferences)) { options = { ...options, webPreferences: { ...options.webPreferences, nodeIntegration: true, contextIsolation: false } }; } else if (!options.webPreferences) { @@ -222,7 +223,7 @@ export = (socket: Socket, app: Electron.App) => { if (window) { window.reload(); windows.push(window); - electronSocket.emit('BrowserWindowCreated', window.id); + socket.invoke('SendClientResponseString', guid, window.id); return; } } else { @@ -258,7 +259,9 @@ export = (socket: Socket, app: Electron.App) => { const ids = []; windows.forEach(x => ids.push(x.id)); - electronSocket.emit('BrowserWindowClosed', ids); + console.log("------------------------------------"); + console.log(ids); + socket.invoke('BrowserWindowsClosed', ids); } } } @@ -289,7 +292,7 @@ export = (socket: Socket, app: Electron.App) => { } windows.push(window); - electronSocket.emit('BrowserWindowCreated', window.id); + socket.invoke('SendClientResponseString', guid, window.id); }); socket.on('browserWindowDestroy', (id) => { @@ -308,16 +311,16 @@ export = (socket: Socket, app: Electron.App) => { getWindowById(id).blur(); }); - socket.on('browserWindowIsFocused', (id) => { + socket.on('browserWindowIsFocused', (guid, id) => { const isFocused = getWindowById(id).isFocused(); - electronSocket.emit('browserWindow-isFocused-completed', isFocused); + socket.invoke('SendClientResponseBool', guid, isFocused); }); - socket.on('browserWindowIsDestroyed', (id) => { + socket.on('browserWindowIsDestroyed', (guid, id) => { const isDestroyed = getWindowById(id).isDestroyed(); - electronSocket.emit('browserWindow-isDestroyed-completed', isDestroyed); + socket.invoke('SendClientResponseBool', guid, isDestroyed); }); socket.on('browserWindowShow', (id) => { @@ -332,16 +335,16 @@ export = (socket: Socket, app: Electron.App) => { getWindowById(id).hide(); }); - socket.on('browserWindowIsVisible', (id) => { + socket.on('browserWindowIsVisible', (guid, id) => { const isVisible = getWindowById(id).isVisible(); - electronSocket.emit('browserWindow-isVisible-completed', isVisible); + socket.invoke('SendClientResponseBool', guid, isVisible); }); - socket.on('browserWindowIsModal', (id) => { + socket.on('browserWindowIsModal', (guid, id) => { const isModal = getWindowById(id).isModal(); - electronSocket.emit('browserWindow-isModal-completed', isModal); + socket.invoke('SendClientResponseBool', guid, isModal); }); socket.on('browserWindowMaximize', (id) => { @@ -352,10 +355,10 @@ export = (socket: Socket, app: Electron.App) => { getWindowById(id).unmaximize(); }); - socket.on('browserWindowIsMaximized', (id) => { + socket.on('browserWindowIsMaximized', (guid, id) => { const isMaximized = getWindowById(id).isMaximized(); - electronSocket.emit('browserWindow-isMaximized-completed', isMaximized); + socket.invoke('SendClientResponseBool', guid, isMaximized); }); socket.on('browserWindowMinimize', (id) => { @@ -366,20 +369,20 @@ export = (socket: Socket, app: Electron.App) => { getWindowById(id).restore(); }); - socket.on('browserWindowIsMinimized', (id) => { + socket.on('browserWindowIsMinimized', (guid, id) => { const isMinimized = getWindowById(id).isMinimized(); - electronSocket.emit('browserWindow-isMinimized-completed', isMinimized); + socket.invoke('SendClientResponseBool', guid, isMinimized); }); socket.on('browserWindowSetFullScreen', (id, fullscreen) => { getWindowById(id).setFullScreen(fullscreen); }); - socket.on('browserWindowIsFullScreen', (id) => { + socket.on('browserWindowIsFullScreen', (guid, id) => { const isFullScreen = getWindowById(id).isFullScreen(); - electronSocket.emit('browserWindow-isFullScreen-completed', isFullScreen); + socket.invoke('SendClientResponseBool', guid, isFullScreen); }); socket.on('browserWindowSetAspectRatio', (id, aspectRatio, extraSize) => { @@ -398,130 +401,130 @@ export = (socket: Socket, app: Electron.App) => { getWindowById(id).setBounds(bounds, animate); }); - socket.on('browserWindowGetBounds', (id) => { + socket.on('browserWindowGetBounds', (guid, id) => { const rectangle = getWindowById(id).getBounds(); - electronSocket.emit('browserWindow-getBounds-completed', rectangle); + socket.invoke('SendClientResponseJObject', guid, rectangle); }); socket.on('browserWindowSetContentBounds', (id, bounds, animate) => { getWindowById(id).setContentBounds(bounds, animate); }); - socket.on('browserWindowGetContentBounds', (id) => { + socket.on('browserWindowGetContentBounds', (guid, id) => { const rectangle = getWindowById(id).getContentBounds(); - electronSocket.emit('browserWindow-getContentBounds-completed', rectangle); + socket.invoke('SendClientResponseBool', guid, rectangle); }); socket.on('browserWindowSetSize', (id, width, height, animate) => { getWindowById(id).setSize(width, height, animate); }); - socket.on('browserWindowGetSize', (id) => { + socket.on('browserWindowGetSize', (guid, id) => { const size = getWindowById(id).getSize(); - electronSocket.emit('browserWindow-getSize-completed', size); + socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetContentSize', (id, width, height, animate) => { getWindowById(id).setContentSize(width, height, animate); }); - socket.on('browserWindowGetContentSize', (id) => { + socket.on('browserWindowGetContentSize', (guid, id) => { const size = getWindowById(id).getContentSize(); - electronSocket.emit('browserWindow-getContentSize-completed', size); + socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetMinimumSize', (id, width, height) => { getWindowById(id).setMinimumSize(width, height); }); - socket.on('browserWindowGetMinimumSize', (id) => { + socket.on('browserWindowGetMinimumSize', (guid, id) => { const size = getWindowById(id).getMinimumSize(); - electronSocket.emit('browserWindow-getMinimumSize-completed', size); + socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetMaximumSize', (id, width, height) => { getWindowById(id).setMaximumSize(width, height); }); - socket.on('browserWindowGetMaximumSize', (id) => { + socket.on('browserWindowGetMaximumSize', (guid, id) => { const size = getWindowById(id).getMaximumSize(); - electronSocket.emit('browserWindow-getMaximumSize-completed', size); + socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetResizable', (id, resizable) => { getWindowById(id).setResizable(resizable); }); - socket.on('browserWindowIsResizable', (id) => { + socket.on('browserWindowIsResizable', (guid, id) => { const resizable = getWindowById(id).isResizable(); - electronSocket.emit('browserWindow-isResizable-completed', resizable); + socket.invoke('SendClientResponseBool', guid, resizable); }); socket.on('browserWindowSetMovable', (id, movable) => { getWindowById(id).setMovable(movable); }); - socket.on('browserWindowIsMovable', (id) => { + socket.on('browserWindowIsMovable', (guid, id) => { const movable = getWindowById(id).isMovable(); - electronSocket.emit('browserWindow-isMovable-completed', movable); + socket.invoke('SendClientResponseBool', guid, movable); }); socket.on('browserWindowSetMinimizable', (id, minimizable) => { getWindowById(id).setMinimizable(minimizable); }); - socket.on('browserWindowIsMinimizable', (id) => { + socket.on('browserWindowIsMinimizable', (guid, id) => { const minimizable = getWindowById(id).isMinimizable(); - electronSocket.emit('browserWindow-isMinimizable-completed', minimizable); + socket.invoke('SendClientResponseBool', guid, minimizable); }); socket.on('browserWindowSetMaximizable', (id, maximizable) => { getWindowById(id).setMaximizable(maximizable); }); - socket.on('browserWindowIsMaximizable', (id) => { + socket.on('browserWindowIsMaximizable', (guid, id) => { const maximizable = getWindowById(id).isMaximizable(); - electronSocket.emit('browserWindow-isMaximizable-completed', maximizable); + socket.invoke('SendClientResponseBool', guid, maximizable); }); socket.on('browserWindowSetFullScreenable', (id, fullscreenable) => { getWindowById(id).setFullScreenable(fullscreenable); }); - socket.on('browserWindowIsFullScreenable', (id) => { + socket.on('browserWindowIsFullScreenable', (guid, id) => { const fullscreenable = getWindowById(id).isFullScreenable(); - electronSocket.emit('browserWindow-isFullScreenable-completed', fullscreenable); + socket.invoke('SendClientResponseBool', guid, fullscreenable); }); socket.on('browserWindowSetClosable', (id, closable) => { getWindowById(id).setClosable(closable); }); - socket.on('browserWindowIsClosable', (id) => { + socket.on('browserWindowIsClosable', (guid, id) => { const closable = getWindowById(id).isClosable(); - electronSocket.emit('browserWindow-isClosable-completed', closable); + socket.invoke('SendClientResponseBool', guid, closable); }); socket.on('browserWindowSetAlwaysOnTop', (id, flag, level, relativeLevel) => { getWindowById(id).setAlwaysOnTop(flag, level, relativeLevel); }); - socket.on('browserWindowIsAlwaysOnTop', (id) => { + socket.on('browserWindowIsAlwaysOnTop', (guid, id) => { const isAlwaysOnTop = getWindowById(id).isAlwaysOnTop(); - electronSocket.emit('browserWindow-isAlwaysOnTop-completed', isAlwaysOnTop); + socket.invoke('SendClientResponseBool', guid, isAlwaysOnTop); }); socket.on('browserWindowCenter', (id) => { @@ -532,24 +535,20 @@ export = (socket: Socket, app: Electron.App) => { getWindowById(id).setPosition(x, y, animate); }); - socket.on('browserWindowGetPosition', (id) => { + socket.on('browserWindowGetPosition', (guid, id) => { const position = getWindowById(id).getPosition(); - electronSocket.emit('browserWindow-getPosition-completed', position); + socket.invoke('SendClientResponseJArray', guid, position); }); socket.on('browserWindowSetTitle', (id, title) => { getWindowById(id).setTitle(title); }); - socket.on('browserWindowGetTitle', (id) => { + socket.on('browserWindowGetTitle', (guid, id) => { const title = getWindowById(id).getTitle(); - electronSocket.emit('browserWindow-getTitle-completed', title); - }); - - socket.on('browserWindowSetTitle', (id, title) => { - getWindowById(id).setTitle(title); + socket.invoke('SendClientResponseString', guid, title); }); socket.on('browserWindowSetSheetOffset', (id, offsetY, offsetX) => { @@ -572,35 +571,35 @@ export = (socket: Socket, app: Electron.App) => { getWindowById(id).setKiosk(flag); }); - socket.on('browserWindowIsKiosk', (id) => { + socket.on('browserWindowIsKiosk', (guid, id) => { const isKiosk = getWindowById(id).isKiosk(); - electronSocket.emit('browserWindow-isKiosk-completed', isKiosk); + socket.invoke('SendClientResponseBool', guid, isKiosk); }); socket.on('browserWindowGetNativeWindowHandle', (id) => { const nativeWindowHandle = getWindowById(id).getNativeWindowHandle().readInt32LE(0).toString(16); - electronSocket.emit('browserWindow-getNativeWindowHandle-completed', nativeWindowHandle); + socket.invoke('SendClientResponseString', nativeWindowHandle); }); socket.on('browserWindowSetRepresentedFilename', (id, filename) => { getWindowById(id).setRepresentedFilename(filename); }); - socket.on('browserWindowGetRepresentedFilename', (id) => { + socket.on('browserWindowGetRepresentedFilename', (guid, id) => { const pathname = getWindowById(id).getRepresentedFilename(); - electronSocket.emit('browserWindow-getRepresentedFilename-completed', pathname); + socket.invoke('SendClientResponseString', guid, pathname); }); socket.on('browserWindowSetDocumentEdited', (id, edited) => { getWindowById(id).setDocumentEdited(edited); }); - socket.on('browserWindowIsDocumentEdited', (id) => { + socket.on('browserWindowIsDocumentEdited', (guid, id) => { const edited = getWindowById(id).isDocumentEdited(); - electronSocket.emit('browserWindow-isDocumentEdited-completed', edited); + socket.invoke('SendClientResponseBool', guid, edited); }); socket.on('browserWindowFocusOnWebView', (id) => { @@ -626,7 +625,7 @@ export = (socket: Socket, app: Electron.App) => { menu = Menu.buildFromTemplate(menuItems); addMenuItemClickConnector(menu.items, (id) => { - electronSocket.emit('windowMenuItemClicked', id); + socket.invoke('BrowserWindowMenuItemClicked', id); }); } @@ -661,10 +660,10 @@ export = (socket: Socket, app: Electron.App) => { getWindowById(id).setHasShadow(hasShadow); }); - socket.on('browserWindowHasShadow', (id) => { + socket.on('browserWindowHasShadow', (guid, id) => { const hasShadow = getWindowById(id).hasShadow(); - electronSocket.emit('browserWindow-hasShadow-completed', hasShadow); + socket.invoke('SendClientResponseBool', guid, hasShadow); }); socket.on('browserWindowSetThumbarButtons', (id, thumbarButtons: Electron.ThumbarButton[]) => { @@ -672,12 +671,12 @@ export = (socket: Socket, app: Electron.App) => { const imagePath = path.join(__dirname.replace('api', ''), 'bin', thumbarButton.icon.toString()); thumbarButton.icon = nativeImage.createFromPath(imagePath); thumbarButton.click = () => { - electronSocket.emit('thumbarButtonClicked', thumbarButton['id']); + socket.invoke('BrowserWindowThumbbarButtonClicked', thumbarButton['id']); }; }); const success = getWindowById(id).setThumbarButtons(thumbarButtons); - electronSocket.emit('browserWindowSetThumbarButtons-completed', success); + socket.invoke('SendClientResponseBool', success); }); socket.on('browserWindowSetThumbnailClip', (id, rectangle) => { @@ -700,30 +699,30 @@ export = (socket: Socket, app: Electron.App) => { getWindowById(id).setAutoHideMenuBar(hide); }); - socket.on('browserWindowIsMenuBarAutoHide', (id) => { + socket.on('browserWindowIsMenuBarAutoHide', (guid, id) => { const isMenuBarAutoHide = getWindowById(id).isMenuBarAutoHide(); - electronSocket.emit('browserWindow-isMenuBarAutoHide-completed', isMenuBarAutoHide); + socket.invoke('SendClientResponseBool', guid, isMenuBarAutoHide); }); socket.on('browserWindowSetMenuBarVisibility', (id, visible) => { getWindowById(id).setMenuBarVisibility(visible); }); - socket.on('browserWindowIsMenuBarVisible', (id) => { + socket.on('browserWindowIsMenuBarVisible', (guid, id) => { const isMenuBarVisible = getWindowById(id).isMenuBarVisible(); - electronSocket.emit('browserWindow-isMenuBarVisible-completed', isMenuBarVisible); + socket.invoke('SendClientResponseBool', guid, isMenuBarVisible); }); socket.on('browserWindowSetVisibleOnAllWorkspaces', (id, visible) => { getWindowById(id).setVisibleOnAllWorkspaces(visible); }); - socket.on('browserWindowIsVisibleOnAllWorkspaces', (id) => { + socket.on('browserWindowIsVisibleOnAllWorkspaces', (guid, id) => { const isVisibleOnAllWorkspaces = getWindowById(id).isVisibleOnAllWorkspaces(); - electronSocket.emit('browserWindow-isVisibleOnAllWorkspaces-completed', isVisibleOnAllWorkspaces); + socket.invoke('SendClientResponseBool', guid, isVisibleOnAllWorkspaces); }); socket.on('browserWindowSetIgnoreMouseEvents', (id, ignore) => { @@ -744,13 +743,13 @@ export = (socket: Socket, app: Electron.App) => { getWindowById(id).setParentWindow(browserWindow); }); - socket.on('browserWindowGetParentWindow', (id) => { + socket.on('browserWindowGetParentWindow', (guid, id) => { const browserWindow = getWindowById(id).getParentWindow(); - electronSocket.emit('browserWindow-getParentWindow-completed', browserWindow.id); + socket.invoke('SendClientResponseString', guid, browserWindow.id); }); - socket.on('browserWindowGetChildWindows', (id) => { + socket.on('browserWindowGetChildWindows', (guid, id) => { const browserWindows = getWindowById(id).getChildWindows(); const ids = []; @@ -759,7 +758,7 @@ export = (socket: Socket, app: Electron.App) => { ids.push(x.id); }); - electronSocket.emit('browserWindow-getChildWindows-completed', ids); + socket.invoke('SendClientResponseJArray', guid, ids); }); socket.on('browserWindowSetAutoHideCursor', (id, autoHide) => { diff --git a/ElectronNET.Host/api/clipboard.js b/ElectronNET.Host/api/clipboard.js index f7e7ef10..edfe1169 100644 --- a/ElectronNET.Host/api/clipboard.js +++ b/ElectronNET.Host/api/clipboard.js @@ -2,38 +2,37 @@ const electron_1 = require("electron"); let electronSocket; module.exports = (socket) => { - electronSocket = socket; - socket.on('clipboard-readText', (type) => { + socket.on('clipboard-readText', (guid, type) => { const text = electron_1.clipboard.readText(type); - electronSocket.emit('clipboard-readText-Completed', text); + socket.invoke('SendClientResponseString', guid, text); }); socket.on('clipboard-writeText', (text, type) => { electron_1.clipboard.writeText(text, type); }); - socket.on('clipboard-readHTML', (type) => { + socket.on('clipboard-readHTML', (guid, type) => { const content = electron_1.clipboard.readHTML(type); - electronSocket.emit('clipboard-readHTML-Completed', content); + socket.invoke('SendClientResponseString', guid, content); }); socket.on('clipboard-writeHTML', (markup, type) => { electron_1.clipboard.writeHTML(markup, type); }); - socket.on('clipboard-readRTF', (type) => { + socket.on('clipboard-readRTF', (guid, type) => { const content = electron_1.clipboard.readRTF(type); - electronSocket.emit('clipboard-readRTF-Completed', content); + socket.invoke('SendClientResponseString', guid, content); }); socket.on('clipboard-writeRTF', (text, type) => { electron_1.clipboard.writeHTML(text, type); }); - socket.on('clipboard-readBookmark', () => { + socket.on('clipboard-readBookmark', (guid) => { const bookmark = electron_1.clipboard.readBookmark(); - electronSocket.emit('clipboard-readBookmark-Completed', bookmark); + socket.invoke('SendClientResponseJObject', guid, bookmark); }); socket.on('clipboard-writeBookmark', (title, url, type) => { electron_1.clipboard.writeBookmark(title, url, type); }); - socket.on('clipboard-readFindText', () => { + socket.on('clipboard-readFindText', (guid) => { const content = electron_1.clipboard.readFindText(); - electronSocket.emit('clipboard-readFindText-Completed', content); + socket.invoke('SendClientResponseString', guid, content); }); socket.on('clipboard-writeFindText', (text) => { electron_1.clipboard.writeFindText(text); @@ -41,16 +40,16 @@ module.exports = (socket) => { socket.on('clipboard-clear', (type) => { electron_1.clipboard.clear(type); }); - socket.on('clipboard-availableFormats', (type) => { + socket.on('clipboard-availableFormats', (guid, type) => { const formats = electron_1.clipboard.availableFormats(type); - electronSocket.emit('clipboard-availableFormats-Completed', formats); + socket.invoke('SendClientResponseJArray', guid, formats); }); socket.on('clipboard-write', (data, type) => { electron_1.clipboard.write(data, type); }); - socket.on('clipboard-readImage', (type) => { + socket.on('clipboard-readImage', (guid, type) => { const image = electron_1.clipboard.readImage(type); - electronSocket.emit('clipboard-readImage-Completed', { 1: image.toPNG().toString('base64') }); + socket.invoke('SendClientResponseJObject', guid, { 1: image.toPNG().toString('base64') }); }); socket.on('clipboard-writeImage', (data, type) => { const dataContent = JSON.parse(data); diff --git a/ElectronNET.Host/api/clipboard.js.map b/ElectronNET.Host/api/clipboard.js.map index c45e255f..840e6e7b 100644 --- a/ElectronNET.Host/api/clipboard.js.map +++ b/ElectronNET.Host/api/clipboard.js.map @@ -1 +1 @@ -{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["clipboard.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["clipboard.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/clipboard.ts b/ElectronNET.Host/api/clipboard.ts index 6a172299..bfea0ca0 100644 --- a/ElectronNET.Host/api/clipboard.ts +++ b/ElectronNET.Host/api/clipboard.ts @@ -1,48 +1,47 @@ -import { Socket } from 'net'; import { clipboard, nativeImage } from 'electron'; let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; - socket.on('clipboard-readText', (type) => { +export = (socket: SignalR.Hub.Proxy) => { + + socket.on('clipboard-readText', (guid, type) => { const text = clipboard.readText(type); - electronSocket.emit('clipboard-readText-Completed', text); + socket.invoke('SendClientResponseString', guid, text); }); socket.on('clipboard-writeText', (text, type) => { clipboard.writeText(text, type); }); - socket.on('clipboard-readHTML', (type) => { + socket.on('clipboard-readHTML', (guid, type) => { const content = clipboard.readHTML(type); - electronSocket.emit('clipboard-readHTML-Completed', content); + socket.invoke('SendClientResponseString', guid, content); }); socket.on('clipboard-writeHTML', (markup, type) => { clipboard.writeHTML(markup, type); }); - socket.on('clipboard-readRTF', (type) => { + socket.on('clipboard-readRTF', (guid, type) => { const content = clipboard.readRTF(type); - electronSocket.emit('clipboard-readRTF-Completed', content); + socket.invoke('SendClientResponseString', guid, content); }); socket.on('clipboard-writeRTF', (text, type) => { clipboard.writeHTML(text, type); }); - socket.on('clipboard-readBookmark', () => { + socket.on('clipboard-readBookmark', (guid) => { const bookmark = clipboard.readBookmark(); - electronSocket.emit('clipboard-readBookmark-Completed', bookmark); + socket.invoke('SendClientResponseJObject', guid, bookmark); }); socket.on('clipboard-writeBookmark', (title, url, type) => { clipboard.writeBookmark(title, url, type); }); - socket.on('clipboard-readFindText', () => { + socket.on('clipboard-readFindText', (guid) => { const content = clipboard.readFindText(); - electronSocket.emit('clipboard-readFindText-Completed', content); + socket.invoke('SendClientResponseString', guid, content); }); socket.on('clipboard-writeFindText', (text) => { @@ -53,18 +52,18 @@ export = (socket: Socket) => { clipboard.clear(type); }); - socket.on('clipboard-availableFormats', (type) => { + socket.on('clipboard-availableFormats', (guid, type) => { const formats = clipboard.availableFormats(type); - electronSocket.emit('clipboard-availableFormats-Completed', formats); + socket.invoke('SendClientResponseJArray', guid, formats); }); socket.on('clipboard-write', (data, type) => { clipboard.write(data, type); }); - socket.on('clipboard-readImage', (type) => { + socket.on('clipboard-readImage', (guid, type) => { const image = clipboard.readImage(type); - electronSocket.emit('clipboard-readImage-Completed', { 1: image.toPNG().toString('base64') }); + socket.invoke('SendClientResponseJObject', guid, { 1: image.toPNG().toString('base64') }); }); socket.on('clipboard-writeImage', (data, type) => { diff --git a/ElectronNET.Host/api/commandLine.js b/ElectronNET.Host/api/commandLine.js index 527c8b08..89d17abb 100644 --- a/ElectronNET.Host/api/commandLine.js +++ b/ElectronNET.Host/api/commandLine.js @@ -1,20 +1,18 @@ "use strict"; -let electronSocket; module.exports = (socket, app) => { - electronSocket = socket; socket.on('appCommandLineAppendSwitch', (the_switch, value) => { app.commandLine.appendSwitch(the_switch, value); }); socket.on('appCommandLineAppendArgument', (value) => { app.commandLine.appendArgument(value); }); - socket.on('appCommandLineHasSwitch', (value) => { + socket.on('appCommandLineHasSwitch', (guid, value) => { const hasSwitch = app.commandLine.hasSwitch(value); - electronSocket.emit('appCommandLineHasSwitchCompleted', hasSwitch); + socket.invoke('SendClientResponseBool', guid, hasSwitch); }); - socket.on('appCommandLineGetSwitchValue', (the_switch) => { + socket.on('appCommandLineGetSwitchValue', (guid, the_switch) => { const value = app.commandLine.getSwitchValue(the_switch); - electronSocket.emit('appCommandLineGetSwitchValueCompleted', value); + socket.invoke('SendClientResponseString', guid, value); }); }; //# sourceMappingURL=commandLine.js.map \ No newline at end of file diff --git a/ElectronNET.Host/api/commandLine.js.map b/ElectronNET.Host/api/commandLine.js.map index 7d84909c..b4bfb2c0 100644 --- a/ElectronNET.Host/api/commandLine.js.map +++ b/ElectronNET.Host/api/commandLine.js.map @@ -1 +1 @@ -{"version":3,"file":"commandLine.js","sourceRoot":"","sources":["commandLine.ts"],"names":[],"mappings":";AACA,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,GAAiB,EAAE,EAAE;IAC3C,cAAc,GAAG,MAAM,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,UAAkB,EAAE,KAAa,EAAE,EAAE;QAC1E,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,KAAa,EAAE,EAAE;QACxD,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAa,EAAE,EAAE;QACnD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnD,cAAc,CAAC,IAAI,CAAC,kCAAkC,EAAE,SAAS,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,UAAkB,EAAE,EAAE;QAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACzD,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"commandLine.js","sourceRoot":"","sources":["commandLine.ts"],"names":[],"mappings":";AAAA,iBAAS,CAAC,MAAyB,EAAE,GAAiB,EAAE,EAAE;IAEtD,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,UAAkB,EAAE,KAAa,EAAE,EAAE;QAC1E,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,KAAa,EAAE,EAAE;QACxD,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,KAAa,EAAE,EAAE;QACzD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,IAAI,EAAE,UAAkB,EAAE,EAAE;QACnE,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/commandLine.ts b/ElectronNET.Host/api/commandLine.ts index f206b93e..6fecbe42 100644 --- a/ElectronNET.Host/api/commandLine.ts +++ b/ElectronNET.Host/api/commandLine.ts @@ -1,8 +1,4 @@ -import { Socket } from 'net'; -let electronSocket; - -export = (socket: Socket, app: Electron.App) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { socket.on('appCommandLineAppendSwitch', (the_switch: string, value: string) => { app.commandLine.appendSwitch(the_switch, value); @@ -12,13 +8,13 @@ export = (socket: Socket, app: Electron.App) => { app.commandLine.appendArgument(value); }); - socket.on('appCommandLineHasSwitch', (value: string) => { + socket.on('appCommandLineHasSwitch', (guid, value: string) => { const hasSwitch = app.commandLine.hasSwitch(value); - electronSocket.emit('appCommandLineHasSwitchCompleted', hasSwitch); + socket.invoke('SendClientResponseBool', guid, hasSwitch); }); - socket.on('appCommandLineGetSwitchValue', (the_switch: string) => { + socket.on('appCommandLineGetSwitchValue', (guid, the_switch: string) => { const value = app.commandLine.getSwitchValue(the_switch); - electronSocket.emit('appCommandLineGetSwitchValueCompleted', value); + socket.invoke('SendClientResponseString', guid, value); }); }; diff --git a/ElectronNET.Host/api/dialog.js b/ElectronNET.Host/api/dialog.js index 20f9572f..4260376d 100644 --- a/ElectronNET.Host/api/dialog.js +++ b/ElectronNET.Host/api/dialog.js @@ -1,37 +1,35 @@ "use strict"; const electron_1 = require("electron"); -let electronSocket; module.exports = (socket) => { - electronSocket = socket; - socket.on('showMessageBox', async (browserWindow, options, guid) => { + socket.on('showMessageBox', async (guid, browserWindow, options) => { if ('id' in browserWindow) { const window = electron_1.BrowserWindow.fromId(browserWindow.id); const messageBoxReturnValue = await electron_1.dialog.showMessageBox(window, options); - electronSocket.emit('showMessageBoxComplete' + guid, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); + socket.invoke('SendClientResponseJArray', guid, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); } else { - const id = guid || options; const messageBoxReturnValue = await electron_1.dialog.showMessageBox(browserWindow); - electronSocket.emit('showMessageBoxComplete' + id, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); + socket.invoke('SendClientResponseJArray', guid, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); } }); - socket.on('showOpenDialog', async (browserWindow, options, guid) => { + socket.on('showOpenDialog', async (guid, browserWindow, options) => { const window = electron_1.BrowserWindow.fromId(browserWindow.id); const openDialogReturnValue = await electron_1.dialog.showOpenDialog(window, options); - electronSocket.emit('showOpenDialogComplete' + guid, openDialogReturnValue.filePaths || []); + socket.invoke('SendClientResponseJArray', guid, openDialogReturnValue.filePaths || []); }); - socket.on('showSaveDialog', async (browserWindow, options, guid) => { + socket.on('showSaveDialog', async (guid, browserWindow, options) => { const window = electron_1.BrowserWindow.fromId(browserWindow.id); const saveDialogReturnValue = await electron_1.dialog.showSaveDialog(window, options); - electronSocket.emit('showSaveDialogComplete' + guid, saveDialogReturnValue.filePath || ''); + socket.invoke('SendClientResponseString', guid, saveDialogReturnValue.filePath || ''); }); socket.on('showErrorBox', (title, content) => { electron_1.dialog.showErrorBox(title, content); }); - socket.on('showCertificateTrustDialog', async (browserWindow, options, guid) => { + socket.on('showCertificateTrustDialog', async (guid, browserWindow, options) => { const window = electron_1.BrowserWindow.fromId(browserWindow.id); await electron_1.dialog.showCertificateTrustDialog(window, options); - electronSocket.emit('showCertificateTrustDialogComplete' + guid); + // Needed ? + //socket.invoke('showCertificateTrustDialogComplete', guid); }); }; //# sourceMappingURL=dialog.js.map \ No newline at end of file diff --git a/ElectronNET.Host/api/dialog.js.map b/ElectronNET.Host/api/dialog.js.map index 26467177..4f42e872 100644 --- a/ElectronNET.Host/api/dialog.js.map +++ b/ElectronNET.Host/api/dialog.js.map @@ -1 +1 @@ -{"version":3,"file":"dialog.js","sourceRoot":"","sources":["dialog.ts"],"names":[],"mappings":";AACA,uCAAiD;AACjD,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/D,IAAI,IAAI,IAAI,aAAa,EAAE;YACvB,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAEtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3E,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,IAAI,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SACjI;aAAM;YACH,MAAM,EAAE,GAAG,IAAI,IAAI,OAAO,CAAC;YAC3B,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAEzE,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SAC/H;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE3E,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,IAAI,EAAE,qBAAqB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE3E,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,IAAI,EAAE,qBAAqB,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACzC,iBAAM,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,iBAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEzD,cAAc,CAAC,IAAI,CAAC,oCAAoC,GAAG,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"dialog.js","sourceRoot":"","sources":["dialog.ts"],"names":[],"mappings":";AAAA,uCAAiD;AAEjD,iBAAS,CAAC,MAAyB,EAAE,EAAE;IACnC,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,IAAI,IAAI,IAAI,aAAa,EAAE;YACvB,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAEtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SAChI;aAAM;YACH,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAErE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SAChI;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,qBAAqB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,qBAAqB,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACzC,iBAAM,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,iBAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrD,WAAW;QACX,4DAA4D;IACpE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/dialog.ts b/ElectronNET.Host/api/dialog.ts index 932c5fdc..a6d5ce94 100644 --- a/ElectronNET.Host/api/dialog.ts +++ b/ElectronNET.Host/api/dialog.ts @@ -1,45 +1,41 @@ -import { Socket } from 'net'; import { BrowserWindow, dialog } from 'electron'; -let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; - socket.on('showMessageBox', async (browserWindow, options, guid) => { +export = (socket: SignalR.Hub.Proxy) => { + socket.on('showMessageBox', async (guid, browserWindow, options) => { if ('id' in browserWindow) { const window = BrowserWindow.fromId(browserWindow.id); const messageBoxReturnValue = await dialog.showMessageBox(window, options); - electronSocket.emit('showMessageBoxComplete' + guid, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); + socket.invoke('SendClientResponseJArray', guid, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); } else { - const id = guid || options; const messageBoxReturnValue = await dialog.showMessageBox(browserWindow); - electronSocket.emit('showMessageBoxComplete' + id, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); + socket.invoke('SendClientResponseJArray', guid, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); } }); - socket.on('showOpenDialog', async (browserWindow, options, guid) => { + socket.on('showOpenDialog', async (guid, browserWindow, options) => { const window = BrowserWindow.fromId(browserWindow.id); const openDialogReturnValue = await dialog.showOpenDialog(window, options); - electronSocket.emit('showOpenDialogComplete' + guid, openDialogReturnValue.filePaths || []); + socket.invoke('SendClientResponseJArray', guid, openDialogReturnValue.filePaths || []); }); - socket.on('showSaveDialog', async (browserWindow, options, guid) => { + socket.on('showSaveDialog', async (guid, browserWindow, options) => { const window = BrowserWindow.fromId(browserWindow.id); const saveDialogReturnValue = await dialog.showSaveDialog(window, options); - electronSocket.emit('showSaveDialogComplete' + guid, saveDialogReturnValue.filePath || ''); + socket.invoke('SendClientResponseString', guid, saveDialogReturnValue.filePath || ''); }); socket.on('showErrorBox', (title, content) => { dialog.showErrorBox(title, content); }); - socket.on('showCertificateTrustDialog', async (browserWindow, options, guid) => { + socket.on('showCertificateTrustDialog', async (guid, browserWindow, options) => { const window = BrowserWindow.fromId(browserWindow.id); await dialog.showCertificateTrustDialog(window, options); - - electronSocket.emit('showCertificateTrustDialogComplete' + guid); + // Needed ? + //socket.invoke('showCertificateTrustDialogComplete', guid); }); }; diff --git a/ElectronNET.Host/api/dock.js b/ElectronNET.Host/api/dock.js index 7d5010d6..899fb43d 100644 --- a/ElectronNET.Host/api/dock.js +++ b/ElectronNET.Host/api/dock.js @@ -1,11 +1,9 @@ "use strict"; const electron_1 = require("electron"); -let electronSocket; module.exports = (socket) => { - electronSocket = socket; - socket.on('dock-bounce', (type) => { + socket.on('dock-bounce', (guid, type) => { const id = electron_1.app.dock.bounce(type); - electronSocket.emit('dock-bounce-completed', id); + socket.invoke('SendClientResponseString', guid, id); }); socket.on('dock-cancelBounce', (id) => { electron_1.app.dock.cancelBounce(id); @@ -16,9 +14,9 @@ module.exports = (socket) => { socket.on('dock-setBadge', (text) => { electron_1.app.dock.setBadge(text); }); - socket.on('dock-getBadge', () => { + socket.on('dock-getBadge', (guid) => { const text = electron_1.app.dock.getBadge(); - electronSocket.emit('dock-getBadge-completed', text); + socket.invoke('SendClientResponseString', guid, text); }); socket.on('dock-hide', () => { electron_1.app.dock.hide(); @@ -26,24 +24,24 @@ module.exports = (socket) => { socket.on('dock-show', () => { electron_1.app.dock.show(); }); - socket.on('dock-isVisible', () => { + socket.on('dock-isVisible', (guid) => { const isVisible = electron_1.app.dock.isVisible(); - electronSocket.emit('dock-isVisible-completed', isVisible); + socket.invoke('SendClientResponseBool', guid, isVisible); }); socket.on('dock-setMenu', (menuItems) => { let menu = null; if (menuItems) { menu = electron_1.Menu.buildFromTemplate(menuItems); addMenuItemClickConnector(menu.items, (id) => { - electronSocket.emit('dockMenuItemClicked', id); + socket.invoke('DockMenuItemClicked', id); }); } electron_1.app.dock.setMenu(menu); }); // TODO: Menu (macOS) still to be implemented - socket.on('dock-getMenu', () => { + socket.on('dock-getMenu', (guid) => { const menu = electron_1.app.dock.getMenu(); - electronSocket.emit('dock-getMenu-completed', menu); + socket.invoke('SendClientResponseJObject', guid, menu); }); socket.on('dock-setIcon', (image) => { electron_1.app.dock.setIcon(image); diff --git a/ElectronNET.Host/api/dock.js.map b/ElectronNET.Host/api/dock.js.map index 449d44b6..4f8566da 100644 --- a/ElectronNET.Host/api/dock.js.map +++ b/ElectronNET.Host/api/dock.js.map @@ -1 +1 @@ -{"version":3,"file":"dock.js","sourceRoot":"","sources":["dock.ts"],"names":[],"mappings":";AACA,uCAAqC;AACrC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;QAC9B,MAAM,EAAE,GAAG,cAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;QAClC,cAAG,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,QAAQ,EAAE,EAAE;QAC5C,cAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;QAChC,cAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QAC5B,MAAM,IAAI,GAAG,cAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,cAAc,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;QACxB,cAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;QACxB,cAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC7B,MAAM,SAAS,GAAG,cAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACvC,cAAc,CAAC,IAAI,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,EAAE;QACpC,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,IAAI,SAAS,EAAE;YACX,IAAI,GAAG,eAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAEzC,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE;gBACzC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;SACN;QAED,cAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,6CAA6C;IAC7C,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QAC3B,MAAM,IAAI,GAAG,cAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAChC,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;QAChC,cAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,SAAS,yBAAyB,CAAC,SAAS,EAAE,QAAQ;QAClD,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aAC3D;YAED,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE;gBACzB,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7C;QACL,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"dock.js","sourceRoot":"","sources":["dock.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/dock.ts b/ElectronNET.Host/api/dock.ts index bf2b908d..ee290267 100644 --- a/ElectronNET.Host/api/dock.ts +++ b/ElectronNET.Host/api/dock.ts @@ -1,13 +1,10 @@ -import { Socket } from 'net'; import { app, Menu } from 'electron'; -let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy) => { - socket.on('dock-bounce', (type) => { + socket.on('dock-bounce', (guid, type) => { const id = app.dock.bounce(type); - electronSocket.emit('dock-bounce-completed', id); + socket.invoke('SendClientResponseString', guid, id); }); socket.on('dock-cancelBounce', (id) => { @@ -22,9 +19,9 @@ export = (socket: Socket) => { app.dock.setBadge(text); }); - socket.on('dock-getBadge', () => { + socket.on('dock-getBadge', (guid) => { const text = app.dock.getBadge(); - electronSocket.emit('dock-getBadge-completed', text); + socket.invoke('SendClientResponseString', guid, text); }); socket.on('dock-hide', () => { @@ -35,9 +32,9 @@ export = (socket: Socket) => { app.dock.show(); }); - socket.on('dock-isVisible', () => { + socket.on('dock-isVisible', (guid) => { const isVisible = app.dock.isVisible(); - electronSocket.emit('dock-isVisible-completed', isVisible); + socket.invoke('SendClientResponseBool', guid, isVisible); }); socket.on('dock-setMenu', (menuItems) => { @@ -45,9 +42,8 @@ export = (socket: Socket) => { if (menuItems) { menu = Menu.buildFromTemplate(menuItems); - addMenuItemClickConnector(menu.items, (id) => { - electronSocket.emit('dockMenuItemClicked', id); + socket.invoke('DockMenuItemClicked', id); }); } @@ -55,9 +51,9 @@ export = (socket: Socket) => { }); // TODO: Menu (macOS) still to be implemented - socket.on('dock-getMenu', () => { + socket.on('dock-getMenu', (guid) => { const menu = app.dock.getMenu(); - electronSocket.emit('dock-getMenu-completed', menu); + socket.invoke('SendClientResponseJObject', guid, menu); }); socket.on('dock-setIcon', (image) => { diff --git a/ElectronNET.Host/api/globalShortcut.js b/ElectronNET.Host/api/globalShortcut.js index dd018d02..8fe4ff74 100644 --- a/ElectronNET.Host/api/globalShortcut.js +++ b/ElectronNET.Host/api/globalShortcut.js @@ -1,16 +1,14 @@ "use strict"; const electron_1 = require("electron"); -let electronSocket; module.exports = (socket) => { - electronSocket = socket; socket.on('globalShortcut-register', (accelerator) => { electron_1.globalShortcut.register(accelerator, () => { - electronSocket.emit('globalShortcut-pressed', accelerator); + socket.invoke('GlobalShortcutPressed', accelerator); }); }); - socket.on('globalShortcut-isRegistered', (accelerator) => { + socket.on('globalShortcut-isRegistered', (guid, accelerator) => { const isRegistered = electron_1.globalShortcut.isRegistered(accelerator); - electronSocket.emit('globalShortcut-isRegisteredCompleted', isRegistered); + socket.invoke('SendClientResponseBool', guid, isRegistered); }); socket.on('globalShortcut-unregister', (accelerator) => { electron_1.globalShortcut.unregister(accelerator); diff --git a/ElectronNET.Host/api/globalShortcut.js.map b/ElectronNET.Host/api/globalShortcut.js.map index bed5642c..4cbab9af 100644 --- a/ElectronNET.Host/api/globalShortcut.js.map +++ b/ElectronNET.Host/api/globalShortcut.js.map @@ -1 +1 @@ -{"version":3,"file":"globalShortcut.js","sourceRoot":"","sources":["globalShortcut.ts"],"names":[],"mappings":";AAAA,uCAA0C;AAE1C,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,yBAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACtC,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,WAAW,EAAE,EAAE;QACrD,MAAM,YAAY,GAAG,yBAAc,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE9D,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE,YAAY,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,WAAW,EAAE,EAAE;QACnD,yBAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC3C,IAAI;YACA,yBAAc,CAAC,aAAa,EAAE,CAAC;SAClC;QAAC,OAAO,KAAK,EAAE,GAAG;IACvB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"globalShortcut.js","sourceRoot":"","sources":["globalShortcut.ts"],"names":[],"mappings":";AAAA,uCAA0C;AAE1C,iBAAS,CAAC,MAAyB,EAAE,EAAE;IACnC,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,yBAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE;QAC3D,MAAM,YAAY,GAAG,yBAAc,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE9D,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,WAAW,EAAE,EAAE;QACnD,yBAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC3C,IAAI;YACA,yBAAc,CAAC,aAAa,EAAE,CAAC;SAClC;QAAC,OAAO,KAAK,EAAE,GAAG;IACvB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/globalShortcut.ts b/ElectronNET.Host/api/globalShortcut.ts index da9e7652..3e8c7e59 100644 --- a/ElectronNET.Host/api/globalShortcut.ts +++ b/ElectronNET.Host/api/globalShortcut.ts @@ -1,19 +1,16 @@ import { globalShortcut } from 'electron'; -import { Socket } from 'net'; -let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy) => { socket.on('globalShortcut-register', (accelerator) => { globalShortcut.register(accelerator, () => { - electronSocket.emit('globalShortcut-pressed', accelerator); + socket.invoke('GlobalShortcutPressed', accelerator); }); }); - socket.on('globalShortcut-isRegistered', (accelerator) => { + socket.on('globalShortcut-isRegistered', (guid, accelerator) => { const isRegistered = globalShortcut.isRegistered(accelerator); - electronSocket.emit('globalShortcut-isRegisteredCompleted', isRegistered); + socket.invoke('SendClientResponseBool', guid, isRegistered); }); socket.on('globalShortcut-unregister', (accelerator) => { diff --git a/ElectronNET.Host/api/ipc.js b/ElectronNET.Host/api/ipc.js index 4c18ea83..8e9cacb1 100644 --- a/ElectronNET.Host/api/ipc.js +++ b/ElectronNET.Host/api/ipc.js @@ -1,11 +1,9 @@ "use strict"; const electron_1 = require("electron"); -let electronSocket; module.exports = (socket) => { - electronSocket = socket; socket.on('registerIpcMainChannel', (channel) => { electron_1.ipcMain.on(channel, (event, args) => { - electronSocket.emit(channel, [event.preventDefault(), args]); + socket.invoke(channel, [event.preventDefault(), args]); }); }); socket.on('registerSyncIpcMainChannel', (channel) => { @@ -15,12 +13,12 @@ module.exports = (socket) => { socket.on(channel + 'Sync', (result) => { event.returnValue = result; }); - electronSocket.emit(channel, [event.preventDefault(), args]); + socket.invoke(channel, [event.preventDefault(), args]); }); }); socket.on('registerOnceIpcMainChannel', (channel) => { electron_1.ipcMain.once(channel, (event, args) => { - electronSocket.emit(channel, [event.preventDefault(), args]); + socket.invoke(channel, [event.preventDefault(), args]); }); }); socket.on('removeAllListenersIpcMainChannel', (channel) => { diff --git a/ElectronNET.Host/api/ipc.js.map b/ElectronNET.Host/api/ipc.js.map index 2876296b..00a583d9 100644 --- a/ElectronNET.Host/api/ipc.js.map +++ b/ElectronNET.Host/api/ipc.js.map @@ -1 +1 @@ -{"version":3,"file":"ipc.js","sourceRoot":"","sources":["ipc.ts"],"names":[],"mappings":";AAAA,uCAA+D;AAE/D,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE;QAC5C,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QAChD,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,MAAM,CAAC,GAAQ,MAAM,CAAC;YACtB,CAAC,CAAC,kBAAkB,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;YACvC,MAAM,CAAC,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACnC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QAChD,kBAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,YAAY,GAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAkB,CAAC;QAC7G,IAAI,IAAI,GAAgB,IAAI,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC9B,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM;aACT;SACJ;QAED,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC3C;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"ipc.js","sourceRoot":"","sources":["ipc.ts"],"names":[],"mappings":";AAAA,uCAA+D;AAE/D,iBAAS,CAAC,MAAyB,EAAE,EAAE;IAEnC,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE;QAC5C,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QAChD,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,MAAM,CAAC,GAAQ,MAAM,CAAC;YACtB,CAAC,CAAC,kBAAkB,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;YACvC,MAAM,CAAC,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACnC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QAChD,kBAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,YAAY,GAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAkB,CAAC;QAC7G,IAAI,IAAI,GAAgB,IAAI,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC9B,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM;aACT;SACJ;QAED,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC3C;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/ipc.ts b/ElectronNET.Host/api/ipc.ts index 801160f6..2fbb0b9c 100644 --- a/ElectronNET.Host/api/ipc.ts +++ b/ElectronNET.Host/api/ipc.ts @@ -1,12 +1,10 @@ import { ipcMain, BrowserWindow, BrowserView } from 'electron'; -import { Socket } from 'net'; -let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy) => { + socket.on('registerIpcMainChannel', (channel) => { ipcMain.on(channel, (event, args) => { - electronSocket.emit(channel, [event.preventDefault(), args]); + socket.invoke(channel, [event.preventDefault(), args]); }); }); @@ -18,13 +16,13 @@ export = (socket: Socket) => { event.returnValue = result; }); - electronSocket.emit(channel, [event.preventDefault(), args]); + socket.invoke(channel, [event.preventDefault(), args]); }); }); socket.on('registerOnceIpcMainChannel', (channel) => { ipcMain.once(channel, (event, args) => { - electronSocket.emit(channel, [event.preventDefault(), args]); + socket.invoke(channel, [event.preventDefault(), args]); }); }); diff --git a/ElectronNET.Host/api/menu.js b/ElectronNET.Host/api/menu.js index 2500036f..63310110 100644 --- a/ElectronNET.Host/api/menu.js +++ b/ElectronNET.Host/api/menu.js @@ -1,13 +1,11 @@ "use strict"; const electron_1 = require("electron"); const contextMenuItems = (global['contextMenuItems'] = global['contextMenuItems'] || []); -let electronSocket; module.exports = (socket) => { - electronSocket = socket; socket.on('menu-setContextMenu', (browserWindowId, menuItems) => { const menu = electron_1.Menu.buildFromTemplate(menuItems); addContextMenuItemClickConnector(menu.items, browserWindowId, (id, windowId) => { - electronSocket.emit('contextMenuItemClicked', [id, windowId]); + socket.invoke('MenuContextMenuItemClicked', [id, browserWindowId]); }); const index = contextMenuItems.findIndex(contextMenu => contextMenu.browserWindowId === browserWindowId); const contextMenuItem = { @@ -42,7 +40,7 @@ module.exports = (socket) => { socket.on('menu-setApplicationMenu', (menuItems) => { const menu = electron_1.Menu.buildFromTemplate(menuItems); addMenuItemClickConnector(menu.items, (id) => { - electronSocket.emit('menuItemClicked', id); + socket.invoke('MenuMenuItemClicked', id); }); electron_1.Menu.setApplicationMenu(menu); }); diff --git a/ElectronNET.Host/api/menu.js.map b/ElectronNET.Host/api/menu.js.map index 1ad421e4..302296f5 100644 --- a/ElectronNET.Host/api/menu.js.map +++ b/ElectronNET.Host/api/menu.js.map @@ -1 +1 @@ -{"version":3,"file":"menu.js","sourceRoot":"","sources":["menu.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"menu.js","sourceRoot":"","sources":["menu.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/menu.ts b/ElectronNET.Host/api/menu.ts index efadf31d..475f35a8 100644 --- a/ElectronNET.Host/api/menu.ts +++ b/ElectronNET.Host/api/menu.ts @@ -1,15 +1,12 @@ -import { Socket } from 'net'; import { Menu, BrowserWindow } from 'electron'; const contextMenuItems = (global['contextMenuItems'] = global['contextMenuItems'] || []); -let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy) => { socket.on('menu-setContextMenu', (browserWindowId, menuItems) => { const menu = Menu.buildFromTemplate(menuItems); addContextMenuItemClickConnector(menu.items, browserWindowId, (id, windowId) => { - electronSocket.emit('contextMenuItemClicked', [id, windowId]); + socket.invoke('MenuContextMenuItemClicked', [id, browserWindowId]); }); const index = contextMenuItems.findIndex(contextMenu => contextMenu.browserWindowId === browserWindowId); @@ -51,7 +48,7 @@ export = (socket: Socket) => { const menu = Menu.buildFromTemplate(menuItems); addMenuItemClickConnector(menu.items, (id) => { - electronSocket.emit('menuItemClicked', id); + socket.invoke('MenuMenuItemClicked', id); }); Menu.setApplicationMenu(menu); diff --git a/ElectronNET.Host/api/nativeTheme.js b/ElectronNET.Host/api/nativeTheme.js index b971f6bb..a9eaf54f 100644 --- a/ElectronNET.Host/api/nativeTheme.js +++ b/ElectronNET.Host/api/nativeTheme.js @@ -1,30 +1,28 @@ "use strict"; const electron_1 = require("electron"); -let electronSocket; module.exports = (socket) => { - electronSocket = socket; - socket.on('nativeTheme-shouldUseDarkColors', () => { + socket.on('nativeTheme-shouldUseDarkColors', (guid) => { const shouldUseDarkColors = electron_1.nativeTheme.shouldUseDarkColors; - electronSocket.emit('nativeTheme-shouldUseDarkColors-completed', shouldUseDarkColors); + socket.invoke('SendClientResponseBool', guid, shouldUseDarkColors); }); - socket.on('nativeTheme-shouldUseHighContrastColors', () => { + socket.on('nativeTheme-shouldUseHighContrastColors', (guid) => { const shouldUseHighContrastColors = electron_1.nativeTheme.shouldUseHighContrastColors; - electronSocket.emit('nativeTheme-shouldUseHighContrastColors-completed', shouldUseHighContrastColors); + socket.invoke('SendClientResponseBool', guid, shouldUseHighContrastColors); }); - socket.on('nativeTheme-shouldUseInvertedColorScheme', () => { + socket.on('nativeTheme-shouldUseInvertedColorScheme', (guid) => { const shouldUseInvertedColorScheme = electron_1.nativeTheme.shouldUseInvertedColorScheme; - electronSocket.emit('nativeTheme-shouldUseInvertedColorScheme-completed', shouldUseInvertedColorScheme); + socket.invoke('SendClientResponseBool', guid, shouldUseInvertedColorScheme); }); - socket.on('nativeTheme-themeSource-get', () => { + socket.on('nativeTheme-themeSource-get', (guid) => { const themeSource = electron_1.nativeTheme.themeSource; - electronSocket.emit('nativeTheme-themeSource-getCompleted', themeSource); + socket.invoke('SendClientResponseString', guid, themeSource); }); socket.on('nativeTheme-themeSource', (themeSource) => { electron_1.nativeTheme.themeSource = themeSource; }); socket.on('register-nativeTheme-updated-event', (id) => { electron_1.nativeTheme.on('updated', () => { - electronSocket.emit('nativeTheme-updated' + id); + socket.invoke('NativeThemeOnChanged', id); }); }); }; diff --git a/ElectronNET.Host/api/nativeTheme.js.map b/ElectronNET.Host/api/nativeTheme.js.map index 5f4bfd4d..c0c609f4 100644 --- a/ElectronNET.Host/api/nativeTheme.js.map +++ b/ElectronNET.Host/api/nativeTheme.js.map @@ -1 +1 @@ -{"version":3,"file":"nativeTheme.js","sourceRoot":"","sources":["nativeTheme.ts"],"names":[],"mappings":";AACA,uCAAuC;AACvC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC9C,MAAM,mBAAmB,GAAG,sBAAW,CAAC,mBAAmB,CAAC;QAE5D,cAAc,CAAC,IAAI,CAAC,2CAA2C,EAAE,mBAAmB,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACtD,MAAM,2BAA2B,GAAG,sBAAW,CAAC,2BAA2B,CAAC;QAE5E,cAAc,CAAC,IAAI,CAAC,mDAAmD,EAAE,2BAA2B,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACvD,MAAM,4BAA4B,GAAG,sBAAW,CAAC,4BAA4B,CAAC;QAE9E,cAAc,CAAC,IAAI,CAAC,oDAAoD,EAAE,4BAA4B,CAAC,CAAC;IAC5G,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC1C,MAAM,WAAW,GAAG,sBAAW,CAAC,WAAW,CAAC;QAE5C,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,sBAAW,CAAC,WAAW,GAAG,WAAW,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,sBAAW,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC3B,cAAc,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"nativeTheme.js","sourceRoot":"","sources":["nativeTheme.ts"],"names":[],"mappings":";AAAA,uCAAuC;AAEvC,iBAAS,CAAC,MAAyB,EAAE,EAAE;IAEnC,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,IAAI,EAAE,EAAE;QAClD,MAAM,mBAAmB,GAAG,sBAAW,CAAC,mBAAmB,CAAC;QAE5D,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1D,MAAM,2BAA2B,GAAG,sBAAW,CAAC,2BAA2B,CAAC;QAE5E,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,2BAA2B,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3D,MAAM,4BAA4B,GAAG,sBAAW,CAAC,4BAA4B,CAAC;QAE9E,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,4BAA4B,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC9C,MAAM,WAAW,GAAG,sBAAW,CAAC,WAAW,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,sBAAW,CAAC,WAAW,GAAG,WAAW,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,sBAAW,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC3B,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/nativeTheme.ts b/ElectronNET.Host/api/nativeTheme.ts index 16d22cdc..d5522d51 100644 --- a/ElectronNET.Host/api/nativeTheme.ts +++ b/ElectronNET.Host/api/nativeTheme.ts @@ -1,32 +1,29 @@ -import { Socket } from 'net'; import { nativeTheme } from 'electron'; -let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy) => { - socket.on('nativeTheme-shouldUseDarkColors', () => { + socket.on('nativeTheme-shouldUseDarkColors', (guid) => { const shouldUseDarkColors = nativeTheme.shouldUseDarkColors; - electronSocket.emit('nativeTheme-shouldUseDarkColors-completed', shouldUseDarkColors); + socket.invoke('SendClientResponseBool', guid, shouldUseDarkColors); }); - socket.on('nativeTheme-shouldUseHighContrastColors', () => { + socket.on('nativeTheme-shouldUseHighContrastColors', (guid) => { const shouldUseHighContrastColors = nativeTheme.shouldUseHighContrastColors; - electronSocket.emit('nativeTheme-shouldUseHighContrastColors-completed', shouldUseHighContrastColors); + socket.invoke('SendClientResponseBool', guid, shouldUseHighContrastColors); }); - socket.on('nativeTheme-shouldUseInvertedColorScheme', () => { + socket.on('nativeTheme-shouldUseInvertedColorScheme', (guid) => { const shouldUseInvertedColorScheme = nativeTheme.shouldUseInvertedColorScheme; - electronSocket.emit('nativeTheme-shouldUseInvertedColorScheme-completed', shouldUseInvertedColorScheme); + socket.invoke('SendClientResponseBool', guid, shouldUseInvertedColorScheme); }); - socket.on('nativeTheme-themeSource-get', () => { + socket.on('nativeTheme-themeSource-get', (guid) => { const themeSource = nativeTheme.themeSource; - electronSocket.emit('nativeTheme-themeSource-getCompleted', themeSource); + socket.invoke('SendClientResponseString', guid, themeSource); }); socket.on('nativeTheme-themeSource', (themeSource) => { @@ -35,7 +32,7 @@ export = (socket: Socket) => { socket.on('register-nativeTheme-updated-event', (id) => { nativeTheme.on('updated', () => { - electronSocket.emit('nativeTheme-updated' + id); + socket.invoke('NativeThemeOnChanged', id); }); }); }; diff --git a/ElectronNET.Host/api/notification.js b/ElectronNET.Host/api/notification.js index 3a575cf2..70f00d4a 100644 --- a/ElectronNET.Host/api/notification.js +++ b/ElectronNET.Host/api/notification.js @@ -1,40 +1,38 @@ "use strict"; const electron_1 = require("electron"); const notifications = (global['notifications'] = global['notifications'] || []); -let electronSocket; module.exports = (socket) => { - electronSocket = socket; socket.on('createNotification', (options) => { const notification = new electron_1.Notification(options); let haveEvent = false; if (options.showID) { haveEvent = true; notification.on('show', () => { - electronSocket.emit('NotificationEventShow', options.showID); + socket.invoke('NotificationEventOnShow', options.showID); }); } if (options.clickID) { haveEvent = true; notification.on('click', () => { - electronSocket.emit('NotificationEventClick', options.clickID); + socket.invoke('NotificationEventOnClick', options.clickID); }); } if (options.closeID) { haveEvent = true; notification.on('close', () => { - electronSocket.emit('NotificationEventClose', options.closeID); + socket.invoke('NotificationEventOnClose', options.closeID); }); } if (options.replyID) { haveEvent = true; notification.on('reply', (event, value) => { - electronSocket.emit('NotificationEventReply', [options.replyID, value]); + socket.invoke('NotificationEventOnReply', [options.replyID, value]); }); } if (options.actionID) { haveEvent = true; notification.on('action', (event, value) => { - electronSocket.emit('NotificationEventAction', [options.actionID, value]); + socket.invoke('NotificationEventOnAction', [options.actionID, value]); }); } if (haveEvent) { @@ -42,9 +40,9 @@ module.exports = (socket) => { } notification.show(); }); - socket.on('notificationIsSupported', () => { + socket.on('notificationIsSupported', (guid) => { const isSupported = electron_1.Notification.isSupported; - electronSocket.emit('notificationIsSupportedComplete', isSupported); + socket.invoke('SendClientResponseBool', guid, isSupported); }); }; //# sourceMappingURL=notification.js.map \ No newline at end of file diff --git a/ElectronNET.Host/api/notification.js.map b/ElectronNET.Host/api/notification.js.map index f6e58d46..77b0841c 100644 --- a/ElectronNET.Host/api/notification.js.map +++ b/ElectronNET.Host/api/notification.js.map @@ -1 +1 @@ -{"version":3,"file":"notification.js","sourceRoot":"","sources":["notification.ts"],"names":[],"mappings":";AACA,uCAAwC;AACxC,MAAM,aAAa,GAA4B,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAA4B,CAAC;AACpI,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG,IAAI,uBAAY,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,OAAO,CAAC,MAAM,EAAE;YAChB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACzB,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC1B,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC1B,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtC,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE;YAClB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACvC,cAAc,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC;SACN;QAED,IAAI,SAAS,EAAE;YACX,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACpC;QAED,YAAY,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACtC,MAAM,WAAW,GAAG,uBAAY,CAAC,WAAW,CAAC;QAC7C,cAAc,CAAC,IAAI,CAAC,iCAAiC,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"notification.js","sourceRoot":"","sources":["notification.ts"],"names":[],"mappings":";AAAA,uCAAwC;AACxC,MAAM,aAAa,GAA4B,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAA4B,CAAC;AAEpI,iBAAS,CAAC,MAAyB,EAAE,EAAE;IACnC,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG,IAAI,uBAAY,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,OAAO,CAAC,MAAM,EAAE;YAChB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACzB,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC1B,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC1B,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE;YAClB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACvC,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;SACN;QAED,IAAI,SAAS,EAAE;YACX,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACpC;QAED,YAAY,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,WAAW,GAAG,uBAAY,CAAC,WAAW,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/notification.ts b/ElectronNET.Host/api/notification.ts index 50f1a2d6..d1e9cdd5 100644 --- a/ElectronNET.Host/api/notification.ts +++ b/ElectronNET.Host/api/notification.ts @@ -1,10 +1,7 @@ -import { Socket } from 'net'; import { Notification } from 'electron'; const notifications: Electron.Notification[] = (global['notifications'] = global['notifications'] || []) as Electron.Notification[]; -let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy) => { socket.on('createNotification', (options) => { const notification = new Notification(options); let haveEvent = false; @@ -12,35 +9,35 @@ export = (socket: Socket) => { if (options.showID) { haveEvent = true; notification.on('show', () => { - electronSocket.emit('NotificationEventShow', options.showID); + socket.invoke('NotificationEventOnShow', options.showID); }); } if (options.clickID) { haveEvent = true; notification.on('click', () => { - electronSocket.emit('NotificationEventClick', options.clickID); + socket.invoke('NotificationEventOnClick', options.clickID); }); } if (options.closeID) { haveEvent = true; notification.on('close', () => { - electronSocket.emit('NotificationEventClose', options.closeID); + socket.invoke('NotificationEventOnClose', options.closeID); }); } if (options.replyID) { haveEvent = true; notification.on('reply', (event, value) => { - electronSocket.emit('NotificationEventReply', [options.replyID, value]); + socket.invoke('NotificationEventOnReply', [options.replyID, value]); }); } if (options.actionID) { haveEvent = true; notification.on('action', (event, value) => { - electronSocket.emit('NotificationEventAction', [options.actionID, value]); + socket.invoke('NotificationEventOnAction', [options.actionID, value]); }); } @@ -51,8 +48,8 @@ export = (socket: Socket) => { notification.show(); }); - socket.on('notificationIsSupported', () => { + socket.on('notificationIsSupported', (guid) => { const isSupported = Notification.isSupported; - electronSocket.emit('notificationIsSupportedComplete', isSupported); + socket.invoke('SendClientResponseBool', guid, isSupported); }); }; diff --git a/ElectronNET.Host/api/powerMonitor.js b/ElectronNET.Host/api/powerMonitor.js index 0b4dd7a6..4b2caaf5 100644 --- a/ElectronNET.Host/api/powerMonitor.js +++ b/ElectronNET.Host/api/powerMonitor.js @@ -1,41 +1,39 @@ "use strict"; const electron_1 = require("electron"); -let electronSocket; module.exports = (socket) => { - electronSocket = socket; socket.on('register-pm-lock-screen', () => { electron_1.powerMonitor.on('lock-screen', () => { - electronSocket.emit('pm-lock-screen'); + socket.invoke('TriggerOnLockScreen'); }); }); socket.on('register-pm-unlock-screen', () => { electron_1.powerMonitor.on('unlock-screen', () => { - electronSocket.emit('pm-unlock-screen'); + socket.invoke('PowerMonitorOnUnLockScreen'); }); }); socket.on('register-pm-suspend', () => { electron_1.powerMonitor.on('suspend', () => { - electronSocket.emit('pm-suspend'); + socket.invoke('PowerMonitorOnSuspend'); }); }); socket.on('register-pm-resume', () => { electron_1.powerMonitor.on('resume', () => { - electronSocket.emit('pm-resume'); + socket.invoke('PowerMonitorOnResume'); }); }); socket.on('register-pm-on-ac', () => { electron_1.powerMonitor.on('on-ac', () => { - electronSocket.emit('pm-on-ac'); + socket.invoke('PowerMonitorOnAC'); }); }); socket.on('register-pm-on-battery', () => { electron_1.powerMonitor.on('on-battery', () => { - electronSocket.emit('pm-on-battery'); + socket.invoke('PowerMonitorOnBattery'); }); }); socket.on('register-pm-shutdown', () => { electron_1.powerMonitor.on('shutdown', () => { - electronSocket.emit('pm-shutdown'); + socket.invoke('PowerMonitorOnShutdown'); }); }); }; diff --git a/ElectronNET.Host/api/powerMonitor.js.map b/ElectronNET.Host/api/powerMonitor.js.map index f83530e0..c45f8ee3 100644 --- a/ElectronNET.Host/api/powerMonitor.js.map +++ b/ElectronNET.Host/api/powerMonitor.js.map @@ -1 +1 @@ -{"version":3,"file":"powerMonitor.js","sourceRoot":"","sources":["powerMonitor.ts"],"names":[],"mappings":";AACA,uCAAwC;AACxC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACtC,uBAAY,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YAChC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACxC,uBAAY,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAClC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAClC,uBAAY,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC5B,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QACjC,uBAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC3B,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAChC,uBAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACrC,uBAAY,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YAC/B,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACnC,uBAAY,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAC7B,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"powerMonitor.js","sourceRoot":"","sources":["powerMonitor.ts"],"names":[],"mappings":";AAAA,uCAAwC;AAExC,iBAAS,CAAC,MAAyB,EAAE,EAAE;IACnC,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACtC,uBAAY,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACxC,uBAAY,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAClC,uBAAY,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC5B,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QACjC,uBAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC3B,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAChC,uBAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACrC,uBAAY,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACnC,uBAAY,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAC7B,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/powerMonitor.ts b/ElectronNET.Host/api/powerMonitor.ts index f4c1fd45..5d3b6631 100644 --- a/ElectronNET.Host/api/powerMonitor.ts +++ b/ElectronNET.Host/api/powerMonitor.ts @@ -1,42 +1,39 @@ -import { Socket } from 'net'; import { powerMonitor } from 'electron'; -let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy) => { socket.on('register-pm-lock-screen', () => { powerMonitor.on('lock-screen', () => { - electronSocket.emit('pm-lock-screen'); + socket.invoke('TriggerOnLockScreen'); }); }); socket.on('register-pm-unlock-screen', () => { powerMonitor.on('unlock-screen', () => { - electronSocket.emit('pm-unlock-screen'); + socket.invoke('PowerMonitorOnUnLockScreen'); }); }); socket.on('register-pm-suspend', () => { powerMonitor.on('suspend', () => { - electronSocket.emit('pm-suspend'); + socket.invoke('PowerMonitorOnSuspend'); }); }); socket.on('register-pm-resume', () => { powerMonitor.on('resume', () => { - electronSocket.emit('pm-resume'); + socket.invoke('PowerMonitorOnResume'); }); }); socket.on('register-pm-on-ac', () => { powerMonitor.on('on-ac', () => { - electronSocket.emit('pm-on-ac'); + socket.invoke('PowerMonitorOnAC'); }); }); socket.on('register-pm-on-battery', () => { powerMonitor.on('on-battery', () => { - electronSocket.emit('pm-on-battery'); + socket.invoke('PowerMonitorOnBattery'); }); }); socket.on('register-pm-shutdown', () => { powerMonitor.on('shutdown', () => { - electronSocket.emit('pm-shutdown'); + socket.invoke('PowerMonitorOnShutdown'); }); }); }; diff --git a/ElectronNET.Host/api/screen.js b/ElectronNET.Host/api/screen.js index cfd025a3..e49d25c4 100644 --- a/ElectronNET.Host/api/screen.js +++ b/ElectronNET.Host/api/screen.js @@ -1,46 +1,44 @@ "use strict"; const electron_1 = require("electron"); -let electronSocket; module.exports = (socket) => { - electronSocket = socket; socket.on('register-screen-display-added', (id) => { electron_1.screen.on('display-added', (event, display) => { - electronSocket.emit('screen-display-added-event' + id, display); + socket.invoke('ScreenOnDisplayAdded', id, display); }); }); socket.on('register-screen-display-removed', (id) => { electron_1.screen.on('display-removed', (event, display) => { - electronSocket.emit('screen-display-removed-event' + id, display); + socket.invoke('ScreenOnDisplayRemoved', id, display); }); }); socket.on('register-screen-display-metrics-changed', (id) => { electron_1.screen.on('display-metrics-changed', (event, display, changedMetrics) => { - electronSocket.emit('screen-display-metrics-changed-event' + id, [display, changedMetrics]); + socket.invoke('ScreenOnDisplayMetricsChanged', id, [display, changedMetrics]); }); }); - socket.on('screen-getCursorScreenPoint', () => { + socket.on('screen-getCursorScreenPoint', (guid) => { const point = electron_1.screen.getCursorScreenPoint(); - electronSocket.emit('screen-getCursorScreenPointCompleted', point); + socket.invoke('SendClientResponseJObject', guid, point); }); - socket.on('screen-getMenuBarHeight', () => { + socket.on('screen-getMenuBarHeight', (guid) => { const height = electron_1.screen.getPrimaryDisplay().workArea; - electronSocket.emit('screen-getMenuBarHeightCompleted', height); + socket.invoke('SendClientResponseString', guid, height); }); - socket.on('screen-getPrimaryDisplay', () => { + socket.on('screen-getPrimaryDisplay', (guid) => { const display = electron_1.screen.getPrimaryDisplay(); - electronSocket.emit('screen-getPrimaryDisplayCompleted', display); + socket.invoke('SendClientResponseJObject', guid, display); }); - socket.on('screen-getAllDisplays', () => { + socket.on('screen-getAllDisplays', (guid) => { const display = electron_1.screen.getAllDisplays(); - electronSocket.emit('screen-getAllDisplaysCompleted', display); + socket.invoke('SendClientResponseJArray', guid, display); }); - socket.on('screen-getDisplayNearestPoint', (point) => { + socket.on('screen-getDisplayNearestPoint', (guid, point) => { const display = electron_1.screen.getDisplayNearestPoint(point); - electronSocket.emit('screen-getDisplayNearestPointCompleted', display); + socket.invoke('SendClientResponseJObject', guid, display); }); - socket.on('screen-getDisplayMatching', (rectangle) => { + socket.on('screen-getDisplayMatching', (guid, rectangle) => { const display = electron_1.screen.getDisplayMatching(rectangle); - electronSocket.emit('screen-getDisplayMatchingCompleted', display); + socket.invoke('SendClientResponseJObject', guid, display); }); }; //# sourceMappingURL=screen.js.map \ No newline at end of file diff --git a/ElectronNET.Host/api/screen.js.map b/ElectronNET.Host/api/screen.js.map index 1514a5e9..915b04aa 100644 --- a/ElectronNET.Host/api/screen.js.map +++ b/ElectronNET.Host/api/screen.js.map @@ -1 +1 @@ -{"version":3,"file":"screen.js","sourceRoot":"","sources":["screen.ts"],"names":[],"mappings":";AACA,uCAAkC;AAClC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,iBAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1C,cAAc,CAAC,IAAI,CAAC,4BAA4B,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,iBAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5C,cAAc,CAAC,IAAI,CAAC,8BAA8B,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,EAAE,EAAE;QACxD,iBAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;YACpE,cAAc,CAAC,IAAI,CAAC,sCAAsC,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QAChG,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,iBAAM,CAAC,oBAAoB,EAAE,CAAC;QAC5C,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QACnD,cAAc,CAAC,IAAI,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACvC,MAAM,OAAO,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3C,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACpC,MAAM,OAAO,GAAG,iBAAM,CAAC,cAAc,EAAE,CAAC;QACxC,cAAc,CAAC,IAAI,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,iBAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACrD,cAAc,CAAC,IAAI,CAAC,wCAAwC,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,SAAS,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,iBAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrD,cAAc,CAAC,IAAI,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"screen.js","sourceRoot":"","sources":["screen.ts"],"names":[],"mappings":";AAAA,uCAAkC;AAElC,iBAAS,CAAC,MAAyB,EAAE,EAAE;IAEnC,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,iBAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1C,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,iBAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,EAAE,EAAE;QACxD,iBAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;YACpE,MAAM,CAAC,MAAM,CAAC,+BAA+B,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,iBAAM,CAAC,oBAAoB,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,iBAAM,CAAC,cAAc,EAAE,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,iBAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,iBAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/screen.ts b/ElectronNET.Host/api/screen.ts index 3a8b91cc..454c3d24 100644 --- a/ElectronNET.Host/api/screen.ts +++ b/ElectronNET.Host/api/screen.ts @@ -1,54 +1,52 @@ -import { Socket } from 'net'; import { screen } from 'electron'; -let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy) => { + socket.on('register-screen-display-added', (id) => { screen.on('display-added', (event, display) => { - electronSocket.emit('screen-display-added-event' + id, display); + socket.invoke('ScreenOnDisplayAdded', id, display); }); }); socket.on('register-screen-display-removed', (id) => { screen.on('display-removed', (event, display) => { - electronSocket.emit('screen-display-removed-event' + id, display); + socket.invoke('ScreenOnDisplayRemoved', id, display); }); }); socket.on('register-screen-display-metrics-changed', (id) => { screen.on('display-metrics-changed', (event, display, changedMetrics) => { - electronSocket.emit('screen-display-metrics-changed-event' + id, [display, changedMetrics]); + socket.invoke('ScreenOnDisplayMetricsChanged', id, [display, changedMetrics]); }); }); - socket.on('screen-getCursorScreenPoint', () => { + socket.on('screen-getCursorScreenPoint', (guid) => { const point = screen.getCursorScreenPoint(); - electronSocket.emit('screen-getCursorScreenPointCompleted', point); + socket.invoke('SendClientResponseJObject', guid, point); }); - socket.on('screen-getMenuBarHeight', () => { + socket.on('screen-getMenuBarHeight', (guid) => { const height = screen.getPrimaryDisplay().workArea; - electronSocket.emit('screen-getMenuBarHeightCompleted', height); + socket.invoke('SendClientResponseString', guid, height); }); - socket.on('screen-getPrimaryDisplay', () => { + socket.on('screen-getPrimaryDisplay', (guid) => { const display = screen.getPrimaryDisplay(); - electronSocket.emit('screen-getPrimaryDisplayCompleted', display); + socket.invoke('SendClientResponseJObject', guid, display); }); - socket.on('screen-getAllDisplays', () => { + socket.on('screen-getAllDisplays', (guid) => { const display = screen.getAllDisplays(); - electronSocket.emit('screen-getAllDisplaysCompleted', display); + socket.invoke('SendClientResponseJArray', guid, display); }); - socket.on('screen-getDisplayNearestPoint', (point) => { + socket.on('screen-getDisplayNearestPoint', (guid, point) => { const display = screen.getDisplayNearestPoint(point); - electronSocket.emit('screen-getDisplayNearestPointCompleted', display); + socket.invoke('SendClientResponseJObject', guid, display); }); - socket.on('screen-getDisplayMatching', (rectangle) => { + socket.on('screen-getDisplayMatching', (guid, rectangle) => { const display = screen.getDisplayMatching(rectangle); - electronSocket.emit('screen-getDisplayMatchingCompleted', display); + socket.invoke('SendClientResponseJObject', guid, display); }); }; diff --git a/ElectronNET.Host/api/shell.js b/ElectronNET.Host/api/shell.js index 0bf8c89e..2dd72ca4 100644 --- a/ElectronNET.Host/api/shell.js +++ b/ElectronNET.Host/api/shell.js @@ -1,31 +1,29 @@ "use strict"; const electron_1 = require("electron"); -let electronSocket; module.exports = (socket) => { - electronSocket = socket; - socket.on('shell-showItemInFolder', (fullPath) => { + socket.on('shell-showItemInFolder', (guid, fullPath) => { electron_1.shell.showItemInFolder(fullPath); - electronSocket.emit('shell-showItemInFolderCompleted'); + socket.invoke('SendClientResponseBool', guid, true); }); - socket.on('shell-openPath', async (path) => { + socket.on('shell-openPath', async (guid, path) => { const errorMessage = await electron_1.shell.openPath(path); - electronSocket.emit('shell-openPathCompleted', errorMessage); + socket.invoke('SendClientResponseString', guid, errorMessage); }); - socket.on('shell-openExternal', async (url, options) => { + socket.on('shell-openExternal', async (guid, url) => { let result = ''; - if (options) { - await electron_1.shell.openExternal(url, options).catch(e => { - result = e.message; - }); - } - else { - await electron_1.shell.openExternal(url).catch((e) => { - result = e.message; - }); - } - electronSocket.emit('shell-openExternalCompleted', result); + await electron_1.shell.openExternal(url).catch((e) => { + result = e.message; + }); + socket.invoke('SendClientResponseString', guid, result); + }); + socket.on('shell-openExternal-options', async (guid, url, options) => { + let result = ''; + await electron_1.shell.openExternal(url, options).catch(e => { + result = e.message; + }); + socket.invoke('SendClientResponseString', guid, result); }); - socket.on('shell-trashItem', async (fullPath, deleteOnFail) => { + socket.on('shell-trashItem', async (guid, fullPath, deleteOnFail) => { let success = false; try { await electron_1.shell.trashItem(fullPath); @@ -34,18 +32,18 @@ module.exports = (socket) => { catch (error) { success = false; } - electronSocket.emit('shell-trashItem-completed', success); + socket.invoke('SendClientResponseBool', guid, success); }); socket.on('shell-beep', () => { electron_1.shell.beep(); }); - socket.on('shell-writeShortcutLink', (shortcutPath, operation, options) => { + socket.on('shell-writeShortcutLink', (guid, shortcutPath, operation, options) => { const success = electron_1.shell.writeShortcutLink(shortcutPath, operation, options); - electronSocket.emit('shell-writeShortcutLinkCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); }); - socket.on('shell-readShortcutLink', (shortcutPath) => { + socket.on('shell-readShortcutLink', (guid, shortcutPath) => { const shortcutDetails = electron_1.shell.readShortcutLink(shortcutPath); - electronSocket.emit('shell-readShortcutLinkCompleted', shortcutDetails); + socket.invoke('SendClientResponseJObject', guid, shortcutDetails); }); }; //# sourceMappingURL=shell.js.map \ No newline at end of file diff --git a/ElectronNET.Host/api/shell.js.map b/ElectronNET.Host/api/shell.js.map index 83dbfa2b..7a965b48 100644 --- a/ElectronNET.Host/api/shell.js.map +++ b/ElectronNET.Host/api/shell.js.map @@ -1 +1 @@ -{"version":3,"file":"shell.js","sourceRoot":"","sources":["shell.ts"],"names":[],"mappings":";AACA,uCAAiC;AACjC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,QAAQ,EAAE,EAAE;QAC7C,gBAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEjC,cAAc,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvC,MAAM,YAAY,GAAG,MAAM,gBAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QACnD,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,OAAO,EAAE;YACT,MAAM,gBAAK,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC7C,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;YACvB,CAAC,CAAC,CAAC;SACN;aAAM;YACH,MAAM,gBAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;YACvB,CAAC,CAAC,CAAC;SACN;QAED,cAAc,CAAC,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE;QAC1D,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,IAAI;YACA,MAAM,gBAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAChC,OAAO,GAAG,IAAI,CAAC;SAClB;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,GAAG,KAAK,CAAC;SACnB;QAED,cAAc,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QACzB,gBAAK,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QACtE,MAAM,OAAO,GAAG,gBAAK,CAAC,iBAAiB,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAE1E,cAAc,CAAC,IAAI,CAAC,kCAAkC,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,YAAY,EAAE,EAAE;QACjD,MAAM,eAAe,GAAG,gBAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAE7D,cAAc,CAAC,IAAI,CAAC,iCAAiC,EAAE,eAAe,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"shell.js","sourceRoot":"","sources":["shell.ts"],"names":[],"mappings":";AAAA,uCAAiC;AAEjC,iBAAS,CAAC,MAAyB,EAAE,EAAE;IAEnC,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;QACnD,gBAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEjC,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC7C,MAAM,YAAY,GAAG,MAAM,gBAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAChD,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,MAAM,gBAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACtC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QACjE,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,MAAM,gBAAK,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAC7C,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE;QAChE,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,IAAI;YACA,MAAM,gBAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAChC,OAAO,GAAG,IAAI,CAAC;SAClB;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,GAAG,KAAK,CAAC;SACnB;QAED,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QACzB,gBAAK,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAC5E,MAAM,OAAO,GAAG,gBAAK,CAAC,iBAAiB,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAE1E,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE;QACvD,MAAM,eAAe,GAAG,gBAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAE7D,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/shell.ts b/ElectronNET.Host/api/shell.ts index 9a0dfd7f..8859f413 100644 --- a/ElectronNET.Host/api/shell.ts +++ b/ElectronNET.Host/api/shell.ts @@ -1,38 +1,40 @@ -import { Socket } from 'net'; import { shell } from 'electron'; -let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; - socket.on('shell-showItemInFolder', (fullPath) => { +export = (socket: SignalR.Hub.Proxy) => { + + socket.on('shell-showItemInFolder', (guid, fullPath) => { shell.showItemInFolder(fullPath); - electronSocket.emit('shell-showItemInFolderCompleted'); + socket.invoke('SendClientResponseBool', guid, true); }); - socket.on('shell-openPath', async (path) => { + socket.on('shell-openPath', async (guid, path) => { const errorMessage = await shell.openPath(path); - electronSocket.emit('shell-openPathCompleted', errorMessage); + socket.invoke('SendClientResponseString', guid, errorMessage); }); - socket.on('shell-openExternal', async (url, options) => { + socket.on('shell-openExternal', async (guid, url) => { let result = ''; - if (options) { - await shell.openExternal(url, options).catch(e => { - result = e.message; - }); - } else { - await shell.openExternal(url).catch((e) => { - result = e.message; - }); - } + await shell.openExternal(url).catch((e) => { + result = e.message; + }); - electronSocket.emit('shell-openExternalCompleted', result); + socket.invoke('SendClientResponseString', guid, result); }); - socket.on('shell-trashItem', async (fullPath, deleteOnFail) => { + socket.on('shell-openExternal-options', async (guid, url, options) => { + let result = ''; + + await shell.openExternal(url, options).catch(e => { + result = e.message; + }); + + socket.invoke('SendClientResponseString', guid, result); + }); + + socket.on('shell-trashItem', async (guid, fullPath, deleteOnFail) => { let success = false; try { @@ -42,22 +44,22 @@ export = (socket: Socket) => { success = false; } - electronSocket.emit('shell-trashItem-completed', success); + socket.invoke('SendClientResponseBool', guid, success); }); socket.on('shell-beep', () => { shell.beep(); }); - socket.on('shell-writeShortcutLink', (shortcutPath, operation, options) => { + socket.on('shell-writeShortcutLink', (guid, shortcutPath, operation, options) => { const success = shell.writeShortcutLink(shortcutPath, operation, options); - electronSocket.emit('shell-writeShortcutLinkCompleted', success); + socket.invoke('SendClientResponseBool', guid, success); }); - socket.on('shell-readShortcutLink', (shortcutPath) => { + socket.on('shell-readShortcutLink', (guid, shortcutPath) => { const shortcutDetails = shell.readShortcutLink(shortcutPath); - electronSocket.emit('shell-readShortcutLinkCompleted', shortcutDetails); + socket.invoke('SendClientResponseJObject', guid, shortcutDetails); }); }; diff --git a/ElectronNET.Host/api/tray.js b/ElectronNET.Host/api/tray.js index 98fb740c..c783286f 100644 --- a/ElectronNET.Host/api/tray.js +++ b/ElectronNET.Host/api/tray.js @@ -3,46 +3,45 @@ const electron_1 = require("electron"); let tray = (global['$tray'] = global['tray'] || { value: null }); let electronSocket; module.exports = (socket) => { - electronSocket = socket; socket.on('register-tray-click', (id) => { if (tray.value) { tray.value.on('click', (event, bounds) => { - electronSocket.emit('tray-click-event' + id, [event.__proto__, bounds]); + socket.invoke('TrayOnClick', id, [event.__proto__, bounds]); }); } }); socket.on('register-tray-right-click', (id) => { if (tray.value) { tray.value.on('right-click', (event, bounds) => { - electronSocket.emit('tray-right-click-event' + id, [event.__proto__, bounds]); + socket.invoke('TrayOnRightClick', id, [event.__proto__, bounds]); }); } }); socket.on('register-tray-double-click', (id) => { if (tray.value) { tray.value.on('double-click', (event, bounds) => { - electronSocket.emit('tray-double-click-event' + id, [event.__proto__, bounds]); + socket.invoke('TrayOnDoubleClick', id, [event.__proto__, bounds]); }); } }); socket.on('register-tray-balloon-show', (id) => { if (tray.value) { tray.value.on('balloon-show', () => { - electronSocket.emit('tray-balloon-show-event' + id); + socket.invoke('TrayOnBalloonShow', id); }); } }); socket.on('register-tray-balloon-click', (id) => { if (tray.value) { tray.value.on('balloon-click', () => { - electronSocket.emit('tray-balloon-click-event' + id); + socket.invoke('TrayOnBalloonClick', id); }); } }); socket.on('register-tray-balloon-closed', (id) => { if (tray.value) { tray.value.on('balloon-closed', () => { - electronSocket.emit('tray-balloon-closed-event' + id); + socket.invoke('TrayOnBalloonClosed', id); }); } }); @@ -52,7 +51,7 @@ module.exports = (socket) => { if (menuItems) { const menu = electron_1.Menu.buildFromTemplate(menuItems); addMenuItemClickConnector(menu.items, (id) => { - electronSocket.emit('trayMenuItemClicked', id); + socket.invoke('TrayOnMenuItemClicked', id); }); tray.value.setContextMenu(menu); } @@ -88,20 +87,20 @@ module.exports = (socket) => { tray.value.displayBalloon(options); } }); - socket.on('tray-isDestroyed', () => { + socket.on('tray-isDestroyed', (guid) => { if (tray.value) { const isDestroyed = tray.value.isDestroyed(); - electronSocket.emit('tray-isDestroyedCompleted', isDestroyed); + socket.invoke('SendClientResponseBool', guid, isDestroyed); } }); socket.on('register-tray-on-event', (eventName, listenerName) => { if (tray.value) { tray.value.on(eventName, (...args) => { if (args.length > 1) { - electronSocket.emit(listenerName, args[1]); + socket.invoke(listenerName, args[1]); } else { - electronSocket.emit(listenerName); + socket.invoke(listenerName); } }); } @@ -110,10 +109,10 @@ module.exports = (socket) => { if (tray.value) { tray.value.once(eventName, (...args) => { if (args.length > 1) { - electronSocket.emit(listenerName, args[1]); + socket.invoke(listenerName, args[1]); } else { - electronSocket.emit(listenerName); + socket.invoke(listenerName); } }); } diff --git a/ElectronNET.Host/api/tray.js.map b/ElectronNET.Host/api/tray.js.map index 6a84a7ad..e9ced3c0 100644 --- a/ElectronNET.Host/api/tray.js.map +++ b/ElectronNET.Host/api/tray.js.map @@ -1 +1 @@ -{"version":3,"file":"tray.js","sourceRoot":"","sources":["tray.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tray.js","sourceRoot":"","sources":["tray.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/tray.ts b/ElectronNET.Host/api/tray.ts index af9f6cf2..d2bfa006 100644 --- a/ElectronNET.Host/api/tray.ts +++ b/ElectronNET.Host/api/tray.ts @@ -1,14 +1,12 @@ -import { Socket } from 'net'; import { Menu, Tray, nativeImage } from 'electron'; let tray: { value: Electron.Tray } = (global['$tray'] = global['tray'] || { value: null }); let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy) => { socket.on('register-tray-click', (id) => { if (tray.value) { tray.value.on('click', (event, bounds) => { - electronSocket.emit('tray-click-event' + id, [(event).__proto__, bounds]); + socket.invoke('TrayOnClick', id, [(event).__proto__, bounds]); }); } }); @@ -16,7 +14,7 @@ export = (socket: Socket) => { socket.on('register-tray-right-click', (id) => { if (tray.value) { tray.value.on('right-click', (event, bounds) => { - electronSocket.emit('tray-right-click-event' + id, [(event).__proto__, bounds]); + socket.invoke('TrayOnRightClick', id, [(event).__proto__, bounds]); }); } }); @@ -24,7 +22,7 @@ export = (socket: Socket) => { socket.on('register-tray-double-click', (id) => { if (tray.value) { tray.value.on('double-click', (event, bounds) => { - electronSocket.emit('tray-double-click-event' + id, [(event).__proto__, bounds]); + socket.invoke('TrayOnDoubleClick', id, [(event).__proto__, bounds]); }); } }); @@ -32,7 +30,7 @@ export = (socket: Socket) => { socket.on('register-tray-balloon-show', (id) => { if (tray.value) { tray.value.on('balloon-show', () => { - electronSocket.emit('tray-balloon-show-event' + id); + socket.invoke('TrayOnBalloonShow', id); }); } }); @@ -40,7 +38,7 @@ export = (socket: Socket) => { socket.on('register-tray-balloon-click', (id) => { if (tray.value) { tray.value.on('balloon-click', () => { - electronSocket.emit('tray-balloon-click-event' + id); + socket.invoke('TrayOnBalloonClick', id); }); } }); @@ -48,7 +46,7 @@ export = (socket: Socket) => { socket.on('register-tray-balloon-closed', (id) => { if (tray.value) { tray.value.on('balloon-closed', () => { - electronSocket.emit('tray-balloon-closed-event' + id); + socket.invoke('TrayOnBalloonClosed', id); }); } }); @@ -62,7 +60,7 @@ export = (socket: Socket) => { const menu = Menu.buildFromTemplate(menuItems); addMenuItemClickConnector(menu.items, (id) => { - electronSocket.emit('trayMenuItemClicked', id); + socket.invoke('TrayOnMenuItemClicked', id); }); tray.value.setContextMenu(menu); } @@ -105,10 +103,10 @@ export = (socket: Socket) => { } }); - socket.on('tray-isDestroyed', () => { + socket.on('tray-isDestroyed', (guid) => { if (tray.value) { const isDestroyed = tray.value.isDestroyed(); - electronSocket.emit('tray-isDestroyedCompleted', isDestroyed); + socket.invoke('SendClientResponseBool', guid, isDestroyed); } }); @@ -116,9 +114,9 @@ export = (socket: Socket) => { if (tray.value){ tray.value.on(eventName, (...args) => { if (args.length > 1) { - electronSocket.emit(listenerName, args[1]); + socket.invoke(listenerName, args[1]); } else { - electronSocket.emit(listenerName); + socket.invoke(listenerName); } }); } @@ -128,9 +126,9 @@ export = (socket: Socket) => { if (tray.value){ tray.value.once(eventName, (...args) => { if (args.length > 1) { - electronSocket.emit(listenerName, args[1]); + socket.invoke(listenerName, args[1]); } else { - electronSocket.emit(listenerName); + socket.invoke(listenerName); } }); } diff --git a/ElectronNET.Host/api/webContents.js b/ElectronNET.Host/api/webContents.js index 71829a81..8f7ed592 100644 --- a/ElectronNET.Host/api/webContents.js +++ b/ElectronNET.Host/api/webContents.js @@ -2,21 +2,19 @@ const electron_1 = require("electron"); const browserView_1 = require("./browserView"); const fs = require('fs'); -let electronSocket; module.exports = (socket) => { - electronSocket = socket; socket.on('register-webContents-crashed', (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.removeAllListeners('crashed'); browserWindow.webContents.on('crashed', (event, killed) => { - electronSocket.emit('webContents-crashed' + id, killed); + socket.invoke('WebContentOnCrashed', id, killed); }); }); socket.on('register-webContents-didFinishLoad', (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.removeAllListeners('did-finish-load'); browserWindow.webContents.on('did-finish-load', () => { - electronSocket.emit('webContents-didFinishLoad' + id); + socket.invoke('WebContentOnDidFinishLoad', id); }); }); socket.on('webContentsOpenDevTools', (id, options) => { @@ -27,57 +25,57 @@ module.exports = (socket) => { getWindowById(id).webContents.openDevTools(); } }); - socket.on('webContents-getPrinters', async (id) => { + socket.on('webContents-getPrinters', async (guid, id) => { const printers = await getWindowById(id).webContents.getPrinters(); - electronSocket.emit('webContents-getPrinters-completed', printers); + socket.invoke('SendClientResponseJArray', guid, printers); }); - socket.on('webContents-print', async (id, options = {}) => { + socket.on('webContents-print', async (guid, id, options = {}) => { await getWindowById(id).webContents.print(options); - electronSocket.emit('webContents-print-completed', true); + socket.invoke('SendClientResponseBool', guid, true); }); - socket.on('webContents-printToPDF', async (id, options = {}, path) => { + socket.on('webContents-printToPDF', async (guid, id, options = {}, path) => { const buffer = await getWindowById(id).webContents.printToPDF(options); fs.writeFile(path, buffer, (error) => { if (error) { - electronSocket.emit('webContents-printToPDF-completed', false); + socket.invoke('SendClientResponseBool', guid, false); } else { - electronSocket.emit('webContents-printToPDF-completed', true); + socket.invoke('SendClientResponseBool', guid, true); } }); }); - socket.on('webContents-getUrl', function (id) { + socket.on('webContents-getUrl', function (guid, id) { const browserWindow = getWindowById(id); - electronSocket.emit('webContents-getUrl' + id, browserWindow.webContents.getURL()); + socket.invoke('SendClientResponseString', guid, browserWindow.webContents.getURL()); }); socket.on('webContents-session-allowNTLMCredentialsForDomains', (id, domains) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.allowNTLMCredentialsForDomains(domains); }); - socket.on('webContents-session-clearAuthCache', async (id, guid) => { + socket.on('webContents-session-clearAuthCache', async (guid, id) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearAuthCache(); - electronSocket.emit('webContents-session-clearAuthCache-completed' + guid); + socket.invoke('SendClientResponseBool', guid, true); }); - socket.on('webContents-session-clearCache', async (id, guid) => { + socket.on('webContents-session-clearCache', async (guid, id) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearCache(); - electronSocket.emit('webContents-session-clearCache-completed' + guid); + socket.invoke('SendClientResponseBool', guid, true); }); - socket.on('webContents-session-clearHostResolverCache', async (id, guid) => { + socket.on('webContents-session-clearHostResolverCache', async (guid, id) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearHostResolverCache(); - electronSocket.emit('webContents-session-clearHostResolverCache-completed' + guid); + socket.invoke('SendClientResponseBool', guid, true); }); - socket.on('webContents-session-clearStorageData', async (id, guid) => { + socket.on('webContents-session-clearStorageData', async (guid, id) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearStorageData({}); - electronSocket.emit('webContents-session-clearStorageData-completed' + guid); + socket.invoke('SendClientResponseBool', guid, true); }); - socket.on('webContents-session-clearStorageData-options', async (id, options, guid) => { + socket.on('webContents-session-clearStorageData-options', async (guid, id, options) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearStorageData(options); - electronSocket.emit('webContents-session-clearStorageData-options-completed' + guid); + socket.invoke('SendClientResponseBool', guid, true); }); socket.on('webContents-session-createInterruptedDownload', (id, options) => { const browserWindow = getWindowById(id); @@ -95,30 +93,30 @@ module.exports = (socket) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.flushStorageData(); }); - socket.on('webContents-session-getBlobData', async (id, identifier, guid) => { + socket.on('webContents-session-getBlobData', async (guid, id, identifier) => { const browserWindow = getWindowById(id); const buffer = await browserWindow.webContents.session.getBlobData(identifier); - electronSocket.emit('webContents-session-getBlobData-completed' + guid, buffer.buffer); + socket.invoke('SendClientResponseJArray', guid, buffer.buffer); }); - socket.on('webContents-session-getCacheSize', async (id, guid) => { + socket.on('webContents-session-getCacheSize', async (guid, id) => { const browserWindow = getWindowById(id); const size = await browserWindow.webContents.session.getCacheSize(); - electronSocket.emit('webContents-session-getCacheSize-completed' + guid, size); + socket.invoke('SendClientResponseString', guid, size); }); - socket.on('webContents-session-getPreloads', (id, guid) => { + socket.on('webContents-session-getPreloads', (guid, id) => { const browserWindow = getWindowById(id); const preloads = browserWindow.webContents.session.getPreloads(); - electronSocket.emit('webContents-session-getPreloads-completed' + guid, preloads); + socket.invoke('SendClientResponseJArray', guid, preloads); }); - socket.on('webContents-session-getUserAgent', (id, guid) => { + socket.on('webContents-session-getUserAgent', (guid, id) => { const browserWindow = getWindowById(id); const userAgent = browserWindow.webContents.session.getUserAgent(); - electronSocket.emit('webContents-session-getUserAgent-completed' + guid, userAgent); + socket.invoke('SendClientResponseString', guid, userAgent); }); - socket.on('webContents-session-resolveProxy', async (id, url, guid) => { + socket.on('webContents-session-resolveProxy', async (guid, id, url) => { const browserWindow = getWindowById(id); const proxy = await browserWindow.webContents.session.resolveProxy(url); - electronSocket.emit('webContents-session-resolveProxy-completed' + guid, proxy); + socket.invoke('SendClientResponseString', guid, proxy); }); socket.on('webContents-session-setDownloadPath', (id, path) => { const browserWindow = getWindowById(id); @@ -128,10 +126,10 @@ module.exports = (socket) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.setPreloads(preloads); }); - socket.on('webContents-session-setProxy', async (id, configuration, guid) => { + socket.on('webContents-session-setProxy', async (guid, id, configuration) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.setProxy(configuration); - electronSocket.emit('webContents-session-setProxy-completed' + guid); + socket.invoke('SendClientResponseBool', guid, true); }); socket.on('webContents-session-setUserAgent', (id, userAgent, acceptLanguages) => { const browserWindow = getWindowById(id); @@ -141,43 +139,46 @@ module.exports = (socket) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.cookies.removeAllListeners('changed'); browserWindow.webContents.session.cookies.on('changed', (event, cookie, cause, removed) => { - electronSocket.emit('webContents-session-cookies-changed' + id, [cookie, cause, removed]); + socket.invoke('CookiesOnChanged', id, [cookie, cause, removed]); }); }); - socket.on('webContents-session-cookies-get', async (id, filter, guid) => { + socket.on('webContents-session-cookies-get', async (guid, id, filter) => { const browserWindow = getWindowById(id); const cookies = await browserWindow.webContents.session.cookies.get(filter); - electronSocket.emit('webContents-session-cookies-get-completed' + guid, cookies); + socket.invoke('SendClientResponseJArray', guid, cookies); }); - socket.on('webContents-session-cookies-set', async (id, details, guid) => { + socket.on('webContents-session-cookies-set', async (id, details) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.set(details); - electronSocket.emit('webContents-session-cookies-set-completed' + guid); + // Needed ? + //socket.invoke('webContents-session-cookies-set-completed', guid); }); - socket.on('webContents-session-cookies-remove', async (id, url, name, guid) => { + socket.on('webContents-session-cookies-remove', async (id, url, name) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.remove(url, name); - electronSocket.emit('webContents-session-cookies-remove-completed' + guid); + // Needed ? + // socket.invoke('webContents-session-cookies-remove-completed', guid); }); - socket.on('webContents-session-cookies-flushStore', async (id, guid) => { + socket.on('webContents-session-cookies-flushStore', async (id) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.flushStore(); - electronSocket.emit('webContents-session-cookies-flushStore-completed' + guid); + // Needed ? + // socket.invoke('webContents-session-cookies-flushStore-completed' + guid); }); - socket.on('webContents-loadURL', (id, url, options) => { + socket.on('webContents-loadURL', (guid, id, url, options) => { const browserWindow = getWindowById(id); browserWindow.webContents.loadURL(url, options).then(() => { - electronSocket.emit('webContents-loadURL-complete' + id); + socket.invoke('webContents-loadURL-complete', guid, null); }).catch((error) => { console.error(error); - electronSocket.emit('webContents-loadURL-error' + id, error); + socket.invoke('webContents-loadURL-error', guid, error); }); }); socket.on('webContents-insertCSS', (id, isBrowserWindow, path) => { if (isBrowserWindow) { const browserWindow = getWindowById(id); if (browserWindow) { - browserWindow.webContents.insertCSS(fs.readFileSync(path, 'utf8')); + socket.invoke('webContents-printToPDF-completed', false); } } else { @@ -190,27 +191,27 @@ module.exports = (socket) => { } } if (view) { - view.webContents.insertCSS(fs.readFileSync(path, 'utf8')); + socket.invoke('webContents-printToPDF-completed', true); } } }); - socket.on('webContents-session-getAllExtensions', (id) => { + socket.on('webContents-session-getAllExtensions', (guid, id) => { const browserWindow = getWindowById(id); const extensionsList = browserWindow.webContents.session.getAllExtensions(); const chromeExtensionInfo = []; Object.keys(extensionsList).forEach(key => { chromeExtensionInfo.push(extensionsList[key]); }); - electronSocket.emit('webContents-session-getAllExtensions-completed', chromeExtensionInfo); + socket.invoke('SendClientResponseJArray', guid, chromeExtensionInfo); }); socket.on('webContents-session-removeExtension', (id, name) => { const browserWindow = getWindowById(id); - browserWindow.webContents.session.removeExtension(name); + socket.invoke('webContents-getUrl' + id, browserWindow.webContents.getURL()); }); - socket.on('webContents-session-loadExtension', async (id, path, allowFileAccess = false) => { + socket.on('webContents-session-loadExtension', async (guid, id, path, allowFileAccess = false) => { const browserWindow = getWindowById(id); const extension = await browserWindow.webContents.session.loadExtension(path, { allowFileAccess: allowFileAccess }); - electronSocket.emit('webContents-session-loadExtension-completed', extension); + socket.invoke('SendClientResponseJObject', guid, extension); }); function getWindowById(id) { if (id >= 1000) { diff --git a/ElectronNET.Host/api/webContents.js.map b/ElectronNET.Host/api/webContents.js.map index 7e6eed71..9389ef55 100644 --- a/ElectronNET.Host/api/webContents.js.map +++ b/ElectronNET.Host/api/webContents.js.map @@ -1 +1 @@ -{"version":3,"file":"webContents.js","sourceRoot":"","sources":["webContents.ts"],"names":[],"mappings":";AACA,uCAAsD;AACtD,+CAA0D;AAC1D,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAExC,aAAa,CAAC,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACxD,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACtD,cAAc,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAExC,aAAa,CAAC,WAAW,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;QAChE,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACjD,cAAc,CAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QACjD,IAAI,OAAO,EAAE;YACT,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SACvD;aAAM;YACH,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;SAChD;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QAC9C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QACnE,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE,QAAQ,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;QACtD,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnD,cAAc,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE;QACjE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAEvE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,IAAI,KAAK,EAAE;gBACP,cAAc,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;aAClE;iBAAM;gBACH,cAAc,CAAC,IAAI,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAAC;aACjE;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,UAAU,EAAE;QACxC,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,cAAc,CAAC,IAAI,CAAC,oBAAoB,GAAG,EAAE,EAAE,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oDAAoD,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QAC5E,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QAC/D,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAEzD,cAAc,CAAC,IAAI,CAAC,8CAA8C,GAAG,IAAI,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QAC3D,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAErD,cAAc,CAAC,IAAI,CAAC,0CAA0C,GAAG,IAAI,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4CAA4C,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QACvE,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;QAEjE,cAAc,CAAC,IAAI,CAAC,sDAAsD,GAAG,IAAI,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sCAAsC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QACjE,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAE7D,cAAc,CAAC,IAAI,CAAC,gDAAgD,GAAG,IAAI,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8CAA8C,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAClF,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAElE,cAAc,CAAC,IAAI,CAAC,wDAAwD,GAAG,IAAI,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+CAA+C,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QACvE,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6CAA6C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5D,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4CAA4C,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QACpE,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sCAAsC,EAAE,CAAC,EAAE,EAAE,EAAE;QACrD,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;QACxE,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAE/E,cAAc,CAAC,IAAI,CAAC,2CAA2C,GAAG,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QAC7D,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAEpE,cAAc,CAAC,IAAI,CAAC,4CAA4C,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QACtD,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAEjE,cAAc,CAAC,IAAI,CAAC,2CAA2C,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QACvD,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAEnE,cAAc,CAAC,IAAI,CAAC,4CAA4C,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAClE,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAExE,cAAc,CAAC,IAAI,CAAC,4CAA4C,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAC1D,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;QAC1D,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;QACxE,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAEhE,cAAc,CAAC,IAAI,CAAC,wCAAwC,GAAG,IAAI,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE;QAC7E,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8CAA8C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7D,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAExC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACxE,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACtF,cAAc,CAAC,IAAI,CAAC,qCAAqC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACpE,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE5E,cAAc,CAAC,IAAI,CAAC,2CAA2C,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACrE,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE7D,cAAc,CAAC,IAAI,CAAC,2CAA2C,GAAG,IAAI,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC1E,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAElE,cAAc,CAAC,IAAI,CAAC,8CAA8C,GAAG,IAAI,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wCAAwC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QACnE,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAE7D,cAAc,CAAC,IAAI,CAAC,kDAAkD,GAAG,IAAI,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QAClD,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACtD,cAAc,CAAC,IAAI,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,cAAc,CAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE;QAC7D,IAAI,eAAe,EAAE;YACjB,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,aAAa,EAAE;gBACf,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;aACtE;SACJ;aAAM;YACH,MAAM,YAAY,GAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAkB,CAAC;YAC7G,IAAI,IAAI,GAAgB,IAAI,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,EAAE,EAAE;oBACrC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBACvB,MAAM;iBACT;aACJ;YACD,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;aAC7D;SACJ;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sCAAsC,EAAE,CAAC,EAAE,EAAE,EAAE;QACrD,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,cAAc,GAAG,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC5E,MAAM,mBAAmB,GAAG,EAAE,CAAC;QAE/B,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACtC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,IAAI,CAAC,gDAAgD,EAAE,mBAAmB,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAC1D,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,GAAG,KAAK,EAAE,EAAE;QACvF,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,CAAC;QAEpH,cAAc,CAAC,IAAI,CAAC,6CAA6C,EAAE,SAAS,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,SAAS,aAAa,CAAC,EAAU;QAE7B,IAAI,EAAE,IAAI,IAAI,EAAE;YACZ,OAAO,uCAAyB,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;SAC/C;QAED,OAAO,wBAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;AACL,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"webContents.js","sourceRoot":"","sources":["webContents.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/webContents.ts b/ElectronNET.Host/api/webContents.ts index dfb4df30..b00929cb 100644 --- a/ElectronNET.Host/api/webContents.ts +++ b/ElectronNET.Host/api/webContents.ts @@ -1,17 +1,14 @@ -import { Socket } from 'net'; import { BrowserWindow, BrowserView } from 'electron'; import { browserViewMediateService } from './browserView'; const fs = require('fs'); -let electronSocket; -export = (socket: Socket) => { - electronSocket = socket; +export = (socket: SignalR.Hub.Proxy) => { socket.on('register-webContents-crashed', (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.removeAllListeners('crashed'); browserWindow.webContents.on('crashed', (event, killed) => { - electronSocket.emit('webContents-crashed' + id, killed); + socket.invoke('WebContentOnCrashed', id, killed); }); }); @@ -20,7 +17,7 @@ export = (socket: Socket) => { browserWindow.webContents.removeAllListeners('did-finish-load'); browserWindow.webContents.on('did-finish-load', () => { - electronSocket.emit('webContents-didFinishLoad' + id); + socket.invoke('WebContentOnDidFinishLoad', id); }); }); @@ -32,31 +29,31 @@ export = (socket: Socket) => { } }); - socket.on('webContents-getPrinters', async (id) => { + socket.on('webContents-getPrinters', async (guid, id) => { const printers = await getWindowById(id).webContents.getPrinters(); - electronSocket.emit('webContents-getPrinters-completed', printers); + socket.invoke('SendClientResponseJArray', guid, printers); }); - socket.on('webContents-print', async (id, options = {}) => { + socket.on('webContents-print', async (guid, id, options = {}) => { await getWindowById(id).webContents.print(options); - electronSocket.emit('webContents-print-completed', true); + socket.invoke('SendClientResponseBool', guid, true); }); - socket.on('webContents-printToPDF', async (id, options = {}, path) => { + socket.on('webContents-printToPDF', async (guid, id, options = {}, path) => { const buffer = await getWindowById(id).webContents.printToPDF(options); fs.writeFile(path, buffer, (error) => { if (error) { - electronSocket.emit('webContents-printToPDF-completed', false); + socket.invoke('SendClientResponseBool', guid, false); } else { - electronSocket.emit('webContents-printToPDF-completed', true); + socket.invoke('SendClientResponseBool', guid, true); } }); }); - socket.on('webContents-getUrl', function (id) { + socket.on('webContents-getUrl', function (guid, id) { const browserWindow = getWindowById(id); - electronSocket.emit('webContents-getUrl' + id, browserWindow.webContents.getURL()); + socket.invoke('SendClientResponseString', guid, browserWindow.webContents.getURL()); }); socket.on('webContents-session-allowNTLMCredentialsForDomains', (id, domains) => { @@ -64,39 +61,34 @@ export = (socket: Socket) => { browserWindow.webContents.session.allowNTLMCredentialsForDomains(domains); }); - socket.on('webContents-session-clearAuthCache', async (id, guid) => { + socket.on('webContents-session-clearAuthCache', async (guid, id) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearAuthCache(); - - electronSocket.emit('webContents-session-clearAuthCache-completed' + guid); + socket.invoke('SendClientResponseBool', guid, true); }); - socket.on('webContents-session-clearCache', async (id, guid) => { + socket.on('webContents-session-clearCache', async (guid, id) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearCache(); - - electronSocket.emit('webContents-session-clearCache-completed' + guid); + socket.invoke('SendClientResponseBool', guid, true); }); - socket.on('webContents-session-clearHostResolverCache', async (id, guid) => { + socket.on('webContents-session-clearHostResolverCache', async (guid, id) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearHostResolverCache(); - - electronSocket.emit('webContents-session-clearHostResolverCache-completed' + guid); + socket.invoke('SendClientResponseBool', guid, true); }); - socket.on('webContents-session-clearStorageData', async (id, guid) => { + socket.on('webContents-session-clearStorageData', async (guid, id) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearStorageData({}); - - electronSocket.emit('webContents-session-clearStorageData-completed' + guid); + socket.invoke('SendClientResponseBool', guid, true); }); - socket.on('webContents-session-clearStorageData-options', async (id, options, guid) => { + socket.on('webContents-session-clearStorageData-options', async (guid, id, options) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearStorageData(options); - - electronSocket.emit('webContents-session-clearStorageData-options-completed' + guid); + socket.invoke('SendClientResponseBool', guid, true); }); socket.on('webContents-session-createInterruptedDownload', (id, options) => { @@ -119,39 +111,39 @@ export = (socket: Socket) => { browserWindow.webContents.session.flushStorageData(); }); - socket.on('webContents-session-getBlobData', async (id, identifier, guid) => { + socket.on('webContents-session-getBlobData', async (guid, id, identifier) => { const browserWindow = getWindowById(id); const buffer = await browserWindow.webContents.session.getBlobData(identifier); - electronSocket.emit('webContents-session-getBlobData-completed' + guid, buffer.buffer); + socket.invoke('SendClientResponseJArray', guid, buffer.buffer); }); - socket.on('webContents-session-getCacheSize', async (id, guid) => { + socket.on('webContents-session-getCacheSize', async (guid, id) => { const browserWindow = getWindowById(id); const size = await browserWindow.webContents.session.getCacheSize(); - electronSocket.emit('webContents-session-getCacheSize-completed' + guid, size); + socket.invoke('SendClientResponseString', guid, size); }); - socket.on('webContents-session-getPreloads', (id, guid) => { + socket.on('webContents-session-getPreloads', (guid, id) => { const browserWindow = getWindowById(id); const preloads = browserWindow.webContents.session.getPreloads(); - electronSocket.emit('webContents-session-getPreloads-completed' + guid, preloads); + socket.invoke('SendClientResponseJArray', guid, preloads); }); - socket.on('webContents-session-getUserAgent', (id, guid) => { + socket.on('webContents-session-getUserAgent', (guid, id) => { const browserWindow = getWindowById(id); const userAgent = browserWindow.webContents.session.getUserAgent(); - electronSocket.emit('webContents-session-getUserAgent-completed' + guid, userAgent); + socket.invoke('SendClientResponseString', guid, userAgent); }); - socket.on('webContents-session-resolveProxy', async (id, url, guid) => { + socket.on('webContents-session-resolveProxy', async (guid, id, url) => { const browserWindow = getWindowById(id); const proxy = await browserWindow.webContents.session.resolveProxy(url); - electronSocket.emit('webContents-session-resolveProxy-completed' + guid, proxy); + socket.invoke('SendClientResponseString', guid, proxy); }); socket.on('webContents-session-setDownloadPath', (id, path) => { @@ -164,11 +156,11 @@ export = (socket: Socket) => { browserWindow.webContents.session.setPreloads(preloads); }); - socket.on('webContents-session-setProxy', async (id, configuration, guid) => { + socket.on('webContents-session-setProxy', async (guid, id, configuration) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.setProxy(configuration); - electronSocket.emit('webContents-session-setProxy-completed' + guid); + socket.invoke('SendClientResponseBool', guid, true); }); socket.on('webContents-session-setUserAgent', (id, userAgent, acceptLanguages) => { @@ -181,45 +173,45 @@ export = (socket: Socket) => { browserWindow.webContents.session.cookies.removeAllListeners('changed'); browserWindow.webContents.session.cookies.on('changed', (event, cookie, cause, removed) => { - electronSocket.emit('webContents-session-cookies-changed' + id, [cookie, cause, removed]); + socket.invoke('CookiesOnChanged', id, [cookie, cause, removed]); }); }); - socket.on('webContents-session-cookies-get', async (id, filter, guid) => { + socket.on('webContents-session-cookies-get', async (guid, id, filter) => { const browserWindow = getWindowById(id); const cookies = await browserWindow.webContents.session.cookies.get(filter); - electronSocket.emit('webContents-session-cookies-get-completed' + guid, cookies); + socket.invoke('SendClientResponseJArray', guid, cookies); }); - socket.on('webContents-session-cookies-set', async (id, details, guid) => { + socket.on('webContents-session-cookies-set', async (id, details) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.set(details); - - electronSocket.emit('webContents-session-cookies-set-completed' + guid); + // Needed ? + //socket.invoke('webContents-session-cookies-set-completed', guid); }); - socket.on('webContents-session-cookies-remove', async (id, url, name, guid) => { + socket.on('webContents-session-cookies-remove', async (id, url, name) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.remove(url, name); - - electronSocket.emit('webContents-session-cookies-remove-completed' + guid); + // Needed ? + // socket.invoke('webContents-session-cookies-remove-completed', guid); }); - socket.on('webContents-session-cookies-flushStore', async (id, guid) => { + socket.on('webContents-session-cookies-flushStore', async (id) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.flushStore(); - - electronSocket.emit('webContents-session-cookies-flushStore-completed' + guid); + // Needed ? + // socket.invoke('webContents-session-cookies-flushStore-completed' + guid); }); - socket.on('webContents-loadURL', (id, url, options) => { + socket.on('webContents-loadURL', (guid, id, url, options) => { const browserWindow = getWindowById(id); browserWindow.webContents.loadURL(url, options).then(() => { - electronSocket.emit('webContents-loadURL-complete' + id); + socket.invoke('webContents-loadURL-complete', guid, null); }).catch((error) => { console.error(error); - electronSocket.emit('webContents-loadURL-error' + id, error); + socket.invoke('webContents-loadURL-error', guid, error); }); }); @@ -227,7 +219,7 @@ export = (socket: Socket) => { if (isBrowserWindow) { const browserWindow = getWindowById(id); if (browserWindow) { - browserWindow.webContents.insertCSS(fs.readFileSync(path, 'utf8')); + socket.invoke('webContents-printToPDF-completed', false); } } else { const browserViews: BrowserView[] = (global['browserViews'] = global['browserViews'] || []) as BrowserView[]; @@ -239,12 +231,12 @@ export = (socket: Socket) => { } } if (view) { - view.webContents.insertCSS(fs.readFileSync(path, 'utf8')); + socket.invoke('webContents-printToPDF-completed', true); } } }); - socket.on('webContents-session-getAllExtensions', (id) => { + socket.on('webContents-session-getAllExtensions', (guid, id) => { const browserWindow = getWindowById(id); const extensionsList = browserWindow.webContents.session.getAllExtensions(); const chromeExtensionInfo = []; @@ -253,19 +245,19 @@ export = (socket: Socket) => { chromeExtensionInfo.push(extensionsList[key]); }); - electronSocket.emit('webContents-session-getAllExtensions-completed', chromeExtensionInfo); + socket.invoke('SendClientResponseJArray', guid, chromeExtensionInfo); }); socket.on('webContents-session-removeExtension', (id, name) => { const browserWindow = getWindowById(id); - browserWindow.webContents.session.removeExtension(name); + socket.invoke('webContents-getUrl' + id, browserWindow.webContents.getURL()); }); - socket.on('webContents-session-loadExtension', async (id, path, allowFileAccess = false) => { + socket.on('webContents-session-loadExtension', async (guid, id, path, allowFileAccess = false) => { const browserWindow = getWindowById(id); const extension = await browserWindow.webContents.session.loadExtension(path, { allowFileAccess: allowFileAccess }); - electronSocket.emit('webContents-session-loadExtension-completed', extension); + socket.invoke('SendClientResponseJObject', guid, extension); }); function getWindowById(id: number): Electron.BrowserWindow | Electron.BrowserView { diff --git a/ElectronNET.Host/main.js b/ElectronNET.Host/main.js index 37d8be8b..23122fcb 100644 --- a/ElectronNET.Host/main.js +++ b/ElectronNET.Host/main.js @@ -4,6 +4,8 @@ const { protocol } = require('electron'); const path = require('path'); const cProcess = require('child_process').spawn; const portscanner = require('portscanner'); +const signalR = require('@microsoft/signalr'); +const os = require('os'); const { imageSize } = require('image-size'); let io, server, browserWindows, ipc, apiProcess, loadURL; let appApi, menu, dialogApi, notification, tray, webContents; @@ -75,6 +77,22 @@ if (manifestJsonFile.singleInstance || manifestJsonFile.aspCoreBackendPort) { } } +// If Backend is already running use default port -> This is for debugging and or restart electron AFTER dotnet app +var dotnetOtherSide = false; + +function dotnetOtherSideCheck(defaultElectronPort) { + portscanner.checkPortStatus(defaultElectronPort, '127.0.0.1', function(error, status) { + if (status == 'closed') + { + console.log("Backend Process already running - Skipping dotnet start"); + dotnetOtherSide = false; + return false; + } + }) + dotnetOtherSide = true; + return true; +} + app.on('ready', () => { // Fix ERR_UNKNOWN_URL_SCHEME using file protocol @@ -88,15 +106,24 @@ app.on('ready', () => { startSplashScreen(); } // Added default port as configurable for port restricted environments. - let defaultElectronPort = 8000; + let defaultElectronPort = 5000; if (manifestJsonFile.electronPort) { defaultElectronPort = (manifestJsonFile.electronPort) } - // hostname needs to be localhost, otherwise Windows Firewall will be triggered. - portscanner.findAPortNotInUse(defaultElectronPort, 65535, 'localhost', function (error, port) { - console.log('Electron Socket IO Port: ' + port); - startSocketApiBridge(port); - }); + + dotnetOtherSide = dotnetOtherSideCheck(defaultElectronPort); + + if (!dotnetOtherSide) + { + // hostname needs to be localhost, otherwise Windows Firewall will be triggered. + portscanner.findAPortNotInUse(defaultElectronPort, 65535, 'localhost', function (error, port) { + console.log('Electron Socket IO Port: ' + port); + startSocketApiBridge(port, false); + }); + } else { + startSocketApiBridge(defaultElectronPort, true); + } + }); app.on('quit', async (event, exitCode) => { @@ -151,113 +178,108 @@ function startSplashScreen() { }); } -function startSocketApiBridge(port) { - - // instead of 'require('socket.io')(port);' we need to use this workaround - // otherwise the Windows Firewall will be triggered - server = require('http').createServer(); - io = require('socket.io')(); - io.attach(server); - - server.listen(port, 'localhost'); - server.on('listening', function () { - console.log('Electron Socket started on port %s at %s', server.address().port, server.address().address); - // Now that socket connection is established, we can guarantee port will not be open for portscanner - if (watchable) { - startAspCoreBackendWithWatch(port); - } else { - startAspCoreBackend(port); - } - }); + +function getStartSignalrConnections(port) { + let options = {}; + let protocol = new signalR.JsonHubProtocol(); + connectionHubElectron = new signalR.HubConnectionBuilder() + .configureLogging(signalR.LogLevel.Trace) + .withUrl("http://127.0.0.1:" + port + "/electron", options) + .withHubProtocol(protocol) + .build(); + + getStartSignalrListener(port); +} + +var getStartSignalrListener = function (port) { + + connectionHubElectron.start() + .then(function () { + isConnected = true; + console.log('Electron signalr Connection started on port %s at %s', port, "127.0.0.1" + "/electron"); + /*connectionHubElectron.send("CreateNewWindows", null).catch(function (err) { + return console.error(err.toString()); + });*/ + }) + .catch(function (err) { + console.log("HubElectron error: " + err); + setTimeout(() => { + getStartSignalrConnections(port); + }, 5000); + }); + + if (appApi === undefined) appApi = require('./api/app')(connectionHubElectron, app); + if (browserWindows === undefined) browserWindows = require('./api/browserWindows')(connectionHubElectron, app); + if (commandLine === undefined) commandLine = require('./api/commandLine')(connectionHubElectron, app); + if (autoUpdater === undefined) autoUpdater = require('./api/autoUpdater')(connectionHubElectron); + if (ipc === undefined) ipc = require('./api/ipc')(connectionHubElectron); + if (menu === undefined) menu = require('./api/menu')(connectionHubElectron); + if (dialogApi === undefined) dialogApi = require('./api/dialog')(connectionHubElectron); + if (notification === undefined) notification = require('./api/notification')(connectionHubElectron); + if (tray === undefined) tray = require('./api/tray')(connectionHubElectron); + if (webContents === undefined) webContents = require('./api/webContents')(connectionHubElectron); + if (globalShortcut === undefined) globalShortcut = require('./api/globalShortcut')(connectionHubElectron); + if (shellApi === undefined) shellApi = require('./api/shell')(connectionHubElectron); + if (screen === undefined) screen = require('./api/screen')(connectionHubElectron); + if (clipboard === undefined) clipboard = require('./api/clipboard')(connectionHubElectron); + if (browserView === undefined) browserView = require('./api/browserView').browserViewApi(connectionHubElectron); + if (powerMonitor === undefined) powerMonitor = require('./api/powerMonitor')(connectionHubElectron); + if (nativeTheme === undefined) nativeTheme = require('./api/nativeTheme')(connectionHubElectron); + if (dock === undefined) dock = require('./api/dock')(connectionHubElectron); + + + if (splashScreen && !splashScreen.isDestroyed()) { + splashScreen.close(); + } // prototype app['mainWindowURL'] = ""; app['mainWindow'] = null; - // @ts-ignore - io.on('connection', (socket) => { + connectionHubElectron.on('register-app-open-file-event', (id) => { + global['electronsocket'] = connectionHubElectron; - socket.on('disconnect', function (reason) { - console.log('Got disconnect! Reason: ' + reason); - try { - if (hostHook) { - const hostHookScriptFilePath = path.join(__dirname, 'ElectronHostHook', 'index.js'); - delete require.cache[require.resolve(hostHookScriptFilePath)]; - hostHook = undefined; - } + app.on('open-file', (event, file) => { + event.preventDefault(); - } catch (error) { - console.error(error.message); - } + global['electronsocket'].invoke('AppOpenFile', id, file); }); - - if (global['electronsocket'] === undefined) { - global['electronsocket'] = socket; - global['electronsocket'].setMaxListeners(0); + if (launchFile) { + global['electronsocket'].invoke('AppOpenFile', id, launchFile); } + }); - console.log('ASP.NET Core Application connected...', 'global.electronsocket', global['electronsocket'].id, new Date()); - - if (appApi === undefined) appApi = require('./api/app')(socket, app); - if (browserWindows === undefined) browserWindows = require('./api/browserWindows')(socket, app); - if (commandLine === undefined) commandLine = require('./api/commandLine')(socket, app); - if (autoUpdater === undefined) autoUpdater = require('./api/autoUpdater')(socket); - if (ipc === undefined) ipc = require('./api/ipc')(socket); - if (menu === undefined) menu = require('./api/menu')(socket); - if (dialogApi === undefined) dialogApi = require('./api/dialog')(socket); - if (notification === undefined) notification = require('./api/notification')(socket); - if (tray === undefined) tray = require('./api/tray')(socket); - if (webContents === undefined) webContents = require('./api/webContents')(socket); - if (globalShortcut === undefined) globalShortcut = require('./api/globalShortcut')(socket); - if (shellApi === undefined) shellApi = require('./api/shell')(socket); - if (screen === undefined) screen = require('./api/screen')(socket); - if (clipboard === undefined) clipboard = require('./api/clipboard')(socket); - if (browserView === undefined) browserView = require('./api/browserView').browserViewApi(socket); - if (powerMonitor === undefined) powerMonitor = require('./api/powerMonitor')(socket); - if (nativeTheme === undefined) nativeTheme = require('./api/nativeTheme')(socket); - if (dock === undefined) dock = require('./api/dock')(socket); - - socket.on('register-app-open-file-event', (id) => { - global['electronsocket'] = socket; - - app.on('open-file', (event, file) => { - event.preventDefault(); - - global['electronsocket'].emit('app-open-file' + id, file); - }); - - if (launchFile) { - global['electronsocket'].emit('app-open-file' + id, launchFile); - } - }); - - socket.on('register-app-open-url-event', (id) => { - global['electronsocket'] = socket; - - app.on('open-url', (event, url) => { - event.preventDefault(); + connectionHubElectron.on('register-app-open-url-event', (id) => { + global['electronsocket'] = connectionHubElectron; - global['electronsocket'].emit('app-open-url' + id, url); - }); + app.on('open-url', (event, url) => { + event.preventDefault(); - if (launchUrl) { - global['electronsocket'].emit('app-open-url' + id, launchUrl); - } + global['electronsocket'].invoke('app-open-url', id, url); }); - try { - const hostHookScriptFilePath = path.join(__dirname, 'ElectronHostHook', 'index.js'); - - if (isModuleAvailable(hostHookScriptFilePath) && hostHook === undefined) { - const { HookService } = require(hostHookScriptFilePath); - hostHook = new HookService(socket, app); - hostHook.onHostReady(); - } - } catch (error) { - console.error(error.message); + if (launchUrl) { + global['electronsocket'].invoke('app-open-url', id, launchUrl); } }); + + try { + const hostHookScriptFilePath = path.join(__dirname, 'ElectronHostHook', 'index.js'); + + if (isModuleAvailable(hostHookScriptFilePath) && hostHook === undefined) { + const { HookService } = require(hostHookScriptFilePath); + hostHook = new HookService(connectionHubElectron, app); + hostHook.onHostReady(); + } + } catch (error) { + console.error(error.message); + } + +}; + +function startSocketApiBridge(port, skipBackendStart) { + startAspCoreBackend(port, skipBackendStart); } function isModuleAvailable(name) { @@ -268,19 +290,16 @@ function isModuleAvailable(name) { return false; } -function startAspCoreBackend(electronPort) { - if (manifestJsonFile.aspCoreBackendPort) { - startBackend(manifestJsonFile.aspCoreBackendPort) - } else { - // hostname needs to be localhost, otherwise Windows Firewall will be triggered. - portscanner.findAPortNotInUse(electronPort + 1, 65535, 'localhost', function (error, electronWebPort) { - startBackend(electronWebPort); - }); - } +function startAspCoreBackend(electronPort, skipBackendStart) { + + startBackend(electronPort, skipBackendStart); - function startBackend(aspCoreBackendPort) { + function startBackend(aspCoreBackendPort, skipBackendStart) { + if (skipBackendStart){ + return; + } console.log('ASP.NET Core Port: ' + aspCoreBackendPort); - loadURL = `http://localhost:${aspCoreBackendPort}`; + loadURL = `http://127.0.0.1:${aspCoreBackendPort}`; const parameters = [getEnvironmentParameter(), `/electronPort=${electronPort}`, `/electronWebPort=${aspCoreBackendPort}`]; let binaryFile = manifestJsonFile.executable; @@ -297,6 +316,8 @@ function startAspCoreBackend(electronPort) { console.log(`stdout: ${data.toString()}`); }); } + + getStartSignalrConnections(electronPort); } function startAspCoreBackendWithWatch(electronPort) { @@ -311,7 +332,7 @@ function startAspCoreBackendWithWatch(electronPort) { function startBackend(aspCoreBackendPort) { console.log('ASP.NET Core Watch Port: ' + aspCoreBackendPort); - loadURL = `http://localhost:${aspCoreBackendPort}`; + loadURL = `http://127.0.0.1:${aspCoreBackendPort}`; const parameters = ['watch', 'run', getEnvironmentParameter(), `/electronPort=${electronPort}`, `/electronWebPort=${aspCoreBackendPort}`]; var options = { diff --git a/ElectronNET.Host/package-lock.json b/ElectronNET.Host/package-lock.json index 0f24a4ac..f07f5fe2 100644 --- a/ElectronNET.Host/package-lock.json +++ b/ElectronNET.Host/package-lock.json @@ -1,8 +1,1959 @@ { "name": "electron.net.host", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "electron.net.host", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@microsoft/signalr": "^6.0.2", + "@types/signalr": "^2.2.37", + "dasherize": "^2.0.0", + "electron-updater": "^4.3.9", + "image-size": "^1.0.0", + "portscanner": "^2.2.0", + "socket.io": "^2.4.0" + }, + "devDependencies": { + "@types/node": "^15.14.0", + "electron": "^13.1.5", + "tslint": "^6.1.3", + "typescript": "^4.3.5" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@electron/get": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz", + "integrity": "sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^9.6.0", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=8.6" + }, + "optionalDependencies": { + "global-agent": "^2.0.2", + "global-tunnel-ng": "^2.7.1" + } + }, + "node_modules/@electron/get/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@microsoft/signalr": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-6.0.2.tgz", + "integrity": "sha512-OYSRqvOyJWMA9cRvbOIKG0f5wE9xRiayQvkDTQ8gru3WT3WevHk8KGsBUV3x2NmizTSq7gSShQr/l9GkdT/e8g==", + "dependencies": { + "abort-controller": "^3.0.0", + "eventsource": "^1.0.7", + "fetch-cookie": "^0.11.0", + "node-fetch": "^2.6.1", + "ws": "^7.4.5" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@types/jquery": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", + "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", + "dependencies": { + "@types/sizzle": "*" + } + }, + "node_modules/@types/node": { + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.0.tgz", + "integrity": "sha512-um/+/ip3QZmwLfIkWZSNtQIJNVAqrJ92OkLMeuZrjZMTAJniI7fh8N8OICyDhAJ2mzgk/fmYFo72jRr5HyZ1EQ==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-0caWDWmpCp0uifxFh+FaqK3CuZ2SkRR/ZRxAV5+zNdC3QVUi6wyOJnefhPvtNt8NQWXB5OA93BUvZsXpWat2Xw==" + }, + "node_modules/@types/signalr": { + "version": "2.2.37", + "resolved": "https://registry.npmjs.org/@types/signalr/-/signalr-2.2.37.tgz", + "integrity": "sha512-Oay9I3cevxwfQlc8y60FPdtskRqYCPmDMZYamObcD+kr1uDC/EmfOT/2AmrKh/4JQ148yWbTkadnd8ZLM5tOFA==", + "dependencies": { + "@types/jquery": "*" + } + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "node_modules/boolean": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.1.2.tgz", + "integrity": "sha512-YN6UmV0FfLlBVvRvNPx3pz5W/mUoYB24J4WSXOKP/OOJpi+Oq6WYqPaNTHzjI0QzwWtnvEd5CGYyQPgp1jFxnw==", + "dev": true, + "optional": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/builder-util-runtime": { + "version": "8.7.5", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.5.tgz", + "integrity": "sha512-fgUFHKtMNjdvH6PDRFntdIGUPgwZ69sXsAqEulCtoiqgWes5agrMq/Ud274zjJRTbckYh2PHh8/1CpFc6dpsbQ==", + "dependencies": { + "debug": "^4.3.2", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util-runtime/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "optional": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-js": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", + "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/dasherize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", + "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "optional": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "optional": true + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/electron": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.5.tgz", + "integrity": "sha512-ZoMCcPQNs/zO/Zdb5hq5H+rwRaKrdI3/sfXEwBVMx7f5jwa9jPQB3dZ2+7t59uD9VcFAWsH/pozr8nPPlv0tyw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^1.0.1", + "@types/node": "^14.6.2", + "extract-zip": "^1.0.3" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 8.6" + } + }, + "node_modules/electron-updater": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-4.3.9.tgz", + "integrity": "sha512-LCNfedSwZfS4Hza+pDyPR05LqHtGorCStaBgVpRnfKxOlZcvpYEX0AbMeH5XUtbtGRoH2V8osbbf2qKPNb7AsA==", + "dependencies": { + "@types/semver": "^7.3.5", + "builder-util-runtime": "8.7.5", + "fs-extra": "^10.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.4", + "lodash.escaperegexp": "^4.1.2", + "lodash.isequal": "^4.5.0", + "semver": "^7.3.5" + } + }, + "node_modules/electron-updater/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/electron-updater/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-updater/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/electron-updater/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-updater/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron/node_modules/@types/node": { + "version": "14.17.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.4.tgz", + "integrity": "sha512-8kQ3+wKGRNN0ghtEn7EGps/B8CzuBz1nXZEIGGLP2GnwbqYn4dbTs7k+VKLTq1HvZLRCIDtN3Snx1Ege8B7L5A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "~7.4.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/engine.io-client": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", + "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", + "dependencies": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.6.2", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/engine.io-client/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/engine.io-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "dependencies": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.4", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "optional": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "dependencies": { + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fetch-cookie": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.11.0.tgz", + "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==", + "dependencies": { + "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-agent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.2.0.tgz", + "integrity": "sha512-+20KpaW6DDLqhG7JDiJpD1JvNvb8ts+TNl7BPOYcURqCrXqnN1Vf+XVOrkKJAFPqfX+oEhsdzOj1hLWkBTdNJg==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "core-js": "^3.6.5", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-tunnel-ng": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", + "dev": true, + "optional": true, + "dependencies": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/globalthis": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", + "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", + "dev": true, + "optional": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dependencies": { + "isarray": "2.0.1" + } + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/image-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", + "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true + }, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "node_modules/isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true, + "optional": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "node_modules/lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=" + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dependencies": { + "mime-db": "1.48.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "optional": true, + "dependencies": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "dependencies": { + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true, + "optional": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/roarr/node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true, + "optional": true + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true, + "optional": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/socket.io": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", + "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", + "dependencies": { + "debug": "~4.1.0", + "engine.io": "~3.5.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.4.0", + "socket.io-parser": "~3.4.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" + }, + "node_modules/socket.io-client": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", + "dependencies": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", + "has-binary2": "~1.0.2", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + } + }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/socket.io-client/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/socket.io-client/node_modules/socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "dependencies": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/socket.io-parser": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", + "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "dependencies": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/socket.io-parser/node_modules/component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tslint": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.13.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + }, + "peerDependencies": { + "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" + } + }, + "node_modules/tslint/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", + "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + }, "dependencies": { "@babel/code-frame": { "version": "7.14.5", @@ -55,6 +2006,18 @@ } } }, + "@microsoft/signalr": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-6.0.2.tgz", + "integrity": "sha512-OYSRqvOyJWMA9cRvbOIKG0f5wE9xRiayQvkDTQ8gru3WT3WevHk8KGsBUV3x2NmizTSq7gSShQr/l9GkdT/e8g==", + "requires": { + "abort-controller": "^3.0.0", + "eventsource": "^1.0.7", + "fetch-cookie": "^0.11.0", + "node-fetch": "^2.6.1", + "ws": "^7.4.5" + } + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -70,6 +2033,14 @@ "defer-to-connect": "^1.0.1" } }, + "@types/jquery": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", + "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", + "requires": { + "@types/sizzle": "*" + } + }, "@types/node": { "version": "15.14.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.0.tgz", @@ -81,6 +2052,27 @@ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.6.tgz", "integrity": "sha512-0caWDWmpCp0uifxFh+FaqK3CuZ2SkRR/ZRxAV5+zNdC3QVUi6wyOJnefhPvtNt8NQWXB5OA93BUvZsXpWat2Xw==" }, + "@types/signalr": { + "version": "2.2.37", + "resolved": "https://registry.npmjs.org/@types/signalr/-/signalr-2.2.37.tgz", + "integrity": "sha512-Oay9I3cevxwfQlc8y60FPdtskRqYCPmDMZYamObcD+kr1uDC/EmfOT/2AmrKh/4JQ148yWbTkadnd8ZLM5tOFA==", + "requires": { + "@types/jquery": "*" + } + }, + "@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==" + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -590,6 +2582,19 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "requires": { + "original": "^1.0.0" + } + }, "extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -628,6 +2633,14 @@ "pend": "~1.2.0" } }, + "fetch-cookie": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.11.0.tgz", + "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==", + "requires": { + "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0" + } + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -977,6 +2990,14 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, "normalize-url": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", @@ -1010,6 +3031,14 @@ "wrappy": "1" } }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "requires": { + "url-parse": "^1.4.3" + } + }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -1085,6 +3114,11 @@ "dev": true, "optional": true }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -1095,6 +3129,16 @@ "once": "^1.3.1" } }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "queue": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", @@ -1126,6 +3170,11 @@ } } }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -1345,6 +3394,21 @@ "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -1418,8 +3482,16 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } }, "url-parse-lax": { "version": "3.0.0", @@ -1436,6 +3508,20 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1445,7 +3531,8 @@ "ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} }, "xmlhttprequest-ssl": { "version": "1.6.3", diff --git a/ElectronNET.Host/package.json b/ElectronNET.Host/package.json index 628c1525..6bb13d9a 100644 --- a/ElectronNET.Host/package.json +++ b/ElectronNET.Host/package.json @@ -12,6 +12,8 @@ "start": "tsc -p ." }, "dependencies": { + "@microsoft/signalr": "^6.0.2", + "@types/signalr": "^2.2.37", "dasherize": "^2.0.0", "electron-updater": "^4.3.9", "image-size": "^1.0.0", diff --git a/ElectronNET.WebApp/Controllers/HostHookController.cs b/ElectronNET.WebApp/Controllers/HostHookController.cs index bfc5291f..2266f667 100644 --- a/ElectronNET.WebApp/Controllers/HostHookController.cs +++ b/ElectronNET.WebApp/Controllers/HostHookController.cs @@ -22,9 +22,9 @@ public IActionResult Index() } }; var folderPath = await Electron.Dialog.ShowOpenDialogAsync(mainWindow, options); - - var resultFromTypeScript = await Electron.HostHook.CallAsync("create-excel-file", folderPath); - Electron.IpcMain.Send(mainWindow, "excel-file-created", resultFromTypeScript); + //ToDo: + //var resultFromTypeScript = await Electron.HostHook.CallAsync("create-excel-file", folderPath); + //Electron.IpcMain.Send(mainWindow, "excel-file-created", resultFromTypeScript); }); } diff --git a/ElectronNET.WebApp/ElectronHostHook/connector.js b/ElectronNET.WebApp/ElectronHostHook/connector.js index 5e5a0e81..d9410b84 100644 --- a/ElectronNET.WebApp/ElectronHostHook/connector.js +++ b/ElectronNET.WebApp/ElectronHostHook/connector.js @@ -14,12 +14,12 @@ class Connector { try { javaScriptCode(...args, (data) => { if (data) { - this.socket.emit(`${key}Complete${id}`, data); + this.socket.invoke(`${key}Complete${id}`, data); } }); } catch (error) { - this.socket.emit(`${key}Error${id}`, `Host Hook Exception`, error); + this.socket.invoke(`${key}Error${id}`, `Host Hook Exception`, error); } }); } diff --git a/ElectronNET.WebApp/ElectronHostHook/connector.js.map b/ElectronNET.WebApp/ElectronHostHook/connector.js.map index be84b690..b854c54d 100644 --- a/ElectronNET.WebApp/ElectronHostHook/connector.js.map +++ b/ElectronNET.WebApp/ElectronHostHook/connector.js.map @@ -1 +1 @@ -{"version":3,"file":"connector.js","sourceRoot":"","sources":["connector.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAS;IAClB,YAAoB,MAAuB;IACvC,aAAa;IACN,GAAiB;QAFR,WAAM,GAAN,MAAM,CAAiB;QAEhC,QAAG,GAAH,GAAG,CAAc;IAAI,CAAC;IAEjC,EAAE,CAAC,GAAW,EAAE,cAAwB;QACpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACnC,MAAM,EAAE,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;YAE9B,IAAI;gBACA,cAAc,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC7B,IAAI,IAAI,EAAE;wBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;qBACjD;gBACL,CAAC,CAAC,CAAC;aACN;YAAC,OAAO,KAAK,EAAE;gBACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;aACtE;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AApBD,8BAoBC"} \ No newline at end of file +{"version":3,"file":"connector.js","sourceRoot":"","sources":["connector.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAS;IAClB,YAAoB,MAAyB;IACzC,aAAa;IACN,GAAiB;QAFR,WAAM,GAAN,MAAM,CAAmB;QAElC,QAAG,GAAH,GAAG,CAAc;IAAI,CAAC;IAEjC,EAAE,CAAC,GAAW,EAAE,cAAwB;QACpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACnC,MAAM,EAAE,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;YAE9B,IAAI;gBACA,cAAc,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC7B,IAAI,IAAI,EAAE;wBACb,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;qBAC5C;gBACL,CAAC,CAAC,CAAC;aACN;YAAC,OAAO,KAAK,EAAE;gBACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,QAAQ,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;aACxE;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AApBD,8BAoBC"} \ No newline at end of file diff --git a/ElectronNET.WebApp/ElectronHostHook/connector.ts b/ElectronNET.WebApp/ElectronHostHook/connector.ts index aabc182a..9db7d5d3 100644 --- a/ElectronNET.WebApp/ElectronHostHook/connector.ts +++ b/ElectronNET.WebApp/ElectronHostHook/connector.ts @@ -1,5 +1,5 @@ export class Connector { - constructor(private socket: SocketIO.Socket, + constructor(private socket: SignalR.Hub.Proxy, // @ts-ignore public app: Electron.App) { } @@ -10,11 +10,11 @@ export class Connector { try { javaScriptCode(...args, (data) => { if (data) { - this.socket.emit(`${key}Complete${id}`, data); + this.socket.invoke(`${key}Complete${id}`, data); } }); } catch (error) { - this.socket.emit(`${key}Error${id}`, `Host Hook Exception`, error); + this.socket.invoke(`${key}Error${id}`, `Host Hook Exception`, error); } }); } diff --git a/ElectronNET.WebApp/ElectronHostHook/index.js.map b/ElectronNET.WebApp/ElectronHostHook/index.js.map index 73417858..c915ac06 100644 --- a/ElectronNET.WebApp/ElectronHostHook/index.js.map +++ b/ElectronNET.WebApp/ElectronHostHook/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,2CAAwC;AACxC,iDAA8C;AAE9C,MAAa,WAAY,SAAQ,qBAAS;IACtC,YAAY,MAAuB,EAAS,GAAiB;QACzD,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QADqB,QAAG,GAAH,GAAG,CAAc;IAE7D,CAAC;IAED,WAAW;QACP,8CAA8C;QAC9C,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAO,IAAI,EAAE,IAAI,EAAE,EAAE;YAC9C,MAAM,YAAY,GAAiB,IAAI,2BAAY,EAAE,CAAC;YACtD,MAAM,MAAM,GAAW,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEvD,IAAI,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC,CAAA,CAAC,CAAC;IACP,CAAC;CACJ;AAdD,kCAcC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,2CAAwC;AACxC,iDAA8C;AAE9C,MAAa,WAAY,SAAQ,qBAAS;IACtC,YAAY,MAAyB,EAAS,GAAiB;QAC3D,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QADuB,QAAG,GAAH,GAAG,CAAc;IAE/D,CAAC;IAED,WAAW;QACP,8CAA8C;QAC9C,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAO,IAAI,EAAE,IAAI,EAAE,EAAE;YAC9C,MAAM,YAAY,GAAiB,IAAI,2BAAY,EAAE,CAAC;YACtD,MAAM,MAAM,GAAW,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEvD,IAAI,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC,CAAA,CAAC,CAAC;IACP,CAAC;CACJ;AAdD,kCAcC"} \ No newline at end of file diff --git a/ElectronNET.WebApp/ElectronHostHook/index.ts b/ElectronNET.WebApp/ElectronHostHook/index.ts index 52135f50..76444be8 100644 --- a/ElectronNET.WebApp/ElectronHostHook/index.ts +++ b/ElectronNET.WebApp/ElectronHostHook/index.ts @@ -4,7 +4,7 @@ import { Connector } from "./connector"; import { ExcelCreator } from "./excelCreator"; export class HookService extends Connector { - constructor(socket: SocketIO.Socket, public app: Electron.App) { + constructor(socket: SignalR.Hub.Proxy, public app: Electron.App) { super(socket, app); } diff --git a/ElectronNET.WebApp/ElectronHostHook/package-lock.json b/ElectronNET.WebApp/ElectronHostHook/package-lock.json index 84bf8fa7..93c073c4 100644 --- a/ElectronNET.WebApp/ElectronHostHook/package-lock.json +++ b/ElectronNET.WebApp/ElectronHostHook/package-lock.json @@ -1,9 +1,856 @@ { "name": "electron-host-hook", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "electron-host-hook", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "exceljs": "^1.10.0" + }, + "devDependencies": { + "@aspnet/signalr": "^1.0.27", + "@types/signalr": "^2.2.37", + "@types/socket.io": "^2.1.2", + "typescript": "^3.4.5" + } + }, + "node_modules/@aspnet/signalr": { + "version": "1.0.27", + "resolved": "https://registry.npmjs.org/@aspnet/signalr/-/signalr-1.0.27.tgz", + "integrity": "sha512-utZvBF9snjdwIBpvcFa6htqFTVaTN50QIZUoiznKpYSZImew1a1Ci7VYmK8HODqwRqUtj0o5/xR1nzt8xex5sA==", + "deprecated": "This package is no longer supported. Consider using @microsoft/signalr.", + "dev": true + }, + "node_modules/@types/engine.io": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/engine.io/-/engine.io-3.1.4.tgz", + "integrity": "sha512-98rXVukLD6/ozrQ2O80NAlWDGA4INg+tqsEReWJldqyi2fulC9V7Use/n28SWgROXKm6003ycWV4gZHoF8GA6w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jquery": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", + "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", + "dev": true, + "dependencies": { + "@types/sizzle": "*" + } + }, + "node_modules/@types/node": { + "version": "14.0.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.9.tgz", + "integrity": "sha512-0sCTiXKXELOBxvZLN4krQ0FPOAA7ij+6WwvD0k/PHd9/KAkr4dXel5J9fh6F4x1FwAQILqAWkmpeuS6mjf1iKA==", + "dev": true + }, + "node_modules/@types/signalr": { + "version": "2.2.37", + "resolved": "https://registry.npmjs.org/@types/signalr/-/signalr-2.2.37.tgz", + "integrity": "sha512-Oay9I3cevxwfQlc8y60FPdtskRqYCPmDMZYamObcD+kr1uDC/EmfOT/2AmrKh/4JQ148yWbTkadnd8ZLM5tOFA==", + "dev": true, + "dependencies": { + "@types/jquery": "*" + } + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "node_modules/@types/socket.io": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-2.1.8.tgz", + "integrity": "sha512-NIQfh9WwJuJKlgmby4NgwMpoBOmNPCDgaRNPiLYZBtkbHkszK/9R52B5yGkd5a34rbVdAADuo8FhOS/5AZDemw==", + "dev": true, + "dependencies": { + "@types/engine.io": "*", + "@types/node": "*" + } + }, + "node_modules/archiver": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", + "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^2.6.3", + "buffer-crc32": "^0.2.1", + "glob": "^7.1.4", + "readable-stream": "^3.4.0", + "tar-stream": "^2.1.0", + "zip-stream": "^2.1.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/arguments-extended": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/arguments-extended/-/arguments-extended-0.0.3.tgz", + "integrity": "sha1-YQfkkX0OtvCk3WYyD8Fa/HLvSUY=", + "dependencies": { + "extended": "~0.0.3", + "is-extended": "~0.0.8" + } + }, + "node_modules/array-extended": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/array-extended/-/array-extended-0.0.11.tgz", + "integrity": "sha1-1xRK50jek8pybxIQCdv/FibRZL0=", + "dependencies": { + "arguments-extended": "~0.0.3", + "extended": "~0.0.3", + "is-extended": "~0.0.3" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "node_modules/big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz", + "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/compress-commons": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", + "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^3.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^2.3.6" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/compress-commons/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/crc32-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", + "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "dependencies": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "node_modules/date-extended": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/date-extended/-/date-extended-0.0.6.tgz", + "integrity": "sha1-I4AtV90b94GIE/4MMuhRqG2iZ8k=", + "dependencies": { + "array-extended": "~0.0.3", + "extended": "~0.0.3", + "is-extended": "~0.0.3" + } + }, + "node_modules/declare.js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/declare.js/-/declare.js-0.0.8.tgz", + "integrity": "sha1-BHit/5VkwAT1Hfc9i8E0AZ0o3N4=" + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" + }, + "node_modules/exceljs": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-1.15.0.tgz", + "integrity": "sha512-72CySYLU1oBIixpBkWV0mR6YM+X8v2GyyWgKBovS9Hso0Ul7S3FtlWGeAifxB+lpzznokWMRDLMZ8EyS2tX6xg==", + "dependencies": { + "archiver": "^3.0.0", + "fast-csv": "^2.4.1", + "jszip": "^3.1.5", + "moment": "^2.22.2", + "promish": "^5.1.1", + "sax": "^1.2.4", + "tmp": "^0.1.0", + "unzipper": "^0.9.12" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/extended": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/extended/-/extended-0.0.6.tgz", + "integrity": "sha1-f7i/e52uOXWG5IVwrP1kLHjlBmk=", + "dependencies": { + "extender": "~0.0.5" + } + }, + "node_modules/extender": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/extender/-/extender-0.0.10.tgz", + "integrity": "sha1-WJwHSCvmGhRgttgfnCSqZ+jzJM0=", + "dependencies": { + "declare.js": "~0.0.4" + } + }, + "node_modules/fast-csv": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-2.5.0.tgz", + "integrity": "sha512-M/9ezLU9/uDwvDZTt9sNFJa0iLDUsbhYJwPtnE0D9MjeuB6DY9wRCyUPZta9iI6cSz5wBWGaUPL61QH8h92cNA==", + "dependencies": { + "extended": "0.0.6", + "is-extended": "0.0.10", + "object-extended": "0.0.7", + "safer-buffer": "^2.1.2", + "string-extended": "0.0.8" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-extended": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/is-extended/-/is-extended-0.0.10.tgz", + "integrity": "sha1-JE4UDfdbscmjEG9BL/GC+1NKbWI=", + "dependencies": { + "extended": "~0.0.3" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/jszip": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.4.0.tgz", + "integrity": "sha512-gZAOYuPl4EhPTXT0GjhI3o+ZAz3su6EhLrKUoAivcKqyqC7laS5JEv4XWZND9BgcDcF83vI85yGbDmDR6UhrIg==", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz", + "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==", + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-extended": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/object-extended/-/object-extended-0.0.7.tgz", + "integrity": "sha1-hP0j9WsVWCrrPoiwXLVdJDLWijM=", + "dependencies": { + "array-extended": "~0.0.4", + "extended": "~0.0.3", + "is-extended": "~0.0.3" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promish": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/promish/-/promish-5.1.1.tgz", + "integrity": "sha512-37xEzvSas6JIYI/BcKh5TwhaqWepI44u/hC+tQStkX1sxMf+L756beESPgSWirxRCPqtXHzosoNzpjLnTnP8FA==", + "dependencies": { + "es6-promise": "^3.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-extended": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/string-extended/-/string-extended-0.0.8.tgz", + "integrity": "sha1-dBlX3/SHsCcqee7FpE8jnubxfM0=", + "dependencies": { + "array-extended": "~0.0.5", + "date-extended": "~0.0.3", + "extended": "~0.0.3", + "is-extended": "~0.0.3" + } + }, + "node_modules/tar-stream": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", + "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", + "dependencies": { + "bl": "^4.0.1", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "node_modules/tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "dependencies": { + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "engines": { + "node": "*" + } + }, + "node_modules/typescript": { + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.3.tgz", + "integrity": "sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unzipper": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.9.15.tgz", + "integrity": "sha512-2aaUvO4RAeHDvOCuEtth7jrHFaCKTSXPqUkXwADaLBzGbgZGzUDccoEdJ5lW+3RmfpOZYNx0Rw6F6PUzM6caIA==", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/zip-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", + "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^2.1.1", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 6" + } + } + }, "dependencies": { + "@aspnet/signalr": { + "version": "1.0.27", + "resolved": "https://registry.npmjs.org/@aspnet/signalr/-/signalr-1.0.27.tgz", + "integrity": "sha512-utZvBF9snjdwIBpvcFa6htqFTVaTN50QIZUoiznKpYSZImew1a1Ci7VYmK8HODqwRqUtj0o5/xR1nzt8xex5sA==", + "dev": true + }, "@types/engine.io": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/engine.io/-/engine.io-3.1.4.tgz", @@ -13,12 +860,36 @@ "@types/node": "*" } }, + "@types/jquery": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", + "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", + "dev": true, + "requires": { + "@types/sizzle": "*" + } + }, "@types/node": { "version": "14.0.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.9.tgz", "integrity": "sha512-0sCTiXKXELOBxvZLN4krQ0FPOAA7ij+6WwvD0k/PHd9/KAkr4dXel5J9fh6F4x1FwAQILqAWkmpeuS6mjf1iKA==", "dev": true }, + "@types/signalr": { + "version": "2.2.37", + "resolved": "https://registry.npmjs.org/@types/signalr/-/signalr-2.2.37.tgz", + "integrity": "sha512-Oay9I3cevxwfQlc8y60FPdtskRqYCPmDMZYamObcD+kr1uDC/EmfOT/2AmrKh/4JQ148yWbTkadnd8ZLM5tOFA==", + "dev": true, + "requires": { + "@types/jquery": "*" + } + }, + "@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, "@types/socket.io": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-2.1.8.tgz", @@ -617,6 +1488,14 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, "string-extended": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/string-extended/-/string-extended-0.0.8.tgz", @@ -628,14 +1507,6 @@ "is-extended": "~0.0.3" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, "tar-stream": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", diff --git a/ElectronNET.WebApp/ElectronHostHook/package.json b/ElectronNET.WebApp/ElectronHostHook/package.json index db42c011..22d33d30 100644 --- a/ElectronNET.WebApp/ElectronHostHook/package.json +++ b/ElectronNET.WebApp/ElectronHostHook/package.json @@ -13,6 +13,8 @@ "author": "Gregor Biswanger", "license": "MIT", "devDependencies": { + "@microsoft/signalr": "^6.0.2", + "@types/signalr": "^2.2.37", "@types/socket.io": "^2.1.2", "typescript": "^3.4.5" }, diff --git a/ElectronNET.WebApp/ElectronNET.WebApp.csproj b/ElectronNET.WebApp/ElectronNET.WebApp.csproj index 4b7e2319..0ce2fdd1 100644 --- a/ElectronNET.WebApp/ElectronNET.WebApp.csproj +++ b/ElectronNET.WebApp/ElectronNET.WebApp.csproj @@ -1,8 +1,6 @@  - net5.0 - OutOfProcess - AspNetCoreModule + net6.0 win-x64 4.2 @@ -16,6 +14,8 @@ + + diff --git a/ElectronNET.WebApp/Program.cs b/ElectronNET.WebApp/Program.cs index 6a32e60d..0adf4b19 100644 --- a/ElectronNET.WebApp/Program.cs +++ b/ElectronNET.WebApp/Program.cs @@ -1,22 +1,42 @@ using ElectronNET.API; +using ElectronNET.API.Entities; +using ElectronNET.API.Hubs; +using ElectronNET.API.Models; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.SignalR; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using System; +using System.Net; +using System.Threading; +using System.Threading.Tasks; namespace ElectronNET.WebApp { public class Program { - public static void Main(string[] args) + public static bool WebServerReady = false; + + [STAThread] + public static async Task Main(string[] args) { - CreateWebHostBuilder(args).Build().Run(); + await WebApplication.ProcessInit(args); } + public static class WebApplication + { + public static async Task ProcessInit(string[] args) + { + await Startup.RunWebHost(args); + } + } + + public static IWebHostBuilder CreateWebHostBuilder(string[] args) { return WebHost.CreateDefaultBuilder(args) .ConfigureLogging((hostingContext, logging) => { logging.AddConsole(); }) - .UseElectron(args) .UseStartup(); } } diff --git a/ElectronNET.WebApp/Properties/launchSettings.json b/ElectronNET.WebApp/Properties/launchSettings.json index 7ea18a5d..45af783c 100644 --- a/ElectronNET.WebApp/Properties/launchSettings.json +++ b/ElectronNET.WebApp/Properties/launchSettings.json @@ -3,19 +3,14 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:50394/", - "sslPort": 0 + "applicationUrl": "http://localhost:10008/", + "sslPort": 44376 } }, "profiles": { - "Electron.NET App": { - "commandName": "Executable", - "executablePath": "$(SolutionDir)ElectronNET.CLI\\bin\\Debug\\netcoreapp3.1\\dotnet-electronize.exe", - "commandLineArgs": "start", - "workingDirectory": "$(SolutionDir)ElectronNET.WebApp" - }, "IIS Express": { "commandName": "IISExpress", + "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } @@ -26,7 +21,7 @@ "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, - "applicationUrl": "http://localhost:50395/" + "applicationUrl": "https://localhost:5001;http://localhost:5000" } } } \ No newline at end of file diff --git a/ElectronNET.WebApp/Startup.cs b/ElectronNET.WebApp/Startup.cs index f6c0c338..a79ecaa2 100644 --- a/ElectronNET.WebApp/Startup.cs +++ b/ElectronNET.WebApp/Startup.cs @@ -1,20 +1,31 @@ using ElectronNET.API; using ElectronNET.API.Entities; +using ElectronNET.API.Hubs; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using System.Net; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using ElectronNET.API.Models; +using Microsoft.AspNetCore.SignalR; +using System.IO; +using System.Reflection; +using System.Diagnostics; namespace ElectronNET.WebApp { public class Startup { public IConfiguration Configuration { get; } + public static IWebHostEnvironment WebHostEnvironment { get; set; } - public Startup(IConfiguration configuration) + public Startup(IConfiguration configuration, IWebHostEnvironment env) { Configuration = configuration; + WebHostEnvironment = env; } // This method gets called by the runtime. Use this method to add services to the container. @@ -22,11 +33,25 @@ public Startup(IConfiguration configuration) public void ConfigureServices(IServiceCollection services) { services.AddMvc(); + services.AddSignalR(options => + { + options.EnableDetailedErrors = true; + }) + // ToDo: Replace newtonsoft woth system.text.json + /*.AddJsonProtocol(options => + { + options.PayloadSerializerOptions.PropertyNamingPolicy = null; + });*/ + .AddNewtonsoftJsonProtocol(options => { + options.PayloadSerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); + }); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { + Electron.ServiceScope = app.ApplicationServices.GetService().CreateScope(); + if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); @@ -39,17 +64,81 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) app.UseEndpoints(endpoints => { endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}"); + endpoints.MapHub("/electron"); }); if (HybridSupport.IsElectronActive) { ElectronBootstrap(); } + + Electron.SignalrElectron = Electron.ServiceScope.ServiceProvider.GetService>(); + + Program.WebServerReady = true; + } + + + public static async Task RunWebHost(string[] args, bool runBlocking = true) + { + IHost host = new HostBuilder() + .UseConsoleLifetime() + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.ConfigureLogging((hostingContext, logging) => { logging.AddConsole(); }); + webBuilder.ConfigureKestrel(option => + { + option.Listen(IPAddress.Any, 5000); + //option.AllowSynchronousIO = true; + }); + webBuilder.UseStartup(); + }) + .Build(); + if (runBlocking) + { + host.Run(); + } + else + { + host.Start(); + } + } public async void ElectronBootstrap() { - //AddDevelopmentTests(); + // Kill all existing electron processes + foreach (var processInterface in Process.GetProcessesByName("electron")) + { + try + { + processInterface.Kill(); + } + catch + { + // ignored + } + } + + string EntryAssembly = Assembly.GetEntryAssembly()?.Location; + string EntryAssemblyPath = Path.GetDirectoryName(EntryAssembly)?.Replace("\\", "/"); + string parentPath = Directory.GetParent(EntryAssemblyPath)?.FullName; + string parentParentPath = Directory.GetParent(parentPath)?.FullName; + string parentParentParentPath = Directory.GetParent(parentParentPath)?.FullName; + string parentParentParentParentPath = Directory.GetParent(parentParentParentPath)?.FullName; + + if (File.Exists(parentParentParentParentPath + "/ElectronNET.Host/node_modules/.bin/electron.cmd")) + { + Process process = new Process(); + process.StartInfo.FileName = parentParentParentParentPath + "/ElectronNET.Host/node_modules/.bin/electron.cmd"; + process.StartInfo.Arguments = parentParentParentParentPath + "/ElectronNET.Host/main.js"; + process.StartInfo.UseShellExecute = true; // Open own window + process.Start(); + } + + while (!Electron.ElectronConnected) + { + await Task.Delay(500); + } var browserWindow = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { @@ -61,58 +150,21 @@ public async void ElectronBootstrap() await browserWindow.WebContents.Session.ClearCacheAsync(); browserWindow.OnReadyToShow += () => browserWindow.Show(); - browserWindow.SetTitle(Configuration["DemoTitleInSettings"]); - } - - private static void AddDevelopmentTests() - { - // NOTE: on mac you will need to allow the app to post notifications when asked. + browserWindow.SetTitle("Electron.NET API Demos"); - Electron.App.On("activate", (obj) => + if (Electron.Tray.MenuItems.Count == 0) { - // obj should be a boolean that represents where there are active windows or not. - var hasWindows = (bool) obj; + var menu = new MenuItem + { + Label = "Remove", + Click = () => Electron.Tray.Destroy() + }; - Electron.Notification.Show( - new NotificationOptions("Activate", $"activate event has been captured. Active windows = {hasWindows}") - { - Silent = false, - }); - }); + Electron.Tray.Show(Path.Combine(WebHostEnvironment.ContentRootPath, "Assets/electron_32x32.png"), menu); + Electron.Tray.SetToolTip("Electron Demo in the tray."); + } - Electron.Dock.SetMenu(new[] - { - new MenuItem - { - Type = MenuType.normal, - Label = "MenuItem", - Click = () => - { - Electron.Notification.Show(new NotificationOptions( - "Dock MenuItem Click", - "A menu item added to the Dock was selected;")); - }, - }, - new MenuItem - { - Type = MenuType.submenu, - Label = "SubMenu", - Submenu = new[] - { - new MenuItem - { - Type = MenuType.normal, - Label = "Sub MenuItem", - Click = () => - { - Electron.Notification.Show(new NotificationOptions( - "Dock Sub MenuItem Click", - "A menu item added to the Dock was selected;")); - }, - }, - } - } - }); } + } } diff --git a/package-lock.json b/package-lock.json index 48e341a0..01054507 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,3 +1,6 @@ { - "lockfileVersion": 1 + "name": "ElectronNet", + "lockfileVersion": 2, + "requires": true, + "packages": {} } diff --git a/start.cmd b/start.cmd index a898fde8..27558b6f 100644 --- a/start.cmd +++ b/start.cmd @@ -6,4 +6,5 @@ dotnet publish -r win-x64 --output ../ElectronNET.Host/bin/ echo Start Electron with bundled EXE cd ..\ElectronNET.Host +cmd /C npm run start ..\ElectronNET.Host\node_modules\.bin\electron.cmd "..\ElectronNET.Host\main.js" \ No newline at end of file From e4cbb9c2dadbb53149da2aa218f2734c0a82ff91 Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Mon, 28 Feb 2022 11:27:29 +0100 Subject: [PATCH 02/15] appveyor -> Visual Studio 2019 to Visual Studio 2022 (net6.0) --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 62d46748..61e8c1f6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,5 +1,5 @@ version: 1.0.{build} -image: Visual Studio 2019 +image: Visual Studio 2022 build_script: - cmd: buildAll.cmd pull_requests: From e55ed98f76ba27e9a5ab7e9359af3ebb0e9642ff Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Mon, 28 Feb 2022 20:37:46 +0100 Subject: [PATCH 03/15] Fix menu, cleanup --- ElectronNET.API/App.cs | 2 +- ElectronNET.API/Clipboard.cs | 6 ++-- .../Extensions/SignalrSerializeHelper.cs | 29 ------------------- ElectronNET.API/Hubs/HubElectron.cs | 2 +- ElectronNET.API/Menu.cs | 9 ++++++ 5 files changed, 14 insertions(+), 34 deletions(-) diff --git a/ElectronNET.API/App.cs b/ElectronNET.API/App.cs index 95f0df49..98256fdc 100644 --- a/ElectronNET.API/App.cs +++ b/ElectronNET.API/App.cs @@ -635,7 +635,7 @@ public async void SetAppLogsPath(string path) /// A path to a special directory or file associated with name. public async Task GetPathAsync(PathName pathName, CancellationToken cancellationToken = default) { - return (await SignalrSerializeHelper.GetSignalrResultStringParameter("appGetPath", pathName.GetDescription())); + return (await SignalrSerializeHelper.GetSignalrResultString("appGetPath", pathName.GetDescription())); } /// diff --git a/ElectronNET.API/Clipboard.cs b/ElectronNET.API/Clipboard.cs index a534fa8f..1627e3a5 100644 --- a/ElectronNET.API/Clipboard.cs +++ b/ElectronNET.API/Clipboard.cs @@ -43,7 +43,7 @@ internal static Clipboard Instance /// The content in the clipboard as plain text. public async Task ReadTextAsync(string type = "") { - return (await SignalrSerializeHelper.GetSignalrResultStringParameter("clipboard-readText", type)); + return (await SignalrSerializeHelper.GetSignalrResultString("clipboard-readText", type)); } /// @@ -63,7 +63,7 @@ public async void WriteText(string text, string type = "") /// public async Task ReadHTMLAsync(string type = "") { - return (await SignalrSerializeHelper.GetSignalrResultStringParameter("clipboard-readHTML", type)); + return (await SignalrSerializeHelper.GetSignalrResultString("clipboard-readHTML", type)); } /// @@ -83,7 +83,7 @@ public async void WriteHTML(string markup, string type = "") /// public async Task ReadRTFAsync(string type = "") { - return (await SignalrSerializeHelper.GetSignalrResultStringParameter("clipboard-readRTF", type)); + return (await SignalrSerializeHelper.GetSignalrResultString("clipboard-readRTF", type)); } /// diff --git a/ElectronNET.API/Extensions/SignalrSerializeHelper.cs b/ElectronNET.API/Extensions/SignalrSerializeHelper.cs index a7649e48..e3335fce 100644 --- a/ElectronNET.API/Extensions/SignalrSerializeHelper.cs +++ b/ElectronNET.API/Extensions/SignalrSerializeHelper.cs @@ -264,35 +264,6 @@ public static async Task GetSignalrResultString(string signalrCommand, J return result; } - - public static async Task GetSignalrResultStringParameter(string signalrCommand, string parameter1) - { - var taskCompletionSource = new TaskCompletionSource(); - var guid = Guid.NewGuid(); - HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); - await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); - - string result; - try - { - var task = taskCompletionSource.Task; - if (await Task.WhenAny(task, Task.Delay(5000)) == task) - { - result = (string)await task; - } - else - { - throw new ArgumentNullException(); - } - } - finally - { - HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); - } - - return result; - } - public static async Task GetSignalrResultBool(string signalrCommand, string parameter1) { var taskCompletionSource = new TaskCompletionSource(); diff --git a/ElectronNET.API/Hubs/HubElectron.cs b/ElectronNET.API/Hubs/HubElectron.cs index cca79bdb..e3e857cb 100644 --- a/ElectronNET.API/Hubs/HubElectron.cs +++ b/ElectronNET.API/Hubs/HubElectron.cs @@ -455,7 +455,7 @@ public void HostHookError(string socketEventName, params dynamic[] arguments) #region Menu public void MenuMenuItemClicked(string id) { - MenuItem menuItem = Menu.Instance.MenuItems.Where(x => x.Id == id).FirstOrDefault(); + MenuItem menuItem = Menu.Instance.GetMenuItem(id.ToString()); menuItem.Click?.Invoke(); } diff --git a/ElectronNET.API/Menu.cs b/ElectronNET.API/Menu.cs index 05d68e29..89967dad 100644 --- a/ElectronNET.API/Menu.cs +++ b/ElectronNET.API/Menu.cs @@ -64,6 +64,15 @@ public async void SetApplicationMenu(MenuItem[] menuItems) _menuItems.AddRange(menuItems); } + /// + /// Get appication menu item + /// + /// The items id. + public MenuItem GetMenuItem(string id) + { + return _menuItems.GetMenuItem(id); + } + /// /// Gets the context menu items. /// From 2fb2cc52a3c57d34ab2154c61152b8371d9bc549 Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Tue, 1 Mar 2022 04:15:17 +0100 Subject: [PATCH 04/15] Reimplement IPC -> Done with System.Reactive --- ElectronNET.API/ElectronNET.API.csproj | 2 + .../Extensions/SignalrSerializeHelper.cs | 21 ++++ ElectronNET.API/Hubs/HubElectron.cs | 21 ++++ ElectronNET.API/IpcMain.cs | 116 +++++++++++------- ElectronNET.Host/api/ipc.js | 12 +- ElectronNET.Host/api/ipc.js.map | 2 +- ElectronNET.Host/api/ipc.ts | 13 +- ElectronNET.Host/main.js | 32 +++++ 8 files changed, 160 insertions(+), 59 deletions(-) diff --git a/ElectronNET.API/ElectronNET.API.csproj b/ElectronNET.API/ElectronNET.API.csproj index 7e948cff..e69ce975 100644 --- a/ElectronNET.API/ElectronNET.API.csproj +++ b/ElectronNET.API/ElectronNET.API.csproj @@ -41,7 +41,9 @@ This package contains the API to access the "native" electron API. runtime; build; native; contentfiles; analyzers + + diff --git a/ElectronNET.API/Extensions/SignalrSerializeHelper.cs b/ElectronNET.API/Extensions/SignalrSerializeHelper.cs index e3335fce..f8df960e 100644 --- a/ElectronNET.API/Extensions/SignalrSerializeHelper.cs +++ b/ElectronNET.API/Extensions/SignalrSerializeHelper.cs @@ -742,6 +742,27 @@ public static async Task GetSignalrResultJArray(string signalrCommand) return result; } + public static async Task GetSignalrResultJArrayNoTimeout(string signalrCommand, string parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + JArray result; + try + { + var task = taskCompletionSource.Task; + result = (JArray)await task; + } + finally + { + HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + public static async Task GetSignalrResultJArray(string signalrCommand, JObject parameter1, JObject parameter2) { var taskCompletionSource = new TaskCompletionSource(); diff --git a/ElectronNET.API/Hubs/HubElectron.cs b/ElectronNET.API/Hubs/HubElectron.cs index e3e857cb..ac71059b 100644 --- a/ElectronNET.API/Hubs/HubElectron.cs +++ b/ElectronNET.API/Hubs/HubElectron.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Text.Json; @@ -17,12 +18,19 @@ namespace ElectronNET.API.Hubs public class HubElectron : Hub { + public class SignalrResponse + { + public string Channel { get; set; } = null; + public JArray Value { get; set; } = null; + } public async Task SendMessage(string user) { await Clients.All.SendAsync("ReceiveMessage", user); } + public static readonly ObservableCollection SignalrObservedJArray = new ObservableCollection(); + public static readonly ConcurrentDictionary> ClientResponsesString = new ConcurrentDictionary>(); public static readonly ConcurrentDictionary> ClientResponsesInt = new ConcurrentDictionary>(); public static readonly ConcurrentDictionary> ClientResponsesBool = new ConcurrentDictionary>(); @@ -547,6 +555,19 @@ public void PowerMonitorOnShutdown() #region IpcMain + public void IpcOnChannel(string channel, JArray args) + { + foreach (var item in HubElectron.SignalrObservedJArray.Where(x => x.Channel == channel).ToList()) + { + HubElectron.SignalrObservedJArray.Remove(item); + } + + SignalrResponse signalrResponse = new SignalrResponse(); + signalrResponse.Channel = channel; + signalrResponse.Value = args; + HubElectron.SignalrObservedJArray.Add(signalrResponse); + } + #endregion #region Screen diff --git a/ElectronNET.API/IpcMain.cs b/ElectronNET.API/IpcMain.cs index 26d177db..a60ae8dc 100644 --- a/ElectronNET.API/IpcMain.cs +++ b/ElectronNET.API/IpcMain.cs @@ -1,11 +1,15 @@ -using Microsoft.AspNetCore.SignalR; +using ElectronNET.API.Hubs; +using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; +using ReactiveUI; using System; using System.Collections; using System.Collections.Generic; +using System.Collections.Specialized; using System.Linq; +using System.Reactive.Linq; namespace ElectronNET.API { @@ -45,23 +49,34 @@ internal static IpcMain Instance /// /// Channelname. /// Callback Method. - public void On(string channel, Action listener) + public async void On(string channel, Action listener) { - Electron.SignalrElectron.Clients.All.SendAsync("registerIpcMainChannel", channel); - /*BridgeConnector.Socket.Off(channel); - BridgeConnector.Socket.On(channel, (args) => - { - List objectArray = FormatArguments(args); + await Electron.SignalrElectron.Clients.All.SendAsync("registerIpcMainChannel", channel); - if(objectArray.Count == 1) - { - listener(objectArray.First()); - } - else - { - listener(objectArray); - } - });*/ + Observable.FromEventPattern(HubElectron.SignalrObservedJArray, "CollectionChanged") + .ObserveOn(RxApp.MainThreadScheduler) + .SubscribeOn(RxApp.TaskpoolScheduler) + .Subscribe(x => { + if (x.EventArgs.NewItems != null) + { + foreach (HubElectron.SignalrResponse entry in x.EventArgs.NewItems) + { + if (entry.Channel == channel && entry.Value != null) + { + List objectArray = FormatArguments(entry.Value); + + if (objectArray.Count == 1) + { + listener(objectArray.First()); + } + else + { + listener(objectArray); + } + } + } + } + }); } private List FormatArguments(object args) @@ -89,24 +104,36 @@ private List FormatArguments(object args) /// /// /// - public void OnSync(string channel, Func listener) + public async void OnSync(string channel, Func listener) { - Electron.SignalrElectron.Clients.All.SendAsync("registerSyncIpcMainChannel", channel); - /*BridgeConnector.Socket.On(channel, (args) => { - List objectArray = FormatArguments(args); - object parameter; - if (objectArray.Count == 1) - { - parameter = objectArray.First(); - } - else - { - parameter = objectArray; - } + await Electron.SignalrElectron.Clients.All.SendAsync("registerSyncIpcMainChannel", channel); - var result = listener(parameter); - Electron.SignalrElectron.Clients.All.SendAsync(channel + "Sync", result); - });*/ + Observable.FromEventPattern(HubElectron.SignalrObservedJArray, "CollectionChanged") + .ObserveOn(RxApp.MainThreadScheduler) + .SubscribeOn(RxApp.TaskpoolScheduler) + .Subscribe(x => { + if (x.EventArgs.NewItems != null) + { + foreach (HubElectron.SignalrResponse entry in x.EventArgs.NewItems) + { + if (entry.Channel == channel && entry.Value != null) + { + List objectArray = FormatArguments(entry.Value); + object parameter; + if (objectArray.Count == 1) + { + parameter = objectArray.First(); + } + else + { + parameter = objectArray; + } + var result = listener(parameter); + Electron.SignalrElectron.Clients.All.SendAsync(channel + "Sync", result); + } + } + } + }); } /// @@ -115,22 +142,21 @@ public void OnSync(string channel, Func listener) /// /// Channelname. /// Callback Method. - public void Once(string channel, Action listener) + public async void Once(string channel, Action listener) { - Electron.SignalrElectron.Clients.All.SendAsync("registerOnceIpcMainChannel", channel); - /*BridgeConnector.Socket.On(channel, (args) => + var resultSignalr = await SignalrSerializeHelper.GetSignalrResultJArrayNoTimeout("registerOnceIpcMainChannel", channel); + + List objectArray = FormatArguments(resultSignalr); + + if (objectArray.Count == 1) + { + listener(objectArray.First()); + } + else { - List objectArray = FormatArguments(args); + listener(objectArray); + } - if (objectArray.Count == 1) - { - listener(objectArray.First()); - } - else - { - listener(objectArray); - } - });*/ } /// diff --git a/ElectronNET.Host/api/ipc.js b/ElectronNET.Host/api/ipc.js index 8e9cacb1..39bc57cb 100644 --- a/ElectronNET.Host/api/ipc.js +++ b/ElectronNET.Host/api/ipc.js @@ -3,22 +3,22 @@ const electron_1 = require("electron"); module.exports = (socket) => { socket.on('registerIpcMainChannel', (channel) => { electron_1.ipcMain.on(channel, (event, args) => { - socket.invoke(channel, [event.preventDefault(), args]); + socket.invoke("IpcOnChannel", channel, [event.preventDefault(), args]); }); }); socket.on('registerSyncIpcMainChannel', (channel) => { electron_1.ipcMain.on(channel, (event, args) => { - const x = socket; - x.removeAllListeners(channel + 'Sync'); + //const x = socket; + //x.removeAllListeners(channel + 'Sync'); socket.on(channel + 'Sync', (result) => { event.returnValue = result; }); - socket.invoke(channel, [event.preventDefault(), args]); + socket.invoke("IpcOnChannel", channel, [event.preventDefault(), args]); }); }); - socket.on('registerOnceIpcMainChannel', (channel) => { + socket.on('registerOnceIpcMainChannel', (guid, channel) => { electron_1.ipcMain.once(channel, (event, args) => { - socket.invoke(channel, [event.preventDefault(), args]); + socket.invoke("SendClientResponseJArray", guid, [event.preventDefault(), args]); }); }); socket.on('removeAllListenersIpcMainChannel', (channel) => { diff --git a/ElectronNET.Host/api/ipc.js.map b/ElectronNET.Host/api/ipc.js.map index 00a583d9..5803cf5d 100644 --- a/ElectronNET.Host/api/ipc.js.map +++ b/ElectronNET.Host/api/ipc.js.map @@ -1 +1 @@ -{"version":3,"file":"ipc.js","sourceRoot":"","sources":["ipc.ts"],"names":[],"mappings":";AAAA,uCAA+D;AAE/D,iBAAS,CAAC,MAAyB,EAAE,EAAE;IAEnC,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE;QAC5C,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QAChD,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,MAAM,CAAC,GAAQ,MAAM,CAAC;YACtB,CAAC,CAAC,kBAAkB,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;YACvC,MAAM,CAAC,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACnC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QAChD,kBAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,YAAY,GAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAkB,CAAC;QAC7G,IAAI,IAAI,GAAgB,IAAI,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC9B,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM;aACT;SACJ;QAED,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC3C;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"ipc.js","sourceRoot":"","sources":["ipc.ts"],"names":[],"mappings":";AAAA,uCAA+D;AAE/D,iBAAS,CAAC,MAAyB,EAAE,EAAE;IAEnC,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE;QAC5C,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QAChD,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,wBAAwB;YACxB,yCAAyC;YACzC,MAAM,CAAC,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACnC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAC,IAAI,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,YAAY,GAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAkB,CAAC;QAC7G,IAAI,IAAI,GAAgB,IAAI,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC9B,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM;aACT;SACJ;QAED,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC3C;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/ipc.ts b/ElectronNET.Host/api/ipc.ts index 2fbb0b9c..8f3c3663 100644 --- a/ElectronNET.Host/api/ipc.ts +++ b/ElectronNET.Host/api/ipc.ts @@ -4,25 +4,24 @@ export = (socket: SignalR.Hub.Proxy) => { socket.on('registerIpcMainChannel', (channel) => { ipcMain.on(channel, (event, args) => { - socket.invoke(channel, [event.preventDefault(), args]); + socket.invoke("IpcOnChannel", channel, [event.preventDefault(), args]); }); }); socket.on('registerSyncIpcMainChannel', (channel) => { ipcMain.on(channel, (event, args) => { - const x = socket; - x.removeAllListeners(channel + 'Sync'); + //const x = socket; + //x.removeAllListeners(channel + 'Sync'); socket.on(channel + 'Sync', (result) => { event.returnValue = result; }); - - socket.invoke(channel, [event.preventDefault(), args]); + socket.invoke("IpcOnChannel", channel, [event.preventDefault(), args]); }); }); - socket.on('registerOnceIpcMainChannel', (channel) => { + socket.on('registerOnceIpcMainChannel', (guid, channel) => { ipcMain.once(channel, (event, args) => { - socket.invoke(channel, [event.preventDefault(), args]); + socket.invoke("SendClientResponseJArray",guid, [event.preventDefault(), args]); }); }); diff --git a/ElectronNET.Host/main.js b/ElectronNET.Host/main.js index 23122fcb..c48ba0f2 100644 --- a/ElectronNET.Host/main.js +++ b/ElectronNET.Host/main.js @@ -20,6 +20,8 @@ let launchUrl; let manifestJsonFileName = 'electron.manifest.json'; let watchable = false; +let autoReconnect = true; + if (app.commandLine.hasSwitch('manifest')) { manifestJsonFileName = app.commandLine.getSwitchValue('manifest'); }; @@ -208,6 +210,36 @@ var getStartSignalrListener = function (port) { }, 5000); }); + connectionHubElectron.onclose(function (e) { + isConnected = false; + + if (e) { + console.log('Connection closed with error: ' + e); + } else { + console.log('Disconnected'); + } + + if (!autoReconnect) { + return; + } + + setTimeout(function () { + connectionHubElectron.start().then(function () { + isConnected = true; + console.log('Electron signalr Connection started on port %s at %s', port, "127.0.0.1" + "/electron"); + /*connectionHubElectron.send("CreateNewWindows", null).catch(function (err) { + return console.error(err.toString()); + });*/ + }) + .catch(function (err) { + console.log("HubElectron error: " + err); + setTimeout(() => { + getStartSignalrConnections(port); + }, 5000); + });; + }, 2000); + }); + if (appApi === undefined) appApi = require('./api/app')(connectionHubElectron, app); if (browserWindows === undefined) browserWindows = require('./api/browserWindows')(connectionHubElectron, app); if (commandLine === undefined) commandLine = require('./api/commandLine')(connectionHubElectron, app); From 55afa0a7dad3dd303fd4a6317a83f307181fdc27 Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Tue, 1 Mar 2022 04:33:21 +0100 Subject: [PATCH 05/15] Update packages, fix some URLs --- ElectronNET.API/BridgeSettings.cs | 4 ++-- ElectronNET.API/ElectronNET.API.csproj | 4 ++-- ElectronNET.API/WebHostBuilderExtensions.cs | 4 ++-- ElectronNET.API/WindowManager.cs | 2 +- ElectronNET.CLI/ElectronNET.CLI.csproj | 2 +- ElectronNET.WebApp/Controllers/CrashHangController.cs | 4 ++-- ElectronNET.WebApp/Controllers/WindowsController.cs | 2 +- ElectronNET.WebApp/ElectronNET.WebApp.csproj | 2 +- ElectronNET.WebApp/Startup.cs | 10 ++++++++++ 9 files changed, 22 insertions(+), 12 deletions(-) diff --git a/ElectronNET.API/BridgeSettings.cs b/ElectronNET.API/BridgeSettings.cs index 96a2653a..b707a61b 100644 --- a/ElectronNET.API/BridgeSettings.cs +++ b/ElectronNET.API/BridgeSettings.cs @@ -11,7 +11,7 @@ public static class BridgeSettings /// /// The socket port. /// - public static string SocketPort { get; internal set; } + public static string SocketPort { get; set; } /// /// Gets the web port. @@ -19,6 +19,6 @@ public static class BridgeSettings /// /// The web port. /// - public static string WebPort { get; internal set; } + public static string WebPort { get; set; } } } diff --git a/ElectronNET.API/ElectronNET.API.csproj b/ElectronNET.API/ElectronNET.API.csproj index e69ce975..33667108 100644 --- a/ElectronNET.API/ElectronNET.API.csproj +++ b/ElectronNET.API/ElectronNET.API.csproj @@ -36,13 +36,13 @@ This package contains the API to access the "native" electron API. - + all runtime; build; native; contentfiles; analyzers - + diff --git a/ElectronNET.API/WebHostBuilderExtensions.cs b/ElectronNET.API/WebHostBuilderExtensions.cs index e5d9db37..ae7a7442 100644 --- a/ElectronNET.API/WebHostBuilderExtensions.cs +++ b/ElectronNET.API/WebHostBuilderExtensions.cs @@ -50,11 +50,11 @@ public static IWebHostBuilder UseElectron(this IWebHostBuilder builder, string[] if (Directory.Exists($"{AppDomain.CurrentDomain.BaseDirectory}\\wwwroot")) { builder.UseContentRoot(AppDomain.CurrentDomain.BaseDirectory) - .UseUrls("http://localhost:" + BridgeSettings.WebPort); + .UseUrls("http://127.0.0.1:" + BridgeSettings.WebPort); } else { - builder.UseUrls("http://localhost:" + BridgeSettings.WebPort); + builder.UseUrls("http://127.0.0.1:" + BridgeSettings.WebPort); } } diff --git a/ElectronNET.API/WindowManager.cs b/ElectronNET.API/WindowManager.cs index 583cd422..6ed4540d 100644 --- a/ElectronNET.API/WindowManager.cs +++ b/ElectronNET.API/WindowManager.cs @@ -101,7 +101,7 @@ public async Task CreateWindowAsync(BrowserWindowOptions options, string browserWindowId = null; - if (loadUrl.ToUpper() == "HTTP://LOCALHOST") + if (loadUrl.ToUpper() == "HTTP://127.0.0.1") { loadUrl = $"{loadUrl}:{BridgeSettings.WebPort}"; } diff --git a/ElectronNET.CLI/ElectronNET.CLI.csproj b/ElectronNET.CLI/ElectronNET.CLI.csproj index a4bd0118..03a3a3de 100644 --- a/ElectronNET.CLI/ElectronNET.CLI.csproj +++ b/ElectronNET.CLI/ElectronNET.CLI.csproj @@ -77,7 +77,7 @@ - + all runtime; build; native; contentfiles; analyzers diff --git a/ElectronNET.WebApp/Controllers/CrashHangController.cs b/ElectronNET.WebApp/Controllers/CrashHangController.cs index 6df56ea8..e1f2dfc3 100644 --- a/ElectronNET.WebApp/Controllers/CrashHangController.cs +++ b/ElectronNET.WebApp/Controllers/CrashHangController.cs @@ -12,7 +12,7 @@ public IActionResult Index() { Electron.IpcMain.On("process-crash", async (args) => { - string viewPath = $"http://localhost:{BridgeSettings.WebPort}/crashhang/processcrash"; + string viewPath = $"http://127.0.0.1:{BridgeSettings.WebPort}/crashhang/processcrash"; var browserWindow = await Electron.WindowManager.CreateWindowAsync(viewPath); browserWindow.WebContents.OnCrashed += async (killed) => @@ -38,7 +38,7 @@ public IActionResult Index() Electron.IpcMain.On("process-hang", async (args) => { - string viewPath = $"http://localhost:{BridgeSettings.WebPort}/crashhang/processhang"; + string viewPath = $"http://127.0.0.1:{BridgeSettings.WebPort}/crashhang/processhang"; var browserWindow = await Electron.WindowManager.CreateWindowAsync(viewPath); browserWindow.OnUnresponsive += async () => diff --git a/ElectronNET.WebApp/Controllers/WindowsController.cs b/ElectronNET.WebApp/Controllers/WindowsController.cs index a528b279..abdabf7e 100644 --- a/ElectronNET.WebApp/Controllers/WindowsController.cs +++ b/ElectronNET.WebApp/Controllers/WindowsController.cs @@ -11,7 +11,7 @@ public IActionResult Index() { if (HybridSupport.IsElectronActive) { - string viewPath = $"http://localhost:{BridgeSettings.WebPort}/windows/demowindow"; + string viewPath = $"http://127.0.0.1:{BridgeSettings.WebPort}/windows/demowindow"; Electron.IpcMain.On("new-window", async (args) => { diff --git a/ElectronNET.WebApp/ElectronNET.WebApp.csproj b/ElectronNET.WebApp/ElectronNET.WebApp.csproj index 0ce2fdd1..bcd3aa76 100644 --- a/ElectronNET.WebApp/ElectronNET.WebApp.csproj +++ b/ElectronNET.WebApp/ElectronNET.WebApp.csproj @@ -16,7 +16,7 @@ - + diff --git a/ElectronNET.WebApp/Startup.cs b/ElectronNET.WebApp/Startup.cs index a79ecaa2..71de257c 100644 --- a/ElectronNET.WebApp/Startup.cs +++ b/ElectronNET.WebApp/Startup.cs @@ -67,6 +67,16 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) endpoints.MapHub("/electron"); }); + // Set Defaults + if (BridgeSettings.SocketPort == null) + { + BridgeSettings.SocketPort = "5000"; + } + if (BridgeSettings.WebPort == null) + { + BridgeSettings.WebPort = "5000"; + } + if (HybridSupport.IsElectronActive) { ElectronBootstrap(); From 7198e0daf18747124f8d7e1ba752823f217cf376 Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Tue, 1 Mar 2022 04:40:58 +0100 Subject: [PATCH 06/15] Update outdated js libs --- .../ElectronHostHook/package-lock.json | 245 +++ ElectronNET.Host/api/browserWindows.js | 2 +- ElectronNET.Host/api/browserWindows.js.map | 2 +- ElectronNET.Host/api/webContents.js | 2 +- ElectronNET.Host/api/webContents.js.map | 2 +- ElectronNET.Host/package-lock.json | 909 +++----- ElectronNET.Host/package.json | 12 +- .../ElectronHostHook/package-lock.json | 1926 ++++++++++++----- .../ElectronHostHook/package.json | 6 +- 9 files changed, 1970 insertions(+), 1136 deletions(-) create mode 100644 ElectronNET.Host/ElectronHostHook/package-lock.json diff --git a/ElectronNET.Host/ElectronHostHook/package-lock.json b/ElectronNET.Host/ElectronHostHook/package-lock.json new file mode 100644 index 00000000..56263c84 --- /dev/null +++ b/ElectronNET.Host/ElectronHostHook/package-lock.json @@ -0,0 +1,245 @@ +{ + "name": "electron-host-hook", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "electron-host-hook", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "@aspnet/signalr": "^1.0.27", + "@types/signalr": "^2.2.37", + "@types/socket.io": "^2.1.12", + "typescript": "^4.3.5" + } + }, + "node_modules/@aspnet/signalr": { + "version": "1.0.27", + "resolved": "https://registry.npmjs.org/@aspnet/signalr/-/signalr-1.0.27.tgz", + "integrity": "sha512-utZvBF9snjdwIBpvcFa6htqFTVaTN50QIZUoiznKpYSZImew1a1Ci7VYmK8HODqwRqUtj0o5/xR1nzt8xex5sA==", + "deprecated": "This package is no longer supported. Consider using @microsoft/signalr.", + "dev": true + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", + "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==", + "dev": true + }, + "node_modules/@types/engine.io": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/engine.io/-/engine.io-3.1.7.tgz", + "integrity": "sha512-qNjVXcrp+1sS8YpRUa714r0pgzOwESdW5UjHL7D/2ZFdBX0BXUXtg1LUrp+ylvqbvMcMWUy73YpRoxPN2VoKAQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jquery": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", + "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", + "dev": true, + "dependencies": { + "@types/sizzle": "*" + } + }, + "node_modules/@types/node": { + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", + "dev": true + }, + "node_modules/@types/signalr": { + "version": "2.2.37", + "resolved": "https://registry.npmjs.org/@types/signalr/-/signalr-2.2.37.tgz", + "integrity": "sha512-Oay9I3cevxwfQlc8y60FPdtskRqYCPmDMZYamObcD+kr1uDC/EmfOT/2AmrKh/4JQ148yWbTkadnd8ZLM5tOFA==", + "dev": true, + "dependencies": { + "@types/jquery": "*" + } + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "node_modules/@types/socket.io": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-2.1.13.tgz", + "integrity": "sha512-JRgH3nCgsWel4OPANkhH8TelpXvacAJ9VeryjuqCDiaVDMpLysd6sbt0dr6Z15pqH3p2YpOT3T1C5vQ+O/7uyg==", + "dev": true, + "dependencies": { + "@types/engine.io": "*", + "@types/node": "*", + "@types/socket.io-parser": "*" + } + }, + "node_modules/@types/socket.io-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/socket.io-parser/-/socket.io-parser-3.0.0.tgz", + "integrity": "sha512-Ry/rbTE6HQNL9eu3LpL1Ocup5VexXu1bSSGlSho/IR5LuRc8YvxwSNJ3JxqTltVJEATLbZkMQETSbxfKNgp4Ew==", + "deprecated": "This is a stub types definition. socket.io-parser provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "socket.io-parser": "*" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/socket.io-parser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz", + "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/typescript": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + } + }, + "dependencies": { + "@aspnet/signalr": { + "version": "1.0.27", + "resolved": "https://registry.npmjs.org/@aspnet/signalr/-/signalr-1.0.27.tgz", + "integrity": "sha512-utZvBF9snjdwIBpvcFa6htqFTVaTN50QIZUoiznKpYSZImew1a1Ci7VYmK8HODqwRqUtj0o5/xR1nzt8xex5sA==", + "dev": true + }, + "@socket.io/component-emitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", + "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==", + "dev": true + }, + "@types/engine.io": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/engine.io/-/engine.io-3.1.7.tgz", + "integrity": "sha512-qNjVXcrp+1sS8YpRUa714r0pgzOwESdW5UjHL7D/2ZFdBX0BXUXtg1LUrp+ylvqbvMcMWUy73YpRoxPN2VoKAQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/jquery": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", + "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", + "dev": true, + "requires": { + "@types/sizzle": "*" + } + }, + "@types/node": { + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", + "dev": true + }, + "@types/signalr": { + "version": "2.2.37", + "resolved": "https://registry.npmjs.org/@types/signalr/-/signalr-2.2.37.tgz", + "integrity": "sha512-Oay9I3cevxwfQlc8y60FPdtskRqYCPmDMZYamObcD+kr1uDC/EmfOT/2AmrKh/4JQ148yWbTkadnd8ZLM5tOFA==", + "dev": true, + "requires": { + "@types/jquery": "*" + } + }, + "@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "@types/socket.io": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-2.1.13.tgz", + "integrity": "sha512-JRgH3nCgsWel4OPANkhH8TelpXvacAJ9VeryjuqCDiaVDMpLysd6sbt0dr6Z15pqH3p2YpOT3T1C5vQ+O/7uyg==", + "dev": true, + "requires": { + "@types/engine.io": "*", + "@types/node": "*", + "@types/socket.io-parser": "*" + } + }, + "@types/socket.io-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/socket.io-parser/-/socket.io-parser-3.0.0.tgz", + "integrity": "sha512-Ry/rbTE6HQNL9eu3LpL1Ocup5VexXu1bSSGlSho/IR5LuRc8YvxwSNJ3JxqTltVJEATLbZkMQETSbxfKNgp4Ew==", + "dev": true, + "requires": { + "socket.io-parser": "*" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "socket.io-parser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz", + "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==", + "dev": true, + "requires": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1" + } + }, + "typescript": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "dev": true + } + } +} diff --git a/ElectronNET.Host/api/browserWindows.js b/ElectronNET.Host/api/browserWindows.js index 06a76b3f..8f9f3246 100644 --- a/ElectronNET.Host/api/browserWindows.js +++ b/ElectronNET.Host/api/browserWindows.js @@ -597,7 +597,7 @@ module.exports = (socket, app) => { getWindowById(id).setVibrancy(type); }); socket.on('browserWindow-setBrowserView', (id, browserViewId) => { - getWindowById(id).setBrowserView(browserView_1.browserViewMediateService(browserViewId)); + getWindowById(id).setBrowserView((0, browserView_1.browserViewMediateService)(browserViewId)); }); function getWindowById(id) { for (let index = 0; index < windows.length; index++) { diff --git a/ElectronNET.Host/api/browserWindows.js.map b/ElectronNET.Host/api/browserWindows.js.map index e2eb8ed5..7aa3769e 100644 --- a/ElectronNET.Host/api/browserWindows.js.map +++ b/ElectronNET.Host/api/browserWindows.js.map @@ -1 +1 @@ -{"version":3,"file":"browserWindows.js","sourceRoot":"","sources":["browserWindows.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browserWindows.js","sourceRoot":"","sources":["browserWindows.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/webContents.js b/ElectronNET.Host/api/webContents.js index 8f7ed592..efcffc30 100644 --- a/ElectronNET.Host/api/webContents.js +++ b/ElectronNET.Host/api/webContents.js @@ -215,7 +215,7 @@ module.exports = (socket) => { }); function getWindowById(id) { if (id >= 1000) { - return browserView_1.browserViewMediateService(id - 1000); + return (0, browserView_1.browserViewMediateService)(id - 1000); } return electron_1.BrowserWindow.fromId(id); } diff --git a/ElectronNET.Host/api/webContents.js.map b/ElectronNET.Host/api/webContents.js.map index 9389ef55..81cfb051 100644 --- a/ElectronNET.Host/api/webContents.js.map +++ b/ElectronNET.Host/api/webContents.js.map @@ -1 +1 @@ -{"version":3,"file":"webContents.js","sourceRoot":"","sources":["webContents.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"webContents.js","sourceRoot":"","sources":["webContents.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/package-lock.json b/ElectronNET.Host/package-lock.json index f07f5fe2..8d536492 100644 --- a/ElectronNET.Host/package-lock.json +++ b/ElectronNET.Host/package-lock.json @@ -12,16 +12,16 @@ "@microsoft/signalr": "^6.0.2", "@types/signalr": "^2.2.37", "dasherize": "^2.0.0", - "electron-updater": "^4.3.9", - "image-size": "^1.0.0", + "electron-updater": "^4.6.5", + "image-size": "^1.0.1", "portscanner": "^2.2.0", - "socket.io": "^2.4.0" + "socket.io": "^4.4.1" }, "devDependencies": { - "@types/node": "^15.14.0", - "electron": "^13.1.5", + "@types/node": "^17.0.21", + "electron": "^17.1.0", "tslint": "^6.1.3", - "typescript": "^4.3.5" + "typescript": "^4.6.2" } }, "node_modules/@babel/code-frame": { @@ -60,9 +60,9 @@ } }, "node_modules/@electron/get": { - "version": "1.12.4", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz", - "integrity": "sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.13.1.tgz", + "integrity": "sha512-U5vkXDZ9DwXtkPqlB45tfYnnYBN8PePp1z/XDCupnSpdrxT8/ThCv9WCwPLf9oqiSGZTkH6dx2jDUPuoXpjkcA==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -77,7 +77,7 @@ "node": ">=8.6" }, "optionalDependencies": { - "global-agent": "^2.0.2", + "global-agent": "^3.0.0", "global-tunnel-ng": "^2.7.1" } }, @@ -111,6 +111,14 @@ "node": ">=6" } }, + "node_modules/@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", @@ -123,6 +131,21 @@ "node": ">=6" } }, + "node_modules/@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, "node_modules/@types/jquery": { "version": "3.5.13", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", @@ -132,10 +155,9 @@ } }, "node_modules/@types/node": { - "version": "15.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.0.tgz", - "integrity": "sha512-um/+/ip3QZmwLfIkWZSNtQIJNVAqrJ92OkLMeuZrjZMTAJniI7fh8N8OICyDhAJ2mzgk/fmYFo72jRr5HyZ1EQ==", - "dev": true + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" }, "node_modules/@types/semver": { "version": "7.3.6", @@ -167,22 +189,17 @@ } }, "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" } }, - "node_modules/after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" - }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -204,11 +221,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" - }, "node_modules/async": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", @@ -217,25 +229,12 @@ "lodash": "^4.17.14" } }, - "node_modules/backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -244,15 +243,10 @@ "node": "^4.5.0 || >= 5.9" } }, - "node_modules/blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" - }, "node_modules/boolean": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.1.2.tgz", - "integrity": "sha512-YN6UmV0FfLlBVvRvNPx3pz5W/mUoYB24J4WSXOKP/OOJpi+Oq6WYqPaNTHzjI0QzwWtnvEd5CGYyQPgp1jFxnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", "dev": true, "optional": true }, @@ -282,9 +276,9 @@ "dev": true }, "node_modules/builder-util-runtime": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.5.tgz", - "integrity": "sha512-fgUFHKtMNjdvH6PDRFntdIGUPgwZ69sXsAqEulCtoiqgWes5agrMq/Ud274zjJRTbckYh2PHh8/1CpFc6dpsbQ==", + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.2.tgz", + "integrity": "sha512-rhuKm5vh7E0aAmT6i8aoSfEjxzdYEFX7zDApK+eNgOhjofnWb74d9SRJv0H/8nsgOkos0TZ4zxW0P8J4N7xQ2A==", "dependencies": { "debug": "^4.3.2", "sax": "^1.2.4" @@ -293,22 +287,6 @@ "node": ">=12.0.0" } }, - "node_modules/builder-util-runtime/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -413,21 +391,11 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "node_modules/component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" - }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, - "node_modules/component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -461,41 +429,40 @@ } }, "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "engines": { "node": ">= 0.6" } }, - "node_modules/core-js": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", - "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/dasherize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" }, "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { "ms": "2.1.2" }, @@ -562,13 +529,13 @@ "dev": true }, "node_modules/electron": { - "version": "13.1.5", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.5.tgz", - "integrity": "sha512-ZoMCcPQNs/zO/Zdb5hq5H+rwRaKrdI3/sfXEwBVMx7f5jwa9jPQB3dZ2+7t59uD9VcFAWsH/pozr8nPPlv0tyw==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-17.1.0.tgz", + "integrity": "sha512-X/qdldmQ8lA15NmeraubWCTtMeTO8K9Ser0wtSCgOXVh53Sr1Ea0VQQ7Q9LuGgWRVz4qtr40cntuEdM8icdmTw==", "dev": true, "hasInstallScript": true, "dependencies": { - "@electron/get": "^1.0.1", + "@electron/get": "^1.13.0", "@types/node": "^14.6.2", "extract-zip": "^1.0.3" }, @@ -580,15 +547,15 @@ } }, "node_modules/electron-updater": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-4.3.9.tgz", - "integrity": "sha512-LCNfedSwZfS4Hza+pDyPR05LqHtGorCStaBgVpRnfKxOlZcvpYEX0AbMeH5XUtbtGRoH2V8osbbf2qKPNb7AsA==", + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-4.6.5.tgz", + "integrity": "sha512-kdTly8O9mSZfm9fslc1mnCY+mYOeaYRy7ERa2Fed240u01BKll3aiupzkd07qKw69KvhBSzuHroIW3mF0D8DWA==", "dependencies": { - "@types/semver": "^7.3.5", - "builder-util-runtime": "8.7.5", + "@types/semver": "^7.3.6", + "builder-util-runtime": "8.9.2", "fs-extra": "^10.0.0", "js-yaml": "^4.1.0", - "lazy-val": "^1.0.4", + "lazy-val": "^1.0.5", "lodash.escaperegexp": "^4.1.2", "lodash.isequal": "^4.5.0", "semver": "^7.3.5" @@ -668,71 +635,54 @@ } }, "node_modules/engine.io": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", - "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", + "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "ws": "~7.4.2" + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" } }, - "node_modules/engine.io-client": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", - "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", - "dependencies": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.6.2", - "yeast": "0.1.2" - } - }, - "node_modules/engine.io-client/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/engine.io-client/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, "node_modules/engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", "dependencies": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" + "@socket.io/base64-arraybuffer": "~1.0.2" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/engine.io/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" + "node_modules/engine.io/node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/env-paths": { @@ -905,14 +855,13 @@ } }, "node_modules/global-agent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.2.0.tgz", - "integrity": "sha512-+20KpaW6DDLqhG7JDiJpD1JvNvb8ts+TNl7BPOYcURqCrXqnN1Vf+XVOrkKJAFPqfX+oEhsdzOj1hLWkBTdNJg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", "dev": true, "optional": true, "dependencies": { "boolean": "^3.0.1", - "core-js": "^3.6.5", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", @@ -994,19 +943,6 @@ "node": ">= 0.4.0" } }, - "node_modules/has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dependencies": { - "isarray": "2.0.1" - } - }, - "node_modules/has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -1023,9 +959,9 @@ "dev": true }, "node_modules/image-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", - "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.1.tgz", + "integrity": "sha512-VAwkvNSNGClRw9mDHhc5Efax8PLlsOGcUTh0T/LIriC8vPA3U5PdqXWqkz406MoYHMKW8Uf9gWr05T/rYB44kQ==", "dependencies": { "queue": "6.0.2" }, @@ -1036,11 +972,6 @@ "node": ">=12.0.0" } }, - "node_modules/indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1083,11 +1014,6 @@ "lodash.isfinite": "^3.3.2" } }, - "node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1197,19 +1123,19 @@ } }, "node_modules/mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dependencies": { - "mime-db": "1.48.0" + "mime-db": "1.51.0" }, "engines": { "node": ">= 0.6" @@ -1260,9 +1186,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } @@ -1309,6 +1235,14 @@ "node": ">=4" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -1345,16 +1279,6 @@ "node": ">=6" } }, - "node_modules/parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "node_modules/parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1588,95 +1512,37 @@ } }, "node_modules/socket.io": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", - "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", "dependencies": { - "debug": "~4.1.0", - "engine.io": "~3.5.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.4.0", - "socket.io-parser": "~3.4.0" + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" } }, "node_modules/socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" - }, - "node_modules/socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", - "dependencies": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - } - }, - "node_modules/socket.io-client/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/socket.io-client/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/socket.io-client/node_modules/socket.io-parser": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", - "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", - "dependencies": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - } + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==" }, "node_modules/socket.io-parser": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", - "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", - "dependencies": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" - } - }, - "node_modules/socket.io-parser/node_modules/component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/socket.io/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", "dependencies": { - "ms": "^2.1.1" + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" } }, "node_modules/sprintf-js": { @@ -1718,11 +1584,6 @@ "node": ">=4" } }, - "node_modules/to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" - }, "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -1838,9 +1699,9 @@ "dev": true }, "node_modules/typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -1885,6 +1746,14 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -1925,14 +1794,6 @@ } } }, - "node_modules/xmlhttprequest-ssl": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", - "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -1947,11 +1808,6 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } - }, - "node_modules/yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" } }, "dependencies": { @@ -1982,15 +1838,15 @@ } }, "@electron/get": { - "version": "1.12.4", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz", - "integrity": "sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.13.1.tgz", + "integrity": "sha512-U5vkXDZ9DwXtkPqlB45tfYnnYBN8PePp1z/XDCupnSpdrxT8/ThCv9WCwPLf9oqiSGZTkH6dx2jDUPuoXpjkcA==", "dev": true, "requires": { "debug": "^4.1.1", "env-paths": "^2.2.0", "fs-extra": "^8.1.0", - "global-agent": "^2.0.2", + "global-agent": "^3.0.0", "global-tunnel-ng": "^2.7.1", "got": "^9.6.0", "progress": "^2.0.3", @@ -2024,6 +1880,11 @@ "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "dev": true }, + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==" + }, "@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", @@ -2033,6 +1894,21 @@ "defer-to-connect": "^1.0.1" } }, + "@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, "@types/jquery": { "version": "3.5.13", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", @@ -2042,10 +1918,9 @@ } }, "@types/node": { - "version": "15.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.0.tgz", - "integrity": "sha512-um/+/ip3QZmwLfIkWZSNtQIJNVAqrJ92OkLMeuZrjZMTAJniI7fh8N8OICyDhAJ2mzgk/fmYFo72jRr5HyZ1EQ==", - "dev": true + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" }, "@types/semver": { "version": "7.3.6", @@ -2074,19 +1949,14 @@ } }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -2105,11 +1975,6 @@ "sprintf-js": "~1.0.2" } }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" - }, "async": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", @@ -2118,36 +1983,21 @@ "lodash": "^4.17.14" } }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" - }, "base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" - }, "boolean": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.1.2.tgz", - "integrity": "sha512-YN6UmV0FfLlBVvRvNPx3pz5W/mUoYB24J4WSXOKP/OOJpi+Oq6WYqPaNTHzjI0QzwWtnvEd5CGYyQPgp1jFxnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", "dev": true, "optional": true }, @@ -2174,22 +2024,12 @@ "dev": true }, "builder-util-runtime": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.5.tgz", - "integrity": "sha512-fgUFHKtMNjdvH6PDRFntdIGUPgwZ69sXsAqEulCtoiqgWes5agrMq/Ud274zjJRTbckYh2PHh8/1CpFc6dpsbQ==", + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.2.tgz", + "integrity": "sha512-rhuKm5vh7E0aAmT6i8aoSfEjxzdYEFX7zDApK+eNgOhjofnWb74d9SRJv0H/8nsgOkos0TZ4zxW0P8J4N7xQ2A==", "requires": { "debug": "^4.3.2", "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "requires": { - "ms": "2.1.2" - } - } } }, "builtin-modules": { @@ -2279,21 +2119,11 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2324,16 +2154,9 @@ } }, "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" - }, - "core-js": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", - "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==", - "dev": true, - "optional": true + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" }, "core-util-is": { "version": "1.0.2", @@ -2341,16 +2164,24 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "dasherize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -2400,12 +2231,12 @@ "dev": true }, "electron": { - "version": "13.1.5", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.5.tgz", - "integrity": "sha512-ZoMCcPQNs/zO/Zdb5hq5H+rwRaKrdI3/sfXEwBVMx7f5jwa9jPQB3dZ2+7t59uD9VcFAWsH/pozr8nPPlv0tyw==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-17.1.0.tgz", + "integrity": "sha512-X/qdldmQ8lA15NmeraubWCTtMeTO8K9Ser0wtSCgOXVh53Sr1Ea0VQQ7Q9LuGgWRVz4qtr40cntuEdM8icdmTw==", "dev": true, "requires": { - "@electron/get": "^1.0.1", + "@electron/get": "^1.13.0", "@types/node": "^14.6.2", "extract-zip": "^1.0.3" }, @@ -2419,15 +2250,15 @@ } }, "electron-updater": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-4.3.9.tgz", - "integrity": "sha512-LCNfedSwZfS4Hza+pDyPR05LqHtGorCStaBgVpRnfKxOlZcvpYEX0AbMeH5XUtbtGRoH2V8osbbf2qKPNb7AsA==", + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-4.6.5.tgz", + "integrity": "sha512-kdTly8O9mSZfm9fslc1mnCY+mYOeaYRy7ERa2Fed240u01BKll3aiupzkd07qKw69KvhBSzuHroIW3mF0D8DWA==", "requires": { - "@types/semver": "^7.3.5", - "builder-util-runtime": "8.7.5", + "@types/semver": "^7.3.6", + "builder-util-runtime": "8.9.2", "fs-extra": "^10.0.0", "js-yaml": "^4.1.0", - "lazy-val": "^1.0.4", + "lazy-val": "^1.0.5", "lodash.escaperegexp": "^4.1.2", "lodash.isequal": "^4.5.0", "semver": "^7.3.5" @@ -2489,71 +2320,36 @@ } }, "engine.io": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", - "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", + "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "ws": "~7.4.2" + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "engine.io-client": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", - "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", - "requires": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.6.2", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "requires": {} } } }, "engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" + "@socket.io/base64-arraybuffer": "~1.0.2" } }, "env-paths": { @@ -2688,14 +2484,13 @@ } }, "global-agent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.2.0.tgz", - "integrity": "sha512-+20KpaW6DDLqhG7JDiJpD1JvNvb8ts+TNl7BPOYcURqCrXqnN1Vf+XVOrkKJAFPqfX+oEhsdzOj1hLWkBTdNJg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", "dev": true, "optional": true, "requires": { "boolean": "^3.0.1", - "core-js": "^3.6.5", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", @@ -2759,19 +2554,6 @@ "function-bind": "^1.1.1" } }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "requires": { - "isarray": "2.0.1" - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -2785,18 +2567,13 @@ "dev": true }, "image-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", - "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.1.tgz", + "integrity": "sha512-VAwkvNSNGClRw9mDHhc5Efax8PLlsOGcUTh0T/LIriC8vPA3U5PdqXWqkz406MoYHMKW8Uf9gWr05T/rYB44kQ==", "requires": { "queue": "6.0.2" } }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2836,11 +2613,6 @@ "lodash.isfinite": "^3.3.2" } }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2938,16 +2710,16 @@ } }, "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { - "mime-db": "1.48.0" + "mime-db": "1.51.0" } }, "mimic-response": { @@ -2986,9 +2758,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "node-fetch": { "version": "2.6.7", @@ -3015,6 +2787,11 @@ "pify": "^3.0.0" } }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -3045,16 +2822,6 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3255,99 +3022,31 @@ } }, "socket.io": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", - "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", "requires": { - "debug": "~4.1.0", - "engine.io": "~3.5.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.4.0", - "socket.io-parser": "~3.4.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - } + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" } }, "socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" - }, - "socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "socket.io-parser": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", - "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", - "requires": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - } - } - } + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==" }, "socket.io-parser": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", - "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", "requires": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - } + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" } }, "sprintf-js": { @@ -3383,11 +3082,6 @@ "has-flag": "^3.0.0" } }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" - }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -3474,9 +3168,9 @@ "dev": true }, "typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", "dev": true }, "universalify": { @@ -3508,6 +3202,11 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -3534,11 +3233,6 @@ "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "requires": {} }, - "xmlhttprequest-ssl": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", - "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==" - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -3553,11 +3247,6 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" } } } diff --git a/ElectronNET.Host/package.json b/ElectronNET.Host/package.json index 6bb13d9a..4511a422 100644 --- a/ElectronNET.Host/package.json +++ b/ElectronNET.Host/package.json @@ -15,15 +15,15 @@ "@microsoft/signalr": "^6.0.2", "@types/signalr": "^2.2.37", "dasherize": "^2.0.0", - "electron-updater": "^4.3.9", - "image-size": "^1.0.0", + "electron-updater": "^4.6.5", + "image-size": "^1.0.1", "portscanner": "^2.2.0", - "socket.io": "^2.4.0" + "socket.io": "^4.4.1" }, "devDependencies": { - "@types/node": "^15.14.0", - "electron": "^13.1.5", + "@types/node": "^17.0.21", + "electron": "^17.1.0", "tslint": "^6.1.3", - "typescript": "^4.3.5" + "typescript": "^4.6.2" } } diff --git a/ElectronNET.WebApp/ElectronHostHook/package-lock.json b/ElectronNET.WebApp/ElectronHostHook/package-lock.json index 93c073c4..db70d938 100644 --- a/ElectronNET.WebApp/ElectronHostHook/package-lock.json +++ b/ElectronNET.WebApp/ElectronHostHook/package-lock.json @@ -9,31 +9,82 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "exceljs": "^1.10.0" + "exceljs": "^4.3.0" }, "devDependencies": { - "@aspnet/signalr": "^1.0.27", + "@microsoft/signalr": "^6.0.2", "@types/signalr": "^2.2.37", - "@types/socket.io": "^2.1.2", - "typescript": "^3.4.5" + "@types/socket.io": "^3.0.1", + "typescript": "^4.6.2" } }, - "node_modules/@aspnet/signalr": { - "version": "1.0.27", - "resolved": "https://registry.npmjs.org/@aspnet/signalr/-/signalr-1.0.27.tgz", - "integrity": "sha512-utZvBF9snjdwIBpvcFa6htqFTVaTN50QIZUoiznKpYSZImew1a1Ci7VYmK8HODqwRqUtj0o5/xR1nzt8xex5sA==", - "deprecated": "This package is no longer supported. Consider using @microsoft/signalr.", - "dev": true - }, - "node_modules/@types/engine.io": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/engine.io/-/engine.io-3.1.4.tgz", - "integrity": "sha512-98rXVukLD6/ozrQ2O80NAlWDGA4INg+tqsEReWJldqyi2fulC9V7Use/n28SWgROXKm6003ycWV4gZHoF8GA6w==", + "node_modules/@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + } + }, + "node_modules/@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0", + "lodash.isundefined": "^3.0.1", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/@microsoft/signalr": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-6.0.2.tgz", + "integrity": "sha512-OYSRqvOyJWMA9cRvbOIKG0f5wE9xRiayQvkDTQ8gru3WT3WevHk8KGsBUV3x2NmizTSq7gSShQr/l9GkdT/e8g==", "dev": true, "dependencies": { - "@types/node": "*" + "abort-controller": "^3.0.0", + "eventsource": "^1.0.7", + "fetch-cookie": "^0.11.0", + "node-fetch": "^2.6.1", + "ws": "^7.4.5" + } + }, + "node_modules/@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "dev": true, + "engines": { + "node": ">= 0.6.0" } }, + "node_modules/@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", + "dev": true + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true + }, "node_modules/@types/jquery": { "version": "3.5.13", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", @@ -44,10 +95,9 @@ } }, "node_modules/@types/node": { - "version": "14.0.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.9.tgz", - "integrity": "sha512-0sCTiXKXELOBxvZLN4krQ0FPOAA7ij+6WwvD0k/PHd9/KAkr4dXel5J9fh6F4x1FwAQILqAWkmpeuS6mjf1iKA==", - "dev": true + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" }, "node_modules/@types/signalr": { "version": "2.2.37", @@ -65,30 +115,55 @@ "dev": true }, "node_modules/@types/socket.io": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-2.1.8.tgz", - "integrity": "sha512-NIQfh9WwJuJKlgmby4NgwMpoBOmNPCDgaRNPiLYZBtkbHkszK/9R52B5yGkd5a34rbVdAADuo8FhOS/5AZDemw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-3.0.2.tgz", + "integrity": "sha512-pu0sN9m5VjCxBZVK8hW37ZcMe8rjn4HHggBN5CbaRTvFwv5jOmuIRZEuddsBPa9Th0ts0SIo3Niukq+95cMBbQ==", + "deprecated": "This is a stub types definition. socket.io provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "socket.io": "*" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "dependencies": { - "@types/engine.io": "*", - "@types/node": "*" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/archiver": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", - "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", "dependencies": { "archiver-utils": "^2.1.0", - "async": "^2.6.3", + "async": "^3.2.0", "buffer-crc32": "^0.2.1", - "glob": "^7.1.4", - "readable-stream": "^3.4.0", - "tar-stream": "^2.1.0", - "zip-stream": "^2.1.2" + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" }, "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/archiver-utils": { @@ -125,47 +200,61 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/arguments-extended": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/arguments-extended/-/arguments-extended-0.0.3.tgz", - "integrity": "sha1-YQfkkX0OtvCk3WYyD8Fa/HLvSUY=", - "dependencies": { - "extended": "~0.0.3", - "is-extended": "~0.0.8" - } + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/array-extended": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/array-extended/-/array-extended-0.0.11.tgz", - "integrity": "sha1-1xRK50jek8pybxIQCdv/FibRZL0=", + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { - "arguments-extended": "~0.0.3", - "extended": "~0.0.3", - "is-extended": "~0.0.3" + "safe-buffer": "~5.1.0" } }, "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dependencies": { - "lodash": "^4.17.14" - } + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } }, "node_modules/big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", "engines": { "node": ">=0.6" } @@ -183,9 +272,9 @@ } }, "node_modules/bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -207,12 +296,26 @@ } }, "node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "node_modules/buffer-crc32": { @@ -224,9 +327,9 @@ } }, "node_modules/buffer-indexof-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz", - "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", "engines": { "node": ">=0.10" } @@ -250,32 +353,24 @@ "node": "*" } }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, "node_modules/compress-commons": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", - "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", "dependencies": { "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", + "crc32-stream": "^4.0.2", "normalize-path": "^3.0.0", - "readable-stream": "^2.3.6" + "readable-stream": "^3.6.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/compress-commons/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node": ">= 10" } }, "node_modules/concat-map": { @@ -283,46 +378,82 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } }, - "node_modules/crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "node_modules/crc-32": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz", + "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==", "dependencies": { - "buffer": "^5.1.0" + "exit-on-epipe": "~1.0.1", + "printj": "~1.3.1" + }, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" } }, "node_modules/crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", "dependencies": { - "crc": "^3.4.4", + "crc-32": "^1.2.0", "readable-stream": "^3.4.0" }, "engines": { - "node": ">= 6.9.0" + "node": ">= 10" } }, - "node_modules/date-extended": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/date-extended/-/date-extended-0.0.6.tgz", - "integrity": "sha1-I4AtV90b94GIE/4MMuhRqG2iZ8k=", + "node_modules/dayjs": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.8.tgz", + "integrity": "sha512-wbNwDfBHHur9UOzNUjeKUOJ0fCb0a52Wx0xInmQ7Y8FstyajiV1NmK1e00cxsr9YrE9r7yAChE0VvpuY5Rnlow==" + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, "dependencies": { - "array-extended": "~0.0.3", - "extended": "~0.0.3", - "is-extended": "~0.0.3" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/declare.js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/declare.js/-/declare.js-0.0.8.tgz", - "integrity": "sha1-BHit/5VkwAT1Hfc9i8E0AZ0o3N4=" - }, "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -345,6 +476,19 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -353,58 +497,130 @@ "once": "^1.4.0" } }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" + "node_modules/engine.io": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", + "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "engines": { + "node": ">=10.0.0" + } }, - "node_modules/exceljs": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-1.15.0.tgz", - "integrity": "sha512-72CySYLU1oBIixpBkWV0mR6YM+X8v2GyyWgKBovS9Hso0Ul7S3FtlWGeAifxB+lpzznokWMRDLMZ8EyS2tX6xg==", - "dependencies": { - "archiver": "^3.0.0", - "fast-csv": "^2.4.1", - "jszip": "^3.1.5", - "moment": "^2.22.2", - "promish": "^5.1.1", - "sax": "^1.2.4", - "tmp": "^0.1.0", - "unzipper": "^0.9.12" + "node_modules/engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "dev": true, + "dependencies": { + "@socket.io/base64-arraybuffer": "~1.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=10.0.0" } }, - "node_modules/extended": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/extended/-/extended-0.0.6.tgz", - "integrity": "sha1-f7i/e52uOXWG5IVwrP1kLHjlBmk=", + "node_modules/engine.io/node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "dev": true, "dependencies": { - "extender": "~0.0.5" + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" } }, - "node_modules/extender": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/extender/-/extender-0.0.10.tgz", - "integrity": "sha1-WJwHSCvmGhRgttgfnCSqZ+jzJM0=", + "node_modules/exceljs": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz", + "integrity": "sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w==", "dependencies": { - "declare.js": "~0.0.4" + "archiver": "^5.0.0", + "dayjs": "^1.8.34", + "fast-csv": "^4.3.1", + "jszip": "^3.5.0", + "readable-stream": "^3.6.0", + "saxes": "^5.0.1", + "tmp": "^0.2.0", + "unzipper": "^0.10.11", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "engines": { + "node": ">=0.8" } }, "node_modules/fast-csv": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-2.5.0.tgz", - "integrity": "sha512-M/9ezLU9/uDwvDZTt9sNFJa0iLDUsbhYJwPtnE0D9MjeuB6DY9wRCyUPZta9iI6cSz5wBWGaUPL61QH8h92cNA==", - "dependencies": { - "extended": "0.0.6", - "is-extended": "0.0.10", - "object-extended": "0.0.7", - "safer-buffer": "^2.1.2", - "string-extended": "0.0.8" + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "dependencies": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/fetch-cookie": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.11.0.tgz", + "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==", + "dev": true, + "dependencies": { + "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=8" } }, "node_modules/fs-constants": { @@ -431,10 +647,21 @@ "node": ">=0.6" } }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -451,14 +678,28 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/immediate": { "version": "3.0.6", @@ -479,23 +720,15 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/is-extended": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/is-extended/-/is-extended-0.0.10.tgz", - "integrity": "sha1-JE4UDfdbscmjEG9BL/GC+1NKbWI=", - "dependencies": { - "extended": "~0.0.3" - } - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "node_modules/jszip": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.4.0.tgz", - "integrity": "sha512-gZAOYuPl4EhPTXT0GjhI3o+ZAz3su6EhLrKUoAivcKqyqC7laS5JEv4XWZND9BgcDcF83vI85yGbDmDR6UhrIg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", + "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -517,10 +750,23 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dependencies": { "readable-stream": "^2.0.5" }, @@ -542,6 +788,19 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -555,11 +814,6 @@ "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -570,25 +824,86 @@ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" + }, "node_modules/lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=" + }, "node_modules/lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -612,12 +927,39 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/moment": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz", - "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, "engines": { - "node": "*" + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, "node_modules/normalize-path": { @@ -628,14 +970,13 @@ "node": ">=0.10.0" } }, - "node_modules/object-extended": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/object-extended/-/object-extended-0.0.7.tgz", - "integrity": "sha1-hP0j9WsVWCrrPoiwXLVdJDLWijM=", - "dependencies": { - "array-extended": "~0.0.4", - "extended": "~0.0.3", - "is-extended": "~0.0.3" + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/once": { @@ -646,6 +987,15 @@ "wrappy": "1" } }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "dependencies": { + "url-parse": "^1.4.3" + } + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -659,22 +1009,43 @@ "node": ">=0.10.0" } }, + "node_modules/printj": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==", + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/promish": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/promish/-/promish-5.1.1.tgz", - "integrity": "sha512-37xEzvSas6JIYI/BcKh5TwhaqWepI44u/hC+tQStkX1sxMf+L756beESPgSWirxRCPqtXHzosoNzpjLnTnP8FA==", - "dependencies": { - "es6-promise": "^3.0.2" - }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, "engines": { - "node": ">=6.0.0" + "node": ">=6" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -688,31 +1059,63 @@ "node": ">= 6" } }, + "node_modules/readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } }, "node_modules/set-immediate-shim": { "version": "1.0.1", @@ -727,48 +1130,97 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/socket.io": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", + "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/string-extended": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/string-extended/-/string-extended-0.0.8.tgz", - "integrity": "sha1-dBlX3/SHsCcqee7FpE8jnubxfM0=", + "node_modules/socket.io-adapter": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", + "dev": true + }, + "node_modules/socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "dev": true, "dependencies": { - "array-extended": "~0.0.5", - "date-extended": "~0.0.3", - "extended": "~0.0.3", - "is-extended": "~0.0.3" + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" } }, "node_modules/tar-stream": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", - "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dependencies": { - "bl": "^4.0.1", + "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" } }, "node_modules/tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, "dependencies": { - "rimraf": "^2.6.3" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" }, "engines": { "node": ">=6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, "node_modules/traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", @@ -778,22 +1230,31 @@ } }, "node_modules/typescript": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.3.tgz", - "integrity": "sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=4.2.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" } }, "node_modules/unzipper": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.9.15.tgz", - "integrity": "sha512-2aaUvO4RAeHDvOCuEtth7jrHFaCKTSXPqUkXwADaLBzGbgZGzUDccoEdJ5lW+3RmfpOZYNx0Rw6F6PUzM6caIA==", + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", "dependencies": { "big-integer": "^1.6.17", "binary": "~0.3.0", @@ -801,6 +1262,7 @@ "buffer-indexof-polyfill": "~1.0.0", "duplexer2": "~0.1.4", "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", "listenercount": "~1.0.1", "readable-stream": "~2.3.6", "setimmediate": "~1.0.4" @@ -820,46 +1282,177 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "node_modules/ws": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, "node_modules/zip-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", - "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", "dependencies": { "archiver-utils": "^2.1.0", - "compress-commons": "^2.1.1", - "readable-stream": "^3.4.0" + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">= 6" + "node": ">= 10" } } }, "dependencies": { - "@aspnet/signalr": { - "version": "1.0.27", - "resolved": "https://registry.npmjs.org/@aspnet/signalr/-/signalr-1.0.27.tgz", - "integrity": "sha512-utZvBF9snjdwIBpvcFa6htqFTVaTN50QIZUoiznKpYSZImew1a1Ci7VYmK8HODqwRqUtj0o5/xR1nzt8xex5sA==", - "dev": true - }, - "@types/engine.io": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/engine.io/-/engine.io-3.1.4.tgz", - "integrity": "sha512-98rXVukLD6/ozrQ2O80NAlWDGA4INg+tqsEReWJldqyi2fulC9V7Use/n28SWgROXKm6003ycWV4gZHoF8GA6w==", + "@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "requires": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + } + }, + "@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "requires": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0", + "lodash.isundefined": "^3.0.1", + "lodash.uniq": "^4.5.0" + } + }, + "@microsoft/signalr": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-6.0.2.tgz", + "integrity": "sha512-OYSRqvOyJWMA9cRvbOIKG0f5wE9xRiayQvkDTQ8gru3WT3WevHk8KGsBUV3x2NmizTSq7gSShQr/l9GkdT/e8g==", "dev": true, "requires": { - "@types/node": "*" + "abort-controller": "^3.0.0", + "eventsource": "^1.0.7", + "fetch-cookie": "^0.11.0", + "node-fetch": "^2.6.1", + "ws": "^7.4.5" } }, + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "dev": true + }, + "@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", + "dev": true + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true + }, "@types/jquery": { "version": "3.5.13", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", @@ -870,10 +1463,9 @@ } }, "@types/node": { - "version": "14.0.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.9.tgz", - "integrity": "sha512-0sCTiXKXELOBxvZLN4krQ0FPOAA7ij+6WwvD0k/PHd9/KAkr4dXel5J9fh6F4x1FwAQILqAWkmpeuS6mjf1iKA==", - "dev": true + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" }, "@types/signalr": { "version": "2.2.37", @@ -891,27 +1483,45 @@ "dev": true }, "@types/socket.io": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-2.1.8.tgz", - "integrity": "sha512-NIQfh9WwJuJKlgmby4NgwMpoBOmNPCDgaRNPiLYZBtkbHkszK/9R52B5yGkd5a34rbVdAADuo8FhOS/5AZDemw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-3.0.2.tgz", + "integrity": "sha512-pu0sN9m5VjCxBZVK8hW37ZcMe8rjn4HHggBN5CbaRTvFwv5jOmuIRZEuddsBPa9Th0ts0SIo3Niukq+95cMBbQ==", + "dev": true, + "requires": { + "socket.io": "*" + } + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "requires": { - "@types/engine.io": "*", - "@types/node": "*" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "archiver": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", - "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", "requires": { "archiver-utils": "^2.1.0", - "async": "^2.6.3", + "async": "^3.2.0", "buffer-crc32": "^0.2.1", - "glob": "^7.1.4", - "readable-stream": "^3.4.0", - "tar-stream": "^2.1.0", - "zip-stream": "^2.1.2" + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" } }, "archiver-utils": { @@ -944,50 +1554,47 @@ "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } } } }, - "arguments-extended": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/arguments-extended/-/arguments-extended-0.0.3.tgz", - "integrity": "sha1-YQfkkX0OtvCk3WYyD8Fa/HLvSUY=", - "requires": { - "extended": "~0.0.3", - "is-extended": "~0.0.8" - } - }, - "array-extended": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/array-extended/-/array-extended-0.0.11.tgz", - "integrity": "sha1-1xRK50jek8pybxIQCdv/FibRZL0=", - "requires": { - "arguments-extended": "~0.0.3", - "extended": "~0.0.3", - "is-extended": "~0.0.3" - } - }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true }, "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" }, "binary": { "version": "0.3.0", @@ -999,9 +1606,9 @@ } }, "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -1023,12 +1630,12 @@ } }, "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "buffer-crc32": { @@ -1037,9 +1644,9 @@ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" }, "buffer-indexof-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz", - "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==" }, "buffers": { "version": "0.1.1", @@ -1054,31 +1661,21 @@ "traverse": ">=0.3.0 <0.4" } }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, "compress-commons": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", - "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", "requires": { "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", + "crc32-stream": "^4.0.2", "normalize-path": "^3.0.0", - "readable-stream": "^2.3.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } + "readable-stream": "^3.6.0" } }, "concat-map": { @@ -1086,43 +1683,59 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true + }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "crc-32": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz", + "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==", "requires": { - "buffer": "^5.1.0" + "exit-on-epipe": "~1.0.1", + "printj": "~1.3.1" } }, "crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", "requires": { - "crc": "^3.4.4", + "crc-32": "^1.2.0", "readable-stream": "^3.4.0" } }, - "date-extended": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/date-extended/-/date-extended-0.0.6.tgz", - "integrity": "sha1-I4AtV90b94GIE/4MMuhRqG2iZ8k=", + "dayjs": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.8.tgz", + "integrity": "sha512-wbNwDfBHHur9UOzNUjeKUOJ0fCb0a52Wx0xInmQ7Y8FstyajiV1NmK1e00cxsr9YrE9r7yAChE0VvpuY5Rnlow==" + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, "requires": { - "array-extended": "~0.0.3", - "extended": "~0.0.3", - "is-extended": "~0.0.3" + "ms": "2.1.2" } }, - "declare.js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/declare.js/-/declare.js-0.0.8.tgz", - "integrity": "sha1-BHit/5VkwAT1Hfc9i8E0AZ0o3N4=" - }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -1144,6 +1757,19 @@ "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } } } }, @@ -1155,52 +1781,94 @@ "once": "^1.4.0" } }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" - }, - "exceljs": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-1.15.0.tgz", - "integrity": "sha512-72CySYLU1oBIixpBkWV0mR6YM+X8v2GyyWgKBovS9Hso0Ul7S3FtlWGeAifxB+lpzznokWMRDLMZ8EyS2tX6xg==", + "engine.io": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", + "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", + "dev": true, "requires": { - "archiver": "^3.0.0", - "fast-csv": "^2.4.1", - "jszip": "^3.1.5", - "moment": "^2.22.2", - "promish": "^5.1.1", - "sax": "^1.2.4", - "tmp": "^0.1.0", - "unzipper": "^0.9.12" - } - }, - "extended": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/extended/-/extended-0.0.6.tgz", - "integrity": "sha1-f7i/e52uOXWG5IVwrP1kLHjlBmk=", + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "dependencies": { + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "dev": true, + "requires": {} + } + } + }, + "engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "dev": true, "requires": { - "extender": "~0.0.5" + "@socket.io/base64-arraybuffer": "~1.0.2" } }, - "extender": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/extender/-/extender-0.0.10.tgz", - "integrity": "sha1-WJwHSCvmGhRgttgfnCSqZ+jzJM0=", + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true + }, + "eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "dev": true, "requires": { - "declare.js": "~0.0.4" + "original": "^1.0.0" } }, + "exceljs": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz", + "integrity": "sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w==", + "requires": { + "archiver": "^5.0.0", + "dayjs": "^1.8.34", + "fast-csv": "^4.3.1", + "jszip": "^3.5.0", + "readable-stream": "^3.6.0", + "saxes": "^5.0.1", + "tmp": "^0.2.0", + "unzipper": "^0.10.11", + "uuid": "^8.3.0" + } + }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + }, "fast-csv": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-2.5.0.tgz", - "integrity": "sha512-M/9ezLU9/uDwvDZTt9sNFJa0iLDUsbhYJwPtnE0D9MjeuB6DY9wRCyUPZta9iI6cSz5wBWGaUPL61QH8h92cNA==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "requires": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + } + }, + "fetch-cookie": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.11.0.tgz", + "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==", + "dev": true, "requires": { - "extended": "0.0.6", - "is-extended": "0.0.10", - "object-extended": "0.0.7", - "safer-buffer": "^2.1.2", - "string-extended": "0.0.8" + "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0" } }, "fs-constants": { @@ -1222,12 +1890,22 @@ "inherits": "~2.0.0", "mkdirp": ">=0.5 0", "rimraf": "2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1238,14 +1916,14 @@ } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "immediate": { "version": "3.0.6", @@ -1266,23 +1944,15 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "is-extended": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/is-extended/-/is-extended-0.0.10.tgz", - "integrity": "sha1-JE4UDfdbscmjEG9BL/GC+1NKbWI=", - "requires": { - "extended": "~0.0.3" - } - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "jszip": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.4.0.tgz", - "integrity": "sha512-gZAOYuPl4EhPTXT0GjhI3o+ZAz3su6EhLrKUoAivcKqyqC7laS5JEv4XWZND9BgcDcF83vI85yGbDmDR6UhrIg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", + "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", "requires": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -1303,13 +1973,26 @@ "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } } } }, "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "requires": { "readable-stream": "^2.0.5" }, @@ -1327,6 +2010,19 @@ "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } } } }, @@ -1343,11 +2039,6 @@ "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -1358,25 +2049,80 @@ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" + }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" }, + "lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + }, + "lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=" + }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, + "lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=" + }, "lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "requires": { + "mime-db": "1.51.0" + } + }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -1394,25 +2140,37 @@ "minimist": "^1.2.5" } }, - "moment": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz", - "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==" + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, - "object-extended": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/object-extended/-/object-extended-0.0.7.tgz", - "integrity": "sha1-hP0j9WsVWCrrPoiwXLVdJDLWijM=", - "requires": { - "array-extended": "~0.0.4", - "extended": "~0.0.3", - "is-extended": "~0.0.3" - } + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true }, "once": { "version": "1.4.0", @@ -1422,6 +2180,15 @@ "wrappy": "1" } }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -1432,18 +2199,33 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "printj": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==" + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "promish": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/promish/-/promish-5.1.1.tgz", - "integrity": "sha512-37xEzvSas6JIYI/BcKh5TwhaqWepI44u/hC+tQStkX1sxMf+L756beESPgSWirxRCPqtXHzosoNzpjLnTnP8FA==", - "requires": { - "es6-promise": "^3.0.2" - } + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true }, "readable-stream": { "version": "3.6.0", @@ -1455,28 +2237,40 @@ "util-deprecate": "^1.0.1" } }, + "readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "requires": { + "xmlchars": "^2.2.0" + } }, "set-immediate-shim": { "version": "1.0.1", @@ -1488,31 +2282,51 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "socket.io": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", + "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + } + }, + "socket.io-adapter": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", + "dev": true + }, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "dev": true, + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" } }, - "string-extended": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/string-extended/-/string-extended-0.0.8.tgz", - "integrity": "sha1-dBlX3/SHsCcqee7FpE8jnubxfM0=", + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "array-extended": "~0.0.5", - "date-extended": "~0.0.3", - "extended": "~0.0.3", - "is-extended": "~0.0.3" + "safe-buffer": "~5.2.0" } }, "tar-stream": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", - "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "requires": { - "bl": "^4.0.1", + "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", @@ -1520,28 +2334,51 @@ } }, "tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + } + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, "requires": { - "rimraf": "^2.6.3" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, "traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" }, "typescript": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.3.tgz", - "integrity": "sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "unzipper": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.9.15.tgz", - "integrity": "sha512-2aaUvO4RAeHDvOCuEtth7jrHFaCKTSXPqUkXwADaLBzGbgZGzUDccoEdJ5lW+3RmfpOZYNx0Rw6F6PUzM6caIA==", + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", "requires": { "big-integer": "^1.6.17", "binary": "~0.3.0", @@ -1549,6 +2386,7 @@ "buffer-indexof-polyfill": "~1.0.0", "duplexer2": "~0.1.4", "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", "listenercount": "~1.0.1", "readable-stream": "~2.3.6", "setimmediate": "~1.0.4" @@ -1567,27 +2405,89 @@ "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } } } }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "ws": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "dev": true, + "requires": {} + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, "zip-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", - "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", "requires": { "archiver-utils": "^2.1.0", - "compress-commons": "^2.1.1", - "readable-stream": "^3.4.0" + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" } } } diff --git a/ElectronNET.WebApp/ElectronHostHook/package.json b/ElectronNET.WebApp/ElectronHostHook/package.json index 22d33d30..221d7917 100644 --- a/ElectronNET.WebApp/ElectronHostHook/package.json +++ b/ElectronNET.WebApp/ElectronHostHook/package.json @@ -15,10 +15,10 @@ "devDependencies": { "@microsoft/signalr": "^6.0.2", "@types/signalr": "^2.2.37", - "@types/socket.io": "^2.1.2", - "typescript": "^3.4.5" + "@types/socket.io": "^3.0.1", + "typescript": "^4.6.2" }, "dependencies": { - "exceljs": "^1.10.0" + "exceljs": "^4.3.0" } } From e353919342be6ad4810b5af0d6b9d2d0cdc11067 Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Tue, 1 Mar 2022 11:11:50 +0100 Subject: [PATCH 07/15] Fix multiple areas that should return a int, not a string (was also wrong in socketio version) -> Should fix most areas with system.text.json --- ElectronNET.API/App.cs | 6 +- ElectronNET.API/BrowserWindow.cs | 3 +- ElectronNET.API/Dock.cs | 3 +- .../Extensions/SignalrSerializeHelper.cs | 140 ++++++++++++++ ElectronNET.API/Hubs/HubElectron.cs | 183 +++++++++--------- ElectronNET.API/Screen.cs | 3 +- ElectronNET.API/Session.cs | 3 +- ElectronNET.API/WindowManager.cs | 17 +- ElectronNET.Host/api/app.js | 4 +- ElectronNET.Host/api/app.js.map | 2 +- ElectronNET.Host/api/app.ts | 4 +- ElectronNET.Host/api/browserView.js | 2 +- ElectronNET.Host/api/browserView.js.map | 2 +- ElectronNET.Host/api/browserView.ts | 2 +- ElectronNET.Host/api/browserWindows.js | 14 +- ElectronNET.Host/api/browserWindows.js.map | 2 +- ElectronNET.Host/api/browserWindows.ts | 14 +- ElectronNET.Host/api/dock.js | 2 +- ElectronNET.Host/api/dock.js.map | 2 +- ElectronNET.Host/api/dock.ts | 2 +- ElectronNET.Host/api/screen.js | 2 +- ElectronNET.Host/api/screen.js.map | 2 +- ElectronNET.Host/api/screen.ts | 2 +- ElectronNET.Host/api/webContents.js | 2 +- ElectronNET.Host/api/webContents.js.map | 2 +- ElectronNET.Host/api/webContents.ts | 2 +- 26 files changed, 278 insertions(+), 144 deletions(-) diff --git a/ElectronNET.API/App.cs b/ElectronNET.API/App.cs index 98256fdc..aa5d9e94 100644 --- a/ElectronNET.API/App.cs +++ b/ElectronNET.API/App.cs @@ -1064,8 +1064,7 @@ public async void SetAppUserModelId(string id) /// Result of import. Value of 0 indicates success. public async Task ImportCertificateAsync(ImportCertificateOptions options, CancellationToken cancellationToken = default) { - var signalrResult = await SignalrSerializeHelper.GetSignalrResultString("appImportCertificate", JObject.FromObject(options, _jsonSerializer)); - return int.Parse(signalrResult); + return await SignalrSerializeHelper.GetSignalrResultInt("appImportCertificate", JObject.FromObject(options, _jsonSerializer)); } /// @@ -1115,8 +1114,7 @@ public async Task SetBadgeCountAsync(int count, CancellationToken cancella /// The cancellation token. public async Task GetBadgeCountAsync(CancellationToken cancellationToken = default) { - var signalrResult = await SignalrSerializeHelper.GetSignalrResultString("appGetBadgeCount"); - return int.Parse(signalrResult); + return await SignalrSerializeHelper.GetSignalrResultInt("appGetBadgeCount"); } /// diff --git a/ElectronNET.API/BrowserWindow.cs b/ElectronNET.API/BrowserWindow.cs index 615cb1b2..bcec316d 100644 --- a/ElectronNET.API/BrowserWindow.cs +++ b/ElectronNET.API/BrowserWindow.cs @@ -1876,8 +1876,7 @@ public async void SetParentWindow(BrowserWindow parent) /// public async Task GetParentWindowAsync() { - string parentId = await SignalrSerializeHelper.GetSignalrResultString("browserWindowGetParentWindow", Id); - var browserWindowId = int.Parse(parentId.ToString()); + int browserWindowId = await SignalrSerializeHelper.GetSignalrResultInt("browserWindowGetParentWindow", Id); var browserWindow = Electron.WindowManager.BrowserWindows.ToList().Single(x => x.Id == browserWindowId); return browserWindow; } diff --git a/ElectronNET.API/Dock.cs b/ElectronNET.API/Dock.cs index 8f263df7..fc1db39c 100644 --- a/ElectronNET.API/Dock.cs +++ b/ElectronNET.API/Dock.cs @@ -53,8 +53,7 @@ internal static Dock Instance /// Return an ID representing the request. public async Task BounceAsync(DockBounceType type, CancellationToken cancellationToken = default) { - var result = await SignalrSerializeHelper.GetSignalrResultString("dock-bounce", type.GetDescription()); - return int.Parse(result); + return await SignalrSerializeHelper.GetSignalrResultInt("dock-bounce", type.GetDescription()); } /// diff --git a/ElectronNET.API/Extensions/SignalrSerializeHelper.cs b/ElectronNET.API/Extensions/SignalrSerializeHelper.cs index f8df960e..21317c9b 100644 --- a/ElectronNET.API/Extensions/SignalrSerializeHelper.cs +++ b/ElectronNET.API/Extensions/SignalrSerializeHelper.cs @@ -903,5 +903,145 @@ public static async Task GetSignalrResultJArray(string signalrCommand, J return result; } + public static async Task GetSignalrResultInt(string signalrCommand) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString()); + + int result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultInt(string signalrCommand, int parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + int result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultInt(string signalrCommand, string parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + int result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultInt(string signalrCommand, JObject parameter1) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); + + int result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + + public static async Task GetSignalrResultInt(string signalrCommand, JObject parameter1, string parameter2) + { + var taskCompletionSource = new TaskCompletionSource(); + var guid = Guid.NewGuid(); + HubElectron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); + await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); + + int result; + try + { + var task = taskCompletionSource.Task; + if (await Task.WhenAny(task, Task.Delay(5000)) == task) + { + result = await task; + } + else + { + throw new ArgumentNullException(); + } + } + finally + { + HubElectron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); + } + + return result; + } + } } diff --git a/ElectronNET.API/Hubs/HubElectron.cs b/ElectronNET.API/Hubs/HubElectron.cs index ac71059b..5d7d3481 100644 --- a/ElectronNET.API/Hubs/HubElectron.cs +++ b/ElectronNET.API/Hubs/HubElectron.cs @@ -93,12 +93,13 @@ public void SendClientResponseJObject(string guidString, JObject response) } } - public void SendClientResponseInt(string guidString, JObject response) + public void SendClientResponseInt(string guidString, int response) { - TaskCompletionSource tcs; + //Type type = ((ObjectHandle)response).Unwrap().GetType(); + TaskCompletionSource tcs; Guid guid = new Guid(guidString); - if (ClientResponsesJObject.TryGetValue(guid, out tcs)) + if (ClientResponsesInt.TryGetValue(guid, out tcs)) { // Trigger the task continuation tcs.TrySetResult(response); @@ -129,54 +130,54 @@ public void SendClientResponseJArray(string guidString, JArray response) #region App - public void AppWindowAllClosed(string id) + public void AppWindowAllClosed(int id) { // We invoke this hub always because we dont know if it's started independent from electron // If the main app quits id = 0, else we get the event id from electron (appWindowAllClosedEventId) Electron.App.TriggerOnWindowAllClosed(); } - public void AppBeforeQuit(string id) + public void AppBeforeQuit(int id) { Electron.App.TriggerOnBeforeQuit(new QuitEventArgs()); } - public void AppWillQuit(string id) + public void AppWillQuit(int id) { Electron.App.TriggerOnWillQuit(new QuitEventArgs()); } - public void AppBrowserWindowBlur(string id) + public void AppBrowserWindowBlur(int id) { Electron.App.TriggerOnBrowserWindowBlur(); } - public void AppBrowserWindowFocus(string id) + public void AppBrowserWindowFocus(int id) { Electron.App.TriggerOnBrowserWindowFocus(); } - public async Task AppBrowserWindowCreated(string id) + public async Task AppBrowserWindowCreated(int id) { Electron.App.TriggerOnBrowserWindowCreated(); } - public void AppWebContentsCreated(string id) + public void AppWebContentsCreated(int id) { Electron.App.TriggerOnWebContentsCreated(); } - public void AppAccessibilitySupportChanged(string id, bool state) + public void AppAccessibilitySupportChanged(int id, bool state) { Electron.App.TriggerOnAccessibilitySupportChanged(state); } - public void AppOpenFile(string id, string file) + public void AppOpenFile(int id, string file) { Electron.App.TriggerOnOpenFile(file); } - public void AppOpenUrl(string id, string url) + public void AppOpenUrl(int id, string url) { Electron.App.TriggerOnOpenUrl(url); } @@ -184,32 +185,32 @@ public void AppOpenUrl(string id, string url) #region AutoUpdater - public void AutoUpdaterOnError(string id, string error) + public void AutoUpdaterOnError(int id, string error) { Electron.AutoUpdater.TriggerOnError(error); } - public void AutoUpdaterOnCheckingForUpdate(string id) + public void AutoUpdaterOnCheckingForUpdate(int id) { Electron.AutoUpdater.TriggerOnCheckingForUpdate(); } - public void AutoUpdaterOnUpdateAvailable(string id, JObject jobject) + public void AutoUpdaterOnUpdateAvailable(int id, JObject jobject) { Electron.AutoUpdater.TriggerOnUpdateAvailable(jobject); } - public void AutoUpdaterOnUpdateNotAvailable(string id, JObject jobject) + public void AutoUpdaterOnUpdateNotAvailable(int id, JObject jobject) { Electron.AutoUpdater.TriggerOnUpdateNotAvailable(jobject); } - public void AutoUpdaterOnDownloadProgress(string id, JObject jobject) + public void AutoUpdaterOnDownloadProgress(int id, JObject jobject) { Electron.AutoUpdater.TriggerOnUpdateNotAvailable(jobject); } - public void AutoUpdaterOnUpdateDownloaded(string id, JObject jobject) + public void AutoUpdaterOnUpdateDownloaded(int id, JObject jobject) { Electron.AutoUpdater.TriggerOnUpdateNotAvailable(jobject); } @@ -218,21 +219,21 @@ public void AutoUpdaterOnUpdateDownloaded(string id, JObject jobject) #region BrowserWindow - public void BrowserWindowReadyToShow(string id) + public void BrowserWindowReadyToShow(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnReadyToShow(); } - public void BrowserWindowPageTitleUpdated(string id, string title) + public void BrowserWindowPageTitleUpdated(int id, string title) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnPageTitleUpdated(title); } - public void BrowserWindowClose(string id) + public void BrowserWindowClose(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnClose(); } @@ -245,187 +246,187 @@ public void BrowserWindowsClosed(JArray ids) } } - public void BrowserWindowClosed(string id) + public void BrowserWindowClosed(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnClosed(); } - public void BrowserWindowSessionEnd(string id) + public void BrowserWindowSessionEnd(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnSessionEnd(); } - public void BrowserWindowUnresponsive(string id) + public void BrowserWindowUnresponsive(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnUnresponsive(); } - public void BrowserWindowResponsive(string id) + public void BrowserWindowResponsive(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnResponsive(); } - public void BrowserWindowBlur(string id) + public void BrowserWindowBlur(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnBlur(); } - public void BrowserWindowFocus(string id) + public void BrowserWindowFocus(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnFocus(); } - public void BrowserWindowShow(string id) + public void BrowserWindowShow(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnShow(); } - public void BrowserWindowHide(string id) + public void BrowserWindowHide(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnHide(); } - public void BrowserWindowMaximize(string id) + public void BrowserWindowMaximize(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnMaximize(); } - public void BrowserWindowUnmaximize(string id) + public void BrowserWindowUnmaximize(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnUnmaximize(); } - public void BrowserWindowMinimize(string id) + public void BrowserWindowMinimize(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnMinimize(); } - public void BrowserWindowRestore(string id) + public void BrowserWindowRestore(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnRestore(); } - public void BrowserWindowResize(string id) + public void BrowserWindowResize(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnResize(); } - public void BrowserWindowMove(string id) + public void BrowserWindowMove(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnMove(); } - public void BrowserWindowMoved(string id) + public void BrowserWindowMoved(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnMoved(); } - public void BrowserWindowEnterFullScreen(string id) + public void BrowserWindowEnterFullScreen(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnEnterFullScreen(); } - public void BrowserWindowLeaveFullScreen(string id) + public void BrowserWindowLeaveFullScreen(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnLeaveFullScreen(); } - public void BrowserWindowEnterHtmlFullScreen(string id) + public void BrowserWindowEnterHtmlFullScreen(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnEnterHtmlFullScreen(); } - public void BrowserWindowLeaveHtmlFullScreen(string id) + public void BrowserWindowLeaveHtmlFullScreen(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnLeaveHtmlFullScreen(); } - public void BrowserWindowAppCommand(string id, string command) + public void BrowserWindowAppCommand(int id, string command) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnAppCommand(command); } - public void BrowserWindowScrollTouchBegin(string id) + public void BrowserWindowScrollTouchBegin(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnScrollTouchBegin(); } - public void BrowserWindowScrollTouchEnd(string id) + public void BrowserWindowScrollTouchEnd(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnScrollTouchEnd(); } - public void BrowserWindowScrollTouchEdge(string id) + public void BrowserWindowScrollTouchEdge(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnScrollTouchEdge(); } - public void BrowserWindowSwipe(string id, string direction) + public void BrowserWindowSwipe(int id, string direction) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnSwipe(direction); } - public void BrowserWindowSheetBegin(string id) + public void BrowserWindowSheetBegin(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnSheetBegin(); } - public void BrowserWindowSheetEnd(string id) + public void BrowserWindowSheetEnd(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnSheetEnd(); } - public void BrowserWindowNewWindowForTab(string id) + public void BrowserWindowNewWindowForTab(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.TriggerOnNewWindowForTab(); } - public void BrowserWindowMenuItemClicked(string id) + public void BrowserWindowMenuItemClicked(int id, string menuid) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); - window.TriggerOnMenuItemClicked(id); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnMenuItemClicked(menuid); } - public void BrowserWindowThumbbarButtonClicked(string id) + public void BrowserWindowThumbbarButtonClicked(int id, string thumbarButtonId) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); - ThumbarButton thumbarButton = window.ThumbarButtons.Where(x => x.Id == id).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + ThumbarButton thumbarButton = window.ThumbarButtons.Where(x => x.Id == thumbarButtonId).FirstOrDefault(); thumbarButton?.Click(); } #endregion #region Cookies - public void CookiesOnChanged(string id, JArray jarray) + public void CookiesOnChanged(int id, JArray jarray) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.WebContents.Session.Cookies.TriggerOnChanged(jarray); } #endregion @@ -639,15 +640,15 @@ public void TrayOnMenuItemClicked(string id) #endregion #region WebContents - public void WebContentOnCrashed(string id, bool crashed) + public void WebContentOnCrashed(int id, bool crashed) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.WebContents.TriggerOnCrashed(crashed); } - public void WebContentOnDidFinishLoad(string id) + public void WebContentOnDidFinishLoad(int id) { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == Int32.Parse(id)).FirstOrDefault(); + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); window.WebContents.TriggerOnDidFinishLoad(); } #endregion diff --git a/ElectronNET.API/Screen.cs b/ElectronNET.API/Screen.cs index 7f3c0857..2ae02c89 100644 --- a/ElectronNET.API/Screen.cs +++ b/ElectronNET.API/Screen.cs @@ -134,8 +134,7 @@ public async Task GetCursorScreenPointAsync() /// The height of the menu bar in pixels. public async Task GetMenuBarHeightAsync() { - var signalrResult = await SignalrSerializeHelper.GetSignalrResultString("screen-getMenuBarHeight"); - return int.Parse(signalrResult); + return await SignalrSerializeHelper.GetSignalrResultInt("screen-getMenuBarHeight"); } /// diff --git a/ElectronNET.API/Session.cs b/ElectronNET.API/Session.cs index 63d9c069..fbf46a5e 100644 --- a/ElectronNET.API/Session.cs +++ b/ElectronNET.API/Session.cs @@ -152,8 +152,7 @@ public async Task GetBlobDataAsync(string identifier) /// Callback is invoked with the session's current cache size. public async Task GetCacheSizeAsync() { - var signalrResult = await SignalrSerializeHelper.GetSignalrResultString("webContents-session-getCacheSize", Id); - return int.Parse(signalrResult); + return await SignalrSerializeHelper.GetSignalrResultInt("webContents-session-getCacheSize", Id); } /// diff --git a/ElectronNET.API/WindowManager.cs b/ElectronNET.API/WindowManager.cs index 6ed4540d..a60be20f 100644 --- a/ElectronNET.API/WindowManager.cs +++ b/ElectronNET.API/WindowManager.cs @@ -96,10 +96,10 @@ public async Task CreateWindowAsync(string loadUrl = "http://loca public async Task CreateWindowAsync(BrowserWindowOptions options, string loadUrl = "http://127.0.0.1:5000") { var guid = Guid.NewGuid(); - var taskCompletionSource = new TaskCompletionSource(); - HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + var taskCompletionSource = new TaskCompletionSource(); + HubElectron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); - string browserWindowId = null; + int browserWindowId; if (loadUrl.ToUpper() == "HTTP://127.0.0.1") { @@ -118,7 +118,7 @@ public async Task CreateWindowAsync(BrowserWindowOptions options, { options.X = 0; options.Y = 0; - browserWindowId = await SignalrSerializeHelper.GetSignalrResultString("createBrowserWindow", JObject.FromObject(options, _jsonSerializer), loadUrl); + browserWindowId = await SignalrSerializeHelper.GetSignalrResultInt("createBrowserWindow", JObject.FromObject(options, _jsonSerializer), loadUrl); } else @@ -135,11 +135,11 @@ public async Task CreateWindowAsync(BrowserWindowOptions options, ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore }; - browserWindowId = await SignalrSerializeHelper.GetSignalrResultString("createBrowserWindow", JObject.FromObject(options, _jsonSerializer), loadUrl); + browserWindowId = await SignalrSerializeHelper.GetSignalrResultInt("createBrowserWindow", JObject.FromObject(options, _jsonSerializer), loadUrl); } BrowserWindow browserWindow; - browserWindow = new BrowserWindow(int.Parse(browserWindowId)); + browserWindow = new BrowserWindow(browserWindowId); _browserWindows.Add(browserWindow); @@ -177,10 +177,9 @@ public async Task CreateBrowserViewAsync(BrowserViewConstructorOpti NullValueHandling = NullValueHandling.Ignore }; - var browserWindowResult = await SignalrSerializeHelper.GetSignalrResultString("createBrowserView", JObject.FromObject(options, ownjsonSerializer)); + int browserViewId = await SignalrSerializeHelper.GetSignalrResultInt("createBrowserView", JObject.FromObject(options, ownjsonSerializer)); - string browserViewId = browserWindowResult.ToString(); - BrowserView browserView = new BrowserView(int.Parse(browserViewId)); + BrowserView browserView = new BrowserView(browserViewId); _browserViews.Add(browserView); return browserView; diff --git a/ElectronNET.Host/api/app.js b/ElectronNET.Host/api/app.js index 5858d3f8..e649feb8 100644 --- a/ElectronNET.Host/api/app.js +++ b/ElectronNET.Host/api/app.js @@ -179,7 +179,7 @@ module.exports = (socket, app) => { }); socket.on('appImportCertificate', (guid, options) => { app.importCertificate(options, (result) => { - socket.invoke('SendClientResponseString', guid, result); + socket.invoke('SendClientResponseInt', guid, result); }); }); socket.on('appGetAppMetrics', (guid) => { @@ -196,7 +196,7 @@ module.exports = (socket, app) => { }); socket.on('appGetBadgeCount', (guid) => { const count = app.getBadgeCount(); - socket.invoke('SendClientResponseString', guid, count); + socket.invoke('SendClientResponseInt', guid, count); }); socket.on('appIsUnityRunning', (guid) => { const isUnityRunning = app.isUnityRunning(); diff --git a/ElectronNET.Host/api/app.js.map b/ElectronNET.Host/api/app.js.map index 9dd262ad..0d6a3814 100644 --- a/ElectronNET.Host/api/app.js.map +++ b/ElectronNET.Host/api/app.js.map @@ -1 +1 @@ -{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/app.ts b/ElectronNET.Host/api/app.ts index 8d44c170..52176da1 100644 --- a/ElectronNET.Host/api/app.ts +++ b/ElectronNET.Host/api/app.ts @@ -226,7 +226,7 @@ export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { socket.on('appImportCertificate', (guid, options) => { app.importCertificate(options, (result) => { - socket.invoke('SendClientResponseString', guid, result); + socket.invoke('SendClientResponseInt', guid, result); }); }); @@ -247,7 +247,7 @@ export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { socket.on('appGetBadgeCount', (guid) => { const count = app.getBadgeCount(); - socket.invoke('SendClientResponseString', guid, count); + socket.invoke('SendClientResponseInt', guid, count); }); socket.on('appIsUnityRunning', (guid) => { diff --git a/ElectronNET.Host/api/browserView.js b/ElectronNET.Host/api/browserView.js index 182f17b9..e88c266a 100644 --- a/ElectronNET.Host/api/browserView.js +++ b/ElectronNET.Host/api/browserView.js @@ -19,7 +19,7 @@ const browserViewApi = (socket) => { proxyToCredentialsMap[options.proxy] = options.proxyCredentials; } browserViews.push(browserView); - socket.invoke('SendClientResponseString', guid, browserView['id']); + socket.invoke('SendClientResponseInt', guid, browserView['id']); }); socket.on('browserView-getBounds', (guid, id) => { const bounds = getBrowserViewById(id).getBounds(); diff --git a/ElectronNET.Host/api/browserView.js.map b/ElectronNET.Host/api/browserView.js.map index d58ebb18..69c4d41d 100644 --- a/ElectronNET.Host/api/browserView.js.map +++ b/ElectronNET.Host/api/browserView.js.map @@ -1 +1 @@ -{"version":3,"file":"browserView.js","sourceRoot":"","sources":["browserView.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browserView.js","sourceRoot":"","sources":["browserView.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/browserView.ts b/ElectronNET.Host/api/browserView.ts index c28e85ae..3c0f6459 100644 --- a/ElectronNET.Host/api/browserView.ts +++ b/ElectronNET.Host/api/browserView.ts @@ -23,7 +23,7 @@ const browserViewApi = (socket: SignalR.Hub.Proxy) => { browserViews.push(browserView); - socket.invoke('SendClientResponseString', guid, browserView['id']); + socket.invoke('SendClientResponseInt', guid, browserView['id']); }); socket.on('browserView-getBounds', (guid, id) => { diff --git a/ElectronNET.Host/api/browserWindows.js b/ElectronNET.Host/api/browserWindows.js index 8f9f3246..b29017e4 100644 --- a/ElectronNET.Host/api/browserWindows.js +++ b/ElectronNET.Host/api/browserWindows.js @@ -190,7 +190,7 @@ module.exports = (socket, app) => { if (window) { window.reload(); windows.push(window); - socket.invoke('SendClientResponseString', guid, window.id); + socket.invoke('SendClientResponseInt', guid, window.id); return; } } @@ -225,7 +225,7 @@ module.exports = (socket, app) => { windows.forEach(x => ids.push(x.id)); console.log("------------------------------------"); console.log(ids); - socket.invoke('BrowserWindowsClosed', ids); + socket.invoke('SendClientResponseInt', ids); } } } @@ -251,7 +251,7 @@ module.exports = (socket, app) => { app['mainWindow'] = window; } windows.push(window); - socket.invoke('SendClientResponseString', guid, window.id); + socket.invoke('SendClientResponseInt', guid, window.id); }); socket.on('browserWindowDestroy', (id) => { getWindowById(id).destroy(); @@ -489,8 +489,8 @@ module.exports = (socket, app) => { let menu = null; if (menuItems) { menu = electron_1.Menu.buildFromTemplate(menuItems); - addMenuItemClickConnector(menu.items, (id) => { - socket.invoke('BrowserWindowMenuItemClicked', id); + addMenuItemClickConnector(menu.items, (menuid) => { + socket.invoke('BrowserWindowMenuItemClicked', id, menuid); }); } getWindowById(id).setMenu(menu); @@ -526,7 +526,7 @@ module.exports = (socket, app) => { const imagePath = path.join(__dirname.replace('api', ''), 'bin', thumbarButton.icon.toString()); thumbarButton.icon = electron_1.nativeImage.createFromPath(imagePath); thumbarButton.click = () => { - socket.invoke('BrowserWindowThumbbarButtonClicked', thumbarButton['id']); + socket.invoke('BrowserWindowThumbbarButtonClicked', id, thumbarButton['id']); }; }); const success = getWindowById(id).setThumbarButtons(thumbarButtons); @@ -580,7 +580,7 @@ module.exports = (socket, app) => { }); socket.on('browserWindowGetParentWindow', (guid, id) => { const browserWindow = getWindowById(id).getParentWindow(); - socket.invoke('SendClientResponseString', guid, browserWindow.id); + socket.invoke('SendClientResponseInt', guid, browserWindow.id); }); socket.on('browserWindowGetChildWindows', (guid, id) => { const browserWindows = getWindowById(id).getChildWindows(); diff --git a/ElectronNET.Host/api/browserWindows.js.map b/ElectronNET.Host/api/browserWindows.js.map index 7aa3769e..d01d5a51 100644 --- a/ElectronNET.Host/api/browserWindows.js.map +++ b/ElectronNET.Host/api/browserWindows.js.map @@ -1 +1 @@ -{"version":3,"file":"browserWindows.js","sourceRoot":"","sources":["browserWindows.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browserWindows.js","sourceRoot":"","sources":["browserWindows.ts"],"names":[],"mappings":";AAAA,uCAA4D;AAC5D,+CAA0D;AAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,OAAO,GAA6B,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAA6B,CAAC;AAClI,IAAI,qBAAqB,GAAa,EAAE,CAAC;AACzC,IAAI,MAAM,EAAE,WAAW,CAAC;AACxB,IAAI,aAAa,CAAC;AAClB,MAAM,qBAAqB,GAAgC,CAAC,MAAM,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAgC,CAAC;AAEpK,iBAAS,CAAC,MAAyB,EAAE,GAAiB,EAAE,EAAE;IAEtD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAChE,IAAI,QAAQ,CAAC,OAAO,EAAE;YAClB,IAAI,KAAK,GAAG,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAA;YAC/C,IAAI,KAAK,IAAI,qBAAqB,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxF,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,IAAI,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBACrD,IAAI,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBACrD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;aACvB;SACJ;IACL,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,EAAE,CAAC,sCAAsC,EAAE,CAAC,EAAE,EAAE,EAAE;QACrD,IAAI,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACpC,qBAAqB,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;YAC5E,MAAM,CAAC,MAAM,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;SACrD;QAED,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2CAA2C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxD,MAAM,CAAC,MAAM,CAAC,+BAA+B,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrC,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,CAAC,EAAE,EAAE,EAAE;QACpD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,EAAE;QAClD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,SAAS;IACT,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,EAAE;QAClD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,EAAE;QAC/C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,CAAC,EAAE,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3C,MAAM,CAAC,MAAM,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,CAAC,EAAE,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3C,MAAM,CAAC,MAAM,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+CAA+C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,MAAM,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+CAA+C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,MAAM,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACnD,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2CAA2C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,MAAM,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,EAAE,EAAE;QACxD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,MAAM,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,CAAC,EAAE,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3C,MAAM,CAAC,MAAM,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC/C,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrC,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,EAAE,EAAE,EAAE;QACjD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2CAA2C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,MAAM,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QACxD,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;YAC1E,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,CAAC;SAC3H;aAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;YAChC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,CAAC;SAChG;QAED,2DAA2D;QAC3D,IAAI,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,KAAK,OAAO,EAAE;YACxE,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;YAC3B,IAAI,MAAM,EAAE;gBACR,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxD,OAAO;aACV;SACJ;aAAM;YACH,MAAM,GAAG,IAAI,wBAAa,CAAC,OAAO,CAAC,CAAC;SACvC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE;YACf,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAC,UAAU,EAAE,OAAO,CAAC,KAAK,EAAC,CAAC,CAAC;SACpE;QAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,gBAAgB,EAAE;YAC3C,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;SACnE;QAED,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAC5B,IAAI,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;gBAC3C,qBAAqB,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;aACtF;iBAAM;gBACH,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aACzC;QACL,CAAC,CAAC,CAAC;QAEH,WAAW,GAAG,OAAO,CAAC;QAEtB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI;oBACA,UAAU,CAAC,EAAE,CAAC;iBACjB;gBAAC,OAAO,KAAK,EAAE;oBACZ,IAAI,KAAK,CAAC,OAAO,KAAK,2BAA2B,EAAE;wBAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBAEzB,MAAM,GAAG,GAAG,EAAE,CAAC;wBACf,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACrC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;wBACpD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBACjB,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;qBAC/C;iBACJ;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YACpB,iEAAiE;YACjE,4DAA4D;YAC5D,IAAI,MAAM,KAAK,IAAI,IAAI,WAAW,EAAE;gBAChC,MAAM,GAAG,IAAI,wBAAa,CAAC,WAAW,CAAC,CAAC;aAC3C;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE;YACT,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SAC3B;QAED,IAAI,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC;YACxC,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE;YAC/C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;SAC1D;QAED,sBAAsB;QACtB,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,SAAS,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE;YACjE,GAAG,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC;YAC/B,GAAG,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;SAC9B;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE;QACrC,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,EAAE;QACnC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,EAAE;QACnC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;QAClC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC/C,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;QAClC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1C,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;QAClC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,EAAE;QACtC,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,EAAE;QACxC,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC/C,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,EAAE;QACtC,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE;QACrC,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC/C,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE;QACvD,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAChD,MAAM,YAAY,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC;QAEtD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;QACpE,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE;QAC5D,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QACxD,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC/D,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QACpD,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAEvD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC7D,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QACpE,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAClD,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC3D,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAClD,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC3D,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAClD,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QACrD,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC/C,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAElD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QACjD,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAE9C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QACjD,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAEtD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QACjD,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAEtD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE;QAC/D,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QACpD,MAAM,cAAc,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAE5D,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC9C,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;QACxE,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QACjD,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAExD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE;QACpC,aAAa,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE;QACxD,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEjD,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC5C,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE3C,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAC9D,IAAI,OAAO,EAAE;YACT,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACtD;aAAM;YACH,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAC9C,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAClD,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,MAAM,kBAAkB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,qBAAqB,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjG,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,kBAAkB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;QAC9D,aAAa,CAAC,EAAE,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC1D,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,sBAAsB,EAAE,CAAC;QAE5D,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;QACvD,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAEpD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,EAAE;QACzC,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE;QACpC,aAAa,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QAChD,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,IAAI,SAAS,EAAE;YACX,IAAI,GAAG,eAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAEzC,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC7C,MAAM,CAAC,MAAM,CAAC,8BAA8B,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;SACN;QAED,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,EAAE;QACxC,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,SAAS,yBAAyB,CAAC,SAAS,EAAE,QAAQ;QAClD,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aAC3D;YAED,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE;gBACzB,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7C;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;QACtD,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC/D,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QACrD,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,cAAwC,EAAE,EAAE;QACzF,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChG,aAAa,CAAC,IAAI,GAAG,sBAAW,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAC3D,aAAa,CAAC,KAAK,GAAG,GAAG,EAAE;gBACvB,MAAM,CAAC,MAAM,CAAC,oCAAoC,EAAE,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACjF,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QACpD,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,EAAE,EAAE;QACxD,aAAa,CAAC,EAAE,CAAC,CAAC,0BAA0B,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QACtD,aAAa,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QACrD,MAAM,iBAAiB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC;QAEhE,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QAC3D,aAAa,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QACpD,MAAM,gBAAgB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAE9D,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wCAAwC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QAChE,aAAa,CAAC,EAAE,CAAC,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uCAAuC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC5D,MAAM,wBAAwB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,wBAAwB,EAAE,CAAC;QAE9E,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,wBAAwB,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QACrD,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;QACrD,MAAM,aAAa,GAAG,wBAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEtD,aAAa,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QACnD,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QAE1D,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QACnD,MAAM,cAAc,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QAE3D,MAAM,GAAG,GAAG,EAAE,CAAC;QAEf,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACvB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAC/C,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE;QAC5D,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,IAAA,uCAAyB,EAAC,aAAa,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,SAAS,aAAa,CAAC,EAAU;QAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;gBACnB,OAAO,OAAO,CAAC;aAClB;SACJ;IACL,CAAC;AACL,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/browserWindows.ts b/ElectronNET.Host/api/browserWindows.ts index 8ba0da7e..0907fe7c 100644 --- a/ElectronNET.Host/api/browserWindows.ts +++ b/ElectronNET.Host/api/browserWindows.ts @@ -223,7 +223,7 @@ export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { if (window) { window.reload(); windows.push(window); - socket.invoke('SendClientResponseString', guid, window.id); + socket.invoke('SendClientResponseInt', guid, window.id); return; } } else { @@ -261,7 +261,7 @@ export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { windows.forEach(x => ids.push(x.id)); console.log("------------------------------------"); console.log(ids); - socket.invoke('BrowserWindowsClosed', ids); + socket.invoke('SendClientResponseInt', ids); } } } @@ -292,7 +292,7 @@ export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { } windows.push(window); - socket.invoke('SendClientResponseString', guid, window.id); + socket.invoke('SendClientResponseInt', guid, window.id); }); socket.on('browserWindowDestroy', (id) => { @@ -624,8 +624,8 @@ export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { if (menuItems) { menu = Menu.buildFromTemplate(menuItems); - addMenuItemClickConnector(menu.items, (id) => { - socket.invoke('BrowserWindowMenuItemClicked', id); + addMenuItemClickConnector(menu.items, (menuid) => { + socket.invoke('BrowserWindowMenuItemClicked', id, menuid); }); } @@ -671,7 +671,7 @@ export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { const imagePath = path.join(__dirname.replace('api', ''), 'bin', thumbarButton.icon.toString()); thumbarButton.icon = nativeImage.createFromPath(imagePath); thumbarButton.click = () => { - socket.invoke('BrowserWindowThumbbarButtonClicked', thumbarButton['id']); + socket.invoke('BrowserWindowThumbbarButtonClicked', id, thumbarButton['id']); }; }); @@ -746,7 +746,7 @@ export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { socket.on('browserWindowGetParentWindow', (guid, id) => { const browserWindow = getWindowById(id).getParentWindow(); - socket.invoke('SendClientResponseString', guid, browserWindow.id); + socket.invoke('SendClientResponseInt', guid, browserWindow.id); }); socket.on('browserWindowGetChildWindows', (guid, id) => { diff --git a/ElectronNET.Host/api/dock.js b/ElectronNET.Host/api/dock.js index 899fb43d..00f664a6 100644 --- a/ElectronNET.Host/api/dock.js +++ b/ElectronNET.Host/api/dock.js @@ -3,7 +3,7 @@ const electron_1 = require("electron"); module.exports = (socket) => { socket.on('dock-bounce', (guid, type) => { const id = electron_1.app.dock.bounce(type); - socket.invoke('SendClientResponseString', guid, id); + socket.invoke('SendClientResponseInt', guid, id); }); socket.on('dock-cancelBounce', (id) => { electron_1.app.dock.cancelBounce(id); diff --git a/ElectronNET.Host/api/dock.js.map b/ElectronNET.Host/api/dock.js.map index 4f8566da..6504e9c3 100644 --- a/ElectronNET.Host/api/dock.js.map +++ b/ElectronNET.Host/api/dock.js.map @@ -1 +1 @@ -{"version":3,"file":"dock.js","sourceRoot":"","sources":["dock.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"dock.js","sourceRoot":"","sources":["dock.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/dock.ts b/ElectronNET.Host/api/dock.ts index ee290267..839dd6bb 100644 --- a/ElectronNET.Host/api/dock.ts +++ b/ElectronNET.Host/api/dock.ts @@ -4,7 +4,7 @@ export = (socket: SignalR.Hub.Proxy) => { socket.on('dock-bounce', (guid, type) => { const id = app.dock.bounce(type); - socket.invoke('SendClientResponseString', guid, id); + socket.invoke('SendClientResponseInt', guid, id); }); socket.on('dock-cancelBounce', (id) => { diff --git a/ElectronNET.Host/api/screen.js b/ElectronNET.Host/api/screen.js index e49d25c4..17e1add6 100644 --- a/ElectronNET.Host/api/screen.js +++ b/ElectronNET.Host/api/screen.js @@ -22,7 +22,7 @@ module.exports = (socket) => { }); socket.on('screen-getMenuBarHeight', (guid) => { const height = electron_1.screen.getPrimaryDisplay().workArea; - socket.invoke('SendClientResponseString', guid, height); + socket.invoke('SendClientResponseInt', guid, height); }); socket.on('screen-getPrimaryDisplay', (guid) => { const display = electron_1.screen.getPrimaryDisplay(); diff --git a/ElectronNET.Host/api/screen.js.map b/ElectronNET.Host/api/screen.js.map index 915b04aa..06844005 100644 --- a/ElectronNET.Host/api/screen.js.map +++ b/ElectronNET.Host/api/screen.js.map @@ -1 +1 @@ -{"version":3,"file":"screen.js","sourceRoot":"","sources":["screen.ts"],"names":[],"mappings":";AAAA,uCAAkC;AAElC,iBAAS,CAAC,MAAyB,EAAE,EAAE;IAEnC,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,iBAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1C,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,iBAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,EAAE,EAAE;QACxD,iBAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;YACpE,MAAM,CAAC,MAAM,CAAC,+BAA+B,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,iBAAM,CAAC,oBAAoB,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,iBAAM,CAAC,cAAc,EAAE,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,iBAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,iBAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"screen.js","sourceRoot":"","sources":["screen.ts"],"names":[],"mappings":";AAAA,uCAAkC;AAElC,iBAAS,CAAC,MAAyB,EAAE,EAAE;IAEnC,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,iBAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1C,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,iBAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,EAAE,EAAE;QACxD,iBAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;YACpE,MAAM,CAAC,MAAM,CAAC,+BAA+B,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,iBAAM,CAAC,oBAAoB,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,iBAAM,CAAC,cAAc,EAAE,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,iBAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,iBAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/screen.ts b/ElectronNET.Host/api/screen.ts index 454c3d24..b4bb63f9 100644 --- a/ElectronNET.Host/api/screen.ts +++ b/ElectronNET.Host/api/screen.ts @@ -27,7 +27,7 @@ export = (socket: SignalR.Hub.Proxy) => { socket.on('screen-getMenuBarHeight', (guid) => { const height = screen.getPrimaryDisplay().workArea; - socket.invoke('SendClientResponseString', guid, height); + socket.invoke('SendClientResponseInt', guid, height); }); socket.on('screen-getPrimaryDisplay', (guid) => { diff --git a/ElectronNET.Host/api/webContents.js b/ElectronNET.Host/api/webContents.js index efcffc30..2858ce48 100644 --- a/ElectronNET.Host/api/webContents.js +++ b/ElectronNET.Host/api/webContents.js @@ -101,7 +101,7 @@ module.exports = (socket) => { socket.on('webContents-session-getCacheSize', async (guid, id) => { const browserWindow = getWindowById(id); const size = await browserWindow.webContents.session.getCacheSize(); - socket.invoke('SendClientResponseString', guid, size); + socket.invoke('SendClientResponseInt', guid, size); }); socket.on('webContents-session-getPreloads', (guid, id) => { const browserWindow = getWindowById(id); diff --git a/ElectronNET.Host/api/webContents.js.map b/ElectronNET.Host/api/webContents.js.map index 81cfb051..d2e4ccc5 100644 --- a/ElectronNET.Host/api/webContents.js.map +++ b/ElectronNET.Host/api/webContents.js.map @@ -1 +1 @@ -{"version":3,"file":"webContents.js","sourceRoot":"","sources":["webContents.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"webContents.js","sourceRoot":"","sources":["webContents.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/webContents.ts b/ElectronNET.Host/api/webContents.ts index b00929cb..72d27cbd 100644 --- a/ElectronNET.Host/api/webContents.ts +++ b/ElectronNET.Host/api/webContents.ts @@ -122,7 +122,7 @@ export = (socket: SignalR.Hub.Proxy) => { const browserWindow = getWindowById(id); const size = await browserWindow.webContents.session.getCacheSize(); - socket.invoke('SendClientResponseString', guid, size); + socket.invoke('SendClientResponseInt', guid, size); }); socket.on('webContents-session-getPreloads', (guid, id) => { From de1b5edaf9fd89a9c9008b0ebecf5c9aafc20531 Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Thu, 3 Mar 2022 08:39:50 +0100 Subject: [PATCH 08/15] Fix TS types --- .../ElectronHostHook/package.json | 1 - ElectronNET.Host/api/app.js.map | 2 +- ElectronNET.Host/api/app.ts | 3 +- ElectronNET.Host/api/autoUpdater.js.map | 2 +- ElectronNET.Host/api/autoUpdater.ts | 4 +- ElectronNET.Host/api/browserView.js.map | 2 +- ElectronNET.Host/api/browserView.ts | 3 +- ElectronNET.Host/api/browserWindows.js.map | 2 +- ElectronNET.Host/api/browserWindows.ts | 3 +- ElectronNET.Host/api/clipboard.js | 1 - ElectronNET.Host/api/clipboard.js.map | 2 +- ElectronNET.Host/api/clipboard.ts | 4 +- ElectronNET.Host/api/commandLine.js.map | 2 +- ElectronNET.Host/api/commandLine.ts | 4 +- ElectronNET.Host/api/dialog.js.map | 2 +- ElectronNET.Host/api/dialog.ts | 3 +- ElectronNET.Host/api/dock.js.map | 2 +- ElectronNET.Host/api/dock.ts | 3 +- ElectronNET.Host/api/globalShortcut.js.map | 2 +- ElectronNET.Host/api/globalShortcut.ts | 3 +- ElectronNET.Host/api/ipc.js.map | 2 +- ElectronNET.Host/api/ipc.ts | 3 +- ElectronNET.Host/api/menu.js.map | 2 +- ElectronNET.Host/api/menu.ts | 3 +- ElectronNET.Host/api/nativeTheme.js.map | 2 +- ElectronNET.Host/api/nativeTheme.ts | 3 +- ElectronNET.Host/api/notification.js.map | 2 +- ElectronNET.Host/api/notification.ts | 3 +- ElectronNET.Host/api/powerMonitor.js.map | 2 +- ElectronNET.Host/api/powerMonitor.ts | 3 +- ElectronNET.Host/api/screen.js.map | 2 +- ElectronNET.Host/api/screen.ts | 3 +- ElectronNET.Host/api/shell.js.map | 2 +- ElectronNET.Host/api/shell.ts | 3 +- ElectronNET.Host/api/tray.js | 1 - ElectronNET.Host/api/tray.js.map | 2 +- ElectronNET.Host/api/tray.ts | 4 +- ElectronNET.Host/api/webContents.js.map | 2 +- ElectronNET.Host/api/webContents.ts | 3 +- ElectronNET.Host/package-lock.json | 43 ---------------- ElectronNET.Host/package.json | 1 - .../ElectronHostHook/package-lock.json | 49 ------------------- .../ElectronHostHook/package.json | 1 - 43 files changed, 55 insertions(+), 136 deletions(-) diff --git a/ElectronNET.Host/ElectronHostHook/package.json b/ElectronNET.Host/ElectronHostHook/package.json index 41ff43d2..c64c09e0 100644 --- a/ElectronNET.Host/ElectronHostHook/package.json +++ b/ElectronNET.Host/ElectronHostHook/package.json @@ -15,7 +15,6 @@ "license": "MIT", "devDependencies": { "@microsoft/signalr": "^6.0.2", - "@types/signalr": "^2.2.37", "@types/socket.io": "^2.1.12", "typescript": "^4.3.5" } diff --git a/ElectronNET.Host/api/app.js.map b/ElectronNET.Host/api/app.js.map index 0d6a3814..2a5ec6fb 100644 --- a/ElectronNET.Host/api/app.js.map +++ b/ElectronNET.Host/api/app.js.map @@ -1 +1 @@ -{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/app.ts b/ElectronNET.Host/api/app.ts index 52176da1..9ddf64c4 100644 --- a/ElectronNET.Host/api/app.ts +++ b/ElectronNET.Host/api/app.ts @@ -1,7 +1,8 @@ +import { HubConnection } from "@microsoft/signalr"; let isQuitWindowAllClosed = true; let appWindowAllClosedEventId; -export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { +export = (socket: HubConnection, app: Electron.App) => { // By default, quit when all windows are closed app.on('window-all-closed', () => { diff --git a/ElectronNET.Host/api/autoUpdater.js.map b/ElectronNET.Host/api/autoUpdater.js.map index d1228984..bcd64346 100644 --- a/ElectronNET.Host/api/autoUpdater.js.map +++ b/ElectronNET.Host/api/autoUpdater.js.map @@ -1 +1 @@ -{"version":3,"file":"autoUpdater.js","sourceRoot":"","sources":["autoUpdater.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"autoUpdater.js","sourceRoot":"","sources":["autoUpdater.ts"],"names":[],"mappings":";AACA,uDAA+C;AAE/C,iBAAS,CAAC,MAAqB,EAAE,GAAiB,EAAE,EAAE;IAElD,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,EAAE,EAAE,EAAE;QACjD,8BAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gDAAgD,EAAE,CAAC,EAAE,EAAE,EAAE;QAC/D,8BAAW,CAAC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACvC,MAAM,CAAC,MAAM,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6CAA6C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5D,8BAAW,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,UAAU,EAAE,EAAE;YAC9C,MAAM,CAAC,MAAM,CAAC,8BAA8B,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iDAAiD,EAAE,CAAC,EAAE,EAAE,EAAE;QAChE,8BAAW,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,UAAU,EAAE,EAAE;YAClD,MAAM,CAAC,MAAM,CAAC,iCAAiC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8CAA8C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7D,8BAAW,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,YAAY,EAAE,EAAE;YACjD,MAAM,CAAC,MAAM,CAAC,+BAA+B,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8CAA8C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7D,8BAAW,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,UAAU,EAAE,EAAE;YAC/C,MAAM,CAAC,MAAM,CAAC,+BAA+B,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,mBAAmB;IAEnB,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC/C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,8BAAW,CAAC,YAAY,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,KAAK,EAAE,EAAE;QAChD,8BAAW,CAAC,YAAY,GAAG,KAAK,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sCAAsC,EAAE,CAAC,IAAI,EAAE,EAAE;QACvD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,8BAAW,CAAC,oBAAoB,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sCAAsC,EAAE,CAAC,KAAK,EAAE,EAAE;QACxD,8BAAW,CAAC,oBAAoB,GAAG,KAAK,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,IAAI,EAAE,EAAE;QAClD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,8BAAW,CAAC,eAAe,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,KAAK,EAAE,EAAE;QACnD,8BAAW,CAAC,eAAe,GAAG,KAAK,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,IAAI,EAAE,EAAE;QAChD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,8BAAW,CAAC,aAAa,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,8BAAW,CAAC,aAAa,GAAG,KAAK,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,IAAI,EAAE,EAAE;QACjD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,8BAAW,CAAC,cAAc,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,8BAAW,CAAC,cAAc,GAAG,KAAK,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,IAAI,EAAE,EAAE;QACnD,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,8BAAW,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,KAAK,EAAE,EAAE;QACpD,8BAAW,CAAC,gBAAgB,GAAG,KAAK,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,IAAI,EAAE,EAAE;QACjD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,8BAAW,CAAC,cAAc,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,8BAAW,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3C,8BAAW,CAAC,OAAO,GAAG,KAAK,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,8BAAW,CAAC,cAAc,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,8BAAW,CAAC,cAAc,GAAG,KAAK,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC5D,8BAAW,CAAC,wBAAwB,EAAE,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,EAAE;YAC9D,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACnD,8BAAW,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,EAAE;YACrD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE;QACvE,8BAAW,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClD,MAAM,cAAc,GAAG,MAAM,8BAAW,CAAC,cAAc,EAAE,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC9C,MAAM,OAAO,GAAG,MAAM,8BAAW,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/autoUpdater.ts b/ElectronNET.Host/api/autoUpdater.ts index bfbb43b0..89cfe068 100644 --- a/ElectronNET.Host/api/autoUpdater.ts +++ b/ElectronNET.Host/api/autoUpdater.ts @@ -1,7 +1,7 @@ -import { Socket } from 'net'; +import { HubConnection } from "@microsoft/signalr"; import { autoUpdater } from 'electron-updater'; -export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { +export = (socket: HubConnection, app: Electron.App) => { socket.on('register-autoUpdater-error-event', (id) => { autoUpdater.on('error', (error) => { diff --git a/ElectronNET.Host/api/browserView.js.map b/ElectronNET.Host/api/browserView.js.map index 69c4d41d..a84bf02e 100644 --- a/ElectronNET.Host/api/browserView.js.map +++ b/ElectronNET.Host/api/browserView.js.map @@ -1 +1 @@ -{"version":3,"file":"browserView.js","sourceRoot":"","sources":["browserView.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browserView.js","sourceRoot":"","sources":["browserView.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/browserView.ts b/ElectronNET.Host/api/browserView.ts index 3c0f6459..90bbee3d 100644 --- a/ElectronNET.Host/api/browserView.ts +++ b/ElectronNET.Host/api/browserView.ts @@ -1,9 +1,10 @@ +import { HubConnection } from "@microsoft/signalr"; import { BrowserView } from 'electron'; const browserViews: BrowserView[] = (global['browserViews'] = global['browserViews'] || []) as BrowserView[]; let browserView: BrowserView; const proxyToCredentialsMap: { [proxy: string]: string } = (global['proxyToCredentialsMap'] = global['proxyToCredentialsMap'] || []) as { [proxy: string]: string }; -const browserViewApi = (socket: SignalR.Hub.Proxy) => { +const browserViewApi = (socket: HubConnection) => { socket.on('createBrowserView', (guid, options) => { if (!hasOwnChildreen(options, 'webPreferences', 'nodeIntegration')) { diff --git a/ElectronNET.Host/api/browserWindows.js.map b/ElectronNET.Host/api/browserWindows.js.map index d01d5a51..1ff3d21d 100644 --- a/ElectronNET.Host/api/browserWindows.js.map +++ b/ElectronNET.Host/api/browserWindows.js.map @@ -1 +1 @@ -{"version":3,"file":"browserWindows.js","sourceRoot":"","sources":["browserWindows.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browserWindows.js","sourceRoot":"","sources":["browserWindows.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/browserWindows.ts b/ElectronNET.Host/api/browserWindows.ts index 0907fe7c..d0b1f7a2 100644 --- a/ElectronNET.Host/api/browserWindows.ts +++ b/ElectronNET.Host/api/browserWindows.ts @@ -1,3 +1,4 @@ +import { HubConnection } from "@microsoft/signalr"; import { BrowserWindow, Menu, nativeImage } from 'electron'; import { browserViewMediateService } from './browserView'; const path = require('path'); @@ -7,7 +8,7 @@ let window, lastOptions; let mainWindowURL; const proxyToCredentialsMap: { [proxy: string]: string } = (global['proxyToCredentialsMap'] = global['proxyToCredentialsMap'] || []) as { [proxy: string]: string }; -export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { +export = (socket: HubConnection, app: Electron.App) => { app.on('login', (event, webContents, request, authInfo, callback) => { if (authInfo.isProxy) { diff --git a/ElectronNET.Host/api/clipboard.js b/ElectronNET.Host/api/clipboard.js index edfe1169..1bec9b26 100644 --- a/ElectronNET.Host/api/clipboard.js +++ b/ElectronNET.Host/api/clipboard.js @@ -1,6 +1,5 @@ "use strict"; const electron_1 = require("electron"); -let electronSocket; module.exports = (socket) => { socket.on('clipboard-readText', (guid, type) => { const text = electron_1.clipboard.readText(type); diff --git a/ElectronNET.Host/api/clipboard.js.map b/ElectronNET.Host/api/clipboard.js.map index 840e6e7b..b00cf92e 100644 --- a/ElectronNET.Host/api/clipboard.js.map +++ b/ElectronNET.Host/api/clipboard.js.map @@ -1 +1 @@ -{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["clipboard.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["clipboard.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/clipboard.ts b/ElectronNET.Host/api/clipboard.ts index bfea0ca0..74f539e0 100644 --- a/ElectronNET.Host/api/clipboard.ts +++ b/ElectronNET.Host/api/clipboard.ts @@ -1,7 +1,7 @@ +import { HubConnection } from "@microsoft/signalr"; import { clipboard, nativeImage } from 'electron'; -let electronSocket; -export = (socket: SignalR.Hub.Proxy) => { +export = (socket: HubConnection) => { socket.on('clipboard-readText', (guid, type) => { const text = clipboard.readText(type); diff --git a/ElectronNET.Host/api/commandLine.js.map b/ElectronNET.Host/api/commandLine.js.map index b4bfb2c0..e50ce1e5 100644 --- a/ElectronNET.Host/api/commandLine.js.map +++ b/ElectronNET.Host/api/commandLine.js.map @@ -1 +1 @@ -{"version":3,"file":"commandLine.js","sourceRoot":"","sources":["commandLine.ts"],"names":[],"mappings":";AAAA,iBAAS,CAAC,MAAyB,EAAE,GAAiB,EAAE,EAAE;IAEtD,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,UAAkB,EAAE,KAAa,EAAE,EAAE;QAC1E,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,KAAa,EAAE,EAAE;QACxD,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,KAAa,EAAE,EAAE;QACzD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,IAAI,EAAE,UAAkB,EAAE,EAAE;QACnE,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"commandLine.js","sourceRoot":"","sources":["commandLine.ts"],"names":[],"mappings":";AAEA,iBAAS,CAAC,MAAqB,EAAE,GAAiB,EAAE,EAAE;IAElD,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,UAAkB,EAAE,KAAa,EAAE,EAAE;QAC1E,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,KAAa,EAAE,EAAE;QACxD,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,KAAa,EAAE,EAAE;QACzD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,IAAI,EAAE,UAAkB,EAAE,EAAE;QACnE,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/commandLine.ts b/ElectronNET.Host/api/commandLine.ts index 6fecbe42..7b51d6bc 100644 --- a/ElectronNET.Host/api/commandLine.ts +++ b/ElectronNET.Host/api/commandLine.ts @@ -1,4 +1,6 @@ -export = (socket: SignalR.Hub.Proxy, app: Electron.App) => { +import { HubConnection } from "@microsoft/signalr"; + +export = (socket: HubConnection, app: Electron.App) => { socket.on('appCommandLineAppendSwitch', (the_switch: string, value: string) => { app.commandLine.appendSwitch(the_switch, value); diff --git a/ElectronNET.Host/api/dialog.js.map b/ElectronNET.Host/api/dialog.js.map index 4f42e872..d1c331d8 100644 --- a/ElectronNET.Host/api/dialog.js.map +++ b/ElectronNET.Host/api/dialog.js.map @@ -1 +1 @@ -{"version":3,"file":"dialog.js","sourceRoot":"","sources":["dialog.ts"],"names":[],"mappings":";AAAA,uCAAiD;AAEjD,iBAAS,CAAC,MAAyB,EAAE,EAAE;IACnC,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,IAAI,IAAI,IAAI,aAAa,EAAE;YACvB,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAEtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SAChI;aAAM;YACH,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAErE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SAChI;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,qBAAqB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,qBAAqB,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACzC,iBAAM,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,iBAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrD,WAAW;QACX,4DAA4D;IACpE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"dialog.js","sourceRoot":"","sources":["dialog.ts"],"names":[],"mappings":";AACA,uCAAiD;AAEjD,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAC/B,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,IAAI,IAAI,IAAI,aAAa,EAAE;YACvB,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAEtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SAChI;aAAM;YACH,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAErE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SAChI;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,qBAAqB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,qBAAqB,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACzC,iBAAM,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,iBAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrD,WAAW;QACX,4DAA4D;IACpE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/dialog.ts b/ElectronNET.Host/api/dialog.ts index a6d5ce94..68099b6d 100644 --- a/ElectronNET.Host/api/dialog.ts +++ b/ElectronNET.Host/api/dialog.ts @@ -1,6 +1,7 @@ +import { HubConnection } from "@microsoft/signalr"; import { BrowserWindow, dialog } from 'electron'; -export = (socket: SignalR.Hub.Proxy) => { +export = (socket: HubConnection) => { socket.on('showMessageBox', async (guid, browserWindow, options) => { if ('id' in browserWindow) { const window = BrowserWindow.fromId(browserWindow.id); diff --git a/ElectronNET.Host/api/dock.js.map b/ElectronNET.Host/api/dock.js.map index 6504e9c3..9b1c1a18 100644 --- a/ElectronNET.Host/api/dock.js.map +++ b/ElectronNET.Host/api/dock.js.map @@ -1 +1 @@ -{"version":3,"file":"dock.js","sourceRoot":"","sources":["dock.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"dock.js","sourceRoot":"","sources":["dock.ts"],"names":[],"mappings":";AACA,uCAAqC;AAErC,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAE/B,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QACpC,MAAM,EAAE,GAAG,cAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;QAClC,cAAG,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,QAAQ,EAAE,EAAE;QAC5C,cAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;QAChC,cAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,cAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;QACxB,cAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;QACxB,cAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE;QACjC,MAAM,SAAS,GAAG,cAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,EAAE;QACpC,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,IAAI,SAAS,EAAE;YACX,IAAI,GAAG,eAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YACzC,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE;gBACzC,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;SACN;QAED,cAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,6CAA6C;IAC7C,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,cAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;QAChC,cAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,SAAS,yBAAyB,CAAC,SAAS,EAAE,QAAQ;QAClD,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aAC3D;YAED,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE;gBACzB,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7C;QACL,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/dock.ts b/ElectronNET.Host/api/dock.ts index 839dd6bb..c4f1f271 100644 --- a/ElectronNET.Host/api/dock.ts +++ b/ElectronNET.Host/api/dock.ts @@ -1,6 +1,7 @@ +import { HubConnection } from "@microsoft/signalr"; import { app, Menu } from 'electron'; -export = (socket: SignalR.Hub.Proxy) => { +export = (socket: HubConnection) => { socket.on('dock-bounce', (guid, type) => { const id = app.dock.bounce(type); diff --git a/ElectronNET.Host/api/globalShortcut.js.map b/ElectronNET.Host/api/globalShortcut.js.map index 4cbab9af..153b1518 100644 --- a/ElectronNET.Host/api/globalShortcut.js.map +++ b/ElectronNET.Host/api/globalShortcut.js.map @@ -1 +1 @@ -{"version":3,"file":"globalShortcut.js","sourceRoot":"","sources":["globalShortcut.ts"],"names":[],"mappings":";AAAA,uCAA0C;AAE1C,iBAAS,CAAC,MAAyB,EAAE,EAAE;IACnC,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,yBAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE;QAC3D,MAAM,YAAY,GAAG,yBAAc,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE9D,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,WAAW,EAAE,EAAE;QACnD,yBAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC3C,IAAI;YACA,yBAAc,CAAC,aAAa,EAAE,CAAC;SAClC;QAAC,OAAO,KAAK,EAAE,GAAG;IACvB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"globalShortcut.js","sourceRoot":"","sources":["globalShortcut.ts"],"names":[],"mappings":";AACA,uCAA0C;AAE1C,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAC/B,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,yBAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE;QAC3D,MAAM,YAAY,GAAG,yBAAc,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE9D,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,WAAW,EAAE,EAAE;QACnD,yBAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC3C,IAAI;YACA,yBAAc,CAAC,aAAa,EAAE,CAAC;SAClC;QAAC,OAAO,KAAK,EAAE,GAAG;IACvB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/globalShortcut.ts b/ElectronNET.Host/api/globalShortcut.ts index 3e8c7e59..0febc56a 100644 --- a/ElectronNET.Host/api/globalShortcut.ts +++ b/ElectronNET.Host/api/globalShortcut.ts @@ -1,6 +1,7 @@ +import { HubConnection } from "@microsoft/signalr"; import { globalShortcut } from 'electron'; -export = (socket: SignalR.Hub.Proxy) => { +export = (socket: HubConnection) => { socket.on('globalShortcut-register', (accelerator) => { globalShortcut.register(accelerator, () => { socket.invoke('GlobalShortcutPressed', accelerator); diff --git a/ElectronNET.Host/api/ipc.js.map b/ElectronNET.Host/api/ipc.js.map index 5803cf5d..f5a6f4e3 100644 --- a/ElectronNET.Host/api/ipc.js.map +++ b/ElectronNET.Host/api/ipc.js.map @@ -1 +1 @@ -{"version":3,"file":"ipc.js","sourceRoot":"","sources":["ipc.ts"],"names":[],"mappings":";AAAA,uCAA+D;AAE/D,iBAAS,CAAC,MAAyB,EAAE,EAAE;IAEnC,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE;QAC5C,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QAChD,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,wBAAwB;YACxB,yCAAyC;YACzC,MAAM,CAAC,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACnC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAC,IAAI,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,YAAY,GAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAkB,CAAC;QAC7G,IAAI,IAAI,GAAgB,IAAI,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC9B,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM;aACT;SACJ;QAED,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC3C;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"ipc.js","sourceRoot":"","sources":["ipc.ts"],"names":[],"mappings":";AACA,uCAA+D;AAE/D,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAE/B,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE;QAC5C,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QAChD,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,wBAAwB;YACxB,yCAAyC;YACzC,MAAM,CAAC,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACnC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAC,IAAI,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,YAAY,GAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAkB,CAAC;QAC7G,IAAI,IAAI,GAAgB,IAAI,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC9B,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM;aACT;SACJ;QAED,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC3C;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/ipc.ts b/ElectronNET.Host/api/ipc.ts index 8f3c3663..2a522014 100644 --- a/ElectronNET.Host/api/ipc.ts +++ b/ElectronNET.Host/api/ipc.ts @@ -1,6 +1,7 @@ +import { HubConnection } from "@microsoft/signalr"; import { ipcMain, BrowserWindow, BrowserView } from 'electron'; -export = (socket: SignalR.Hub.Proxy) => { +export = (socket: HubConnection) => { socket.on('registerIpcMainChannel', (channel) => { ipcMain.on(channel, (event, args) => { diff --git a/ElectronNET.Host/api/menu.js.map b/ElectronNET.Host/api/menu.js.map index 302296f5..f6130afb 100644 --- a/ElectronNET.Host/api/menu.js.map +++ b/ElectronNET.Host/api/menu.js.map @@ -1 +1 @@ -{"version":3,"file":"menu.js","sourceRoot":"","sources":["menu.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"menu.js","sourceRoot":"","sources":["menu.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/menu.ts b/ElectronNET.Host/api/menu.ts index 475f35a8..21b39520 100644 --- a/ElectronNET.Host/api/menu.ts +++ b/ElectronNET.Host/api/menu.ts @@ -1,7 +1,8 @@ +import { HubConnection } from "@microsoft/signalr"; import { Menu, BrowserWindow } from 'electron'; const contextMenuItems = (global['contextMenuItems'] = global['contextMenuItems'] || []); -export = (socket: SignalR.Hub.Proxy) => { +export = (socket: HubConnection) => { socket.on('menu-setContextMenu', (browserWindowId, menuItems) => { const menu = Menu.buildFromTemplate(menuItems); diff --git a/ElectronNET.Host/api/nativeTheme.js.map b/ElectronNET.Host/api/nativeTheme.js.map index c0c609f4..9984ea3f 100644 --- a/ElectronNET.Host/api/nativeTheme.js.map +++ b/ElectronNET.Host/api/nativeTheme.js.map @@ -1 +1 @@ -{"version":3,"file":"nativeTheme.js","sourceRoot":"","sources":["nativeTheme.ts"],"names":[],"mappings":";AAAA,uCAAuC;AAEvC,iBAAS,CAAC,MAAyB,EAAE,EAAE;IAEnC,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,IAAI,EAAE,EAAE;QAClD,MAAM,mBAAmB,GAAG,sBAAW,CAAC,mBAAmB,CAAC;QAE5D,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1D,MAAM,2BAA2B,GAAG,sBAAW,CAAC,2BAA2B,CAAC;QAE5E,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,2BAA2B,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3D,MAAM,4BAA4B,GAAG,sBAAW,CAAC,4BAA4B,CAAC;QAE9E,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,4BAA4B,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC9C,MAAM,WAAW,GAAG,sBAAW,CAAC,WAAW,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,sBAAW,CAAC,WAAW,GAAG,WAAW,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,sBAAW,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC3B,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"nativeTheme.js","sourceRoot":"","sources":["nativeTheme.ts"],"names":[],"mappings":";AACA,uCAAuC;AAEvC,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAE/B,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,IAAI,EAAE,EAAE;QAClD,MAAM,mBAAmB,GAAG,sBAAW,CAAC,mBAAmB,CAAC;QAE5D,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1D,MAAM,2BAA2B,GAAG,sBAAW,CAAC,2BAA2B,CAAC;QAE5E,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,2BAA2B,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3D,MAAM,4BAA4B,GAAG,sBAAW,CAAC,4BAA4B,CAAC;QAE9E,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,4BAA4B,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC9C,MAAM,WAAW,GAAG,sBAAW,CAAC,WAAW,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,sBAAW,CAAC,WAAW,GAAG,WAAW,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,sBAAW,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC3B,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/nativeTheme.ts b/ElectronNET.Host/api/nativeTheme.ts index d5522d51..971c367e 100644 --- a/ElectronNET.Host/api/nativeTheme.ts +++ b/ElectronNET.Host/api/nativeTheme.ts @@ -1,6 +1,7 @@ +import { HubConnection } from "@microsoft/signalr"; import { nativeTheme } from 'electron'; -export = (socket: SignalR.Hub.Proxy) => { +export = (socket: HubConnection) => { socket.on('nativeTheme-shouldUseDarkColors', (guid) => { const shouldUseDarkColors = nativeTheme.shouldUseDarkColors; diff --git a/ElectronNET.Host/api/notification.js.map b/ElectronNET.Host/api/notification.js.map index 77b0841c..f0d127f3 100644 --- a/ElectronNET.Host/api/notification.js.map +++ b/ElectronNET.Host/api/notification.js.map @@ -1 +1 @@ -{"version":3,"file":"notification.js","sourceRoot":"","sources":["notification.ts"],"names":[],"mappings":";AAAA,uCAAwC;AACxC,MAAM,aAAa,GAA4B,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAA4B,CAAC;AAEpI,iBAAS,CAAC,MAAyB,EAAE,EAAE;IACnC,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG,IAAI,uBAAY,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,OAAO,CAAC,MAAM,EAAE;YAChB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACzB,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC1B,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC1B,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE;YAClB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACvC,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;SACN;QAED,IAAI,SAAS,EAAE;YACX,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACpC;QAED,YAAY,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,WAAW,GAAG,uBAAY,CAAC,WAAW,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"notification.js","sourceRoot":"","sources":["notification.ts"],"names":[],"mappings":";AACA,uCAAwC;AACxC,MAAM,aAAa,GAA4B,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAA4B,CAAC;AAEpI,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAC/B,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG,IAAI,uBAAY,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,OAAO,CAAC,MAAM,EAAE;YAChB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACzB,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC1B,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC1B,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE;YAClB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACvC,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;SACN;QAED,IAAI,SAAS,EAAE;YACX,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACpC;QAED,YAAY,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,WAAW,GAAG,uBAAY,CAAC,WAAW,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/notification.ts b/ElectronNET.Host/api/notification.ts index d1e9cdd5..4e57e2b0 100644 --- a/ElectronNET.Host/api/notification.ts +++ b/ElectronNET.Host/api/notification.ts @@ -1,7 +1,8 @@ +import { HubConnection } from "@microsoft/signalr"; import { Notification } from 'electron'; const notifications: Electron.Notification[] = (global['notifications'] = global['notifications'] || []) as Electron.Notification[]; -export = (socket: SignalR.Hub.Proxy) => { +export = (socket: HubConnection) => { socket.on('createNotification', (options) => { const notification = new Notification(options); let haveEvent = false; diff --git a/ElectronNET.Host/api/powerMonitor.js.map b/ElectronNET.Host/api/powerMonitor.js.map index c45f8ee3..ba9fc5b5 100644 --- a/ElectronNET.Host/api/powerMonitor.js.map +++ b/ElectronNET.Host/api/powerMonitor.js.map @@ -1 +1 @@ -{"version":3,"file":"powerMonitor.js","sourceRoot":"","sources":["powerMonitor.ts"],"names":[],"mappings":";AAAA,uCAAwC;AAExC,iBAAS,CAAC,MAAyB,EAAE,EAAE;IACnC,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACtC,uBAAY,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACxC,uBAAY,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAClC,uBAAY,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC5B,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QACjC,uBAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC3B,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAChC,uBAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACrC,uBAAY,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACnC,uBAAY,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAC7B,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"powerMonitor.js","sourceRoot":"","sources":["powerMonitor.ts"],"names":[],"mappings":";AACA,uCAAwC;AAExC,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAC/B,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACtC,uBAAY,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACxC,uBAAY,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAClC,uBAAY,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC5B,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QACjC,uBAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC3B,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAChC,uBAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACrC,uBAAY,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACnC,uBAAY,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAC7B,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/powerMonitor.ts b/ElectronNET.Host/api/powerMonitor.ts index 5d3b6631..39215c01 100644 --- a/ElectronNET.Host/api/powerMonitor.ts +++ b/ElectronNET.Host/api/powerMonitor.ts @@ -1,6 +1,7 @@ +import { HubConnection } from "@microsoft/signalr"; import { powerMonitor } from 'electron'; -export = (socket: SignalR.Hub.Proxy) => { +export = (socket: HubConnection) => { socket.on('register-pm-lock-screen', () => { powerMonitor.on('lock-screen', () => { socket.invoke('TriggerOnLockScreen'); diff --git a/ElectronNET.Host/api/screen.js.map b/ElectronNET.Host/api/screen.js.map index 06844005..cf6fee43 100644 --- a/ElectronNET.Host/api/screen.js.map +++ b/ElectronNET.Host/api/screen.js.map @@ -1 +1 @@ -{"version":3,"file":"screen.js","sourceRoot":"","sources":["screen.ts"],"names":[],"mappings":";AAAA,uCAAkC;AAElC,iBAAS,CAAC,MAAyB,EAAE,EAAE;IAEnC,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,iBAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1C,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,iBAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,EAAE,EAAE;QACxD,iBAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;YACpE,MAAM,CAAC,MAAM,CAAC,+BAA+B,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,iBAAM,CAAC,oBAAoB,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,iBAAM,CAAC,cAAc,EAAE,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,iBAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,iBAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"screen.js","sourceRoot":"","sources":["screen.ts"],"names":[],"mappings":";AACA,uCAAkC;AAElC,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAE/B,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,iBAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1C,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,iBAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,EAAE,EAAE;QACxD,iBAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;YACpE,MAAM,CAAC,MAAM,CAAC,+BAA+B,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,iBAAM,CAAC,oBAAoB,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,iBAAM,CAAC,cAAc,EAAE,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,iBAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,iBAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/screen.ts b/ElectronNET.Host/api/screen.ts index b4bb63f9..a6c21c54 100644 --- a/ElectronNET.Host/api/screen.ts +++ b/ElectronNET.Host/api/screen.ts @@ -1,6 +1,7 @@ +import { HubConnection } from "@microsoft/signalr"; import { screen } from 'electron'; -export = (socket: SignalR.Hub.Proxy) => { +export = (socket: HubConnection) => { socket.on('register-screen-display-added', (id) => { screen.on('display-added', (event, display) => { diff --git a/ElectronNET.Host/api/shell.js.map b/ElectronNET.Host/api/shell.js.map index 7a965b48..a4fc6c55 100644 --- a/ElectronNET.Host/api/shell.js.map +++ b/ElectronNET.Host/api/shell.js.map @@ -1 +1 @@ -{"version":3,"file":"shell.js","sourceRoot":"","sources":["shell.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"shell.js","sourceRoot":"","sources":["shell.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/shell.ts b/ElectronNET.Host/api/shell.ts index 8859f413..92c3cf7c 100644 --- a/ElectronNET.Host/api/shell.ts +++ b/ElectronNET.Host/api/shell.ts @@ -1,6 +1,7 @@ +import { HubConnection } from "@microsoft/signalr"; import { shell } from 'electron'; -export = (socket: SignalR.Hub.Proxy) => { +export = (socket: HubConnection) => { socket.on('shell-showItemInFolder', (guid, fullPath) => { shell.showItemInFolder(fullPath); diff --git a/ElectronNET.Host/api/tray.js b/ElectronNET.Host/api/tray.js index c783286f..ccc2e7fa 100644 --- a/ElectronNET.Host/api/tray.js +++ b/ElectronNET.Host/api/tray.js @@ -1,7 +1,6 @@ "use strict"; const electron_1 = require("electron"); let tray = (global['$tray'] = global['tray'] || { value: null }); -let electronSocket; module.exports = (socket) => { socket.on('register-tray-click', (id) => { if (tray.value) { diff --git a/ElectronNET.Host/api/tray.js.map b/ElectronNET.Host/api/tray.js.map index e9ced3c0..1ad47300 100644 --- a/ElectronNET.Host/api/tray.js.map +++ b/ElectronNET.Host/api/tray.js.map @@ -1 +1 @@ -{"version":3,"file":"tray.js","sourceRoot":"","sources":["tray.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tray.js","sourceRoot":"","sources":["tray.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/tray.ts b/ElectronNET.Host/api/tray.ts index d2bfa006..b3ce387b 100644 --- a/ElectronNET.Host/api/tray.ts +++ b/ElectronNET.Host/api/tray.ts @@ -1,8 +1,8 @@ +import { HubConnection } from "@microsoft/signalr"; import { Menu, Tray, nativeImage } from 'electron'; let tray: { value: Electron.Tray } = (global['$tray'] = global['tray'] || { value: null }); -let electronSocket; -export = (socket: SignalR.Hub.Proxy) => { +export = (socket: HubConnection) => { socket.on('register-tray-click', (id) => { if (tray.value) { tray.value.on('click', (event, bounds) => { diff --git a/ElectronNET.Host/api/webContents.js.map b/ElectronNET.Host/api/webContents.js.map index d2e4ccc5..a2912800 100644 --- a/ElectronNET.Host/api/webContents.js.map +++ b/ElectronNET.Host/api/webContents.js.map @@ -1 +1 @@ -{"version":3,"file":"webContents.js","sourceRoot":"","sources":["webContents.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"webContents.js","sourceRoot":"","sources":["webContents.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/webContents.ts b/ElectronNET.Host/api/webContents.ts index 72d27cbd..4c7b62da 100644 --- a/ElectronNET.Host/api/webContents.ts +++ b/ElectronNET.Host/api/webContents.ts @@ -1,8 +1,9 @@ +import { HubConnection } from "@microsoft/signalr"; import { BrowserWindow, BrowserView } from 'electron'; import { browserViewMediateService } from './browserView'; const fs = require('fs'); -export = (socket: SignalR.Hub.Proxy) => { +export = (socket: HubConnection) => { socket.on('register-webContents-crashed', (id) => { const browserWindow = getWindowById(id); diff --git a/ElectronNET.Host/package-lock.json b/ElectronNET.Host/package-lock.json index 8d536492..53e34b1d 100644 --- a/ElectronNET.Host/package-lock.json +++ b/ElectronNET.Host/package-lock.json @@ -10,7 +10,6 @@ "license": "MIT", "dependencies": { "@microsoft/signalr": "^6.0.2", - "@types/signalr": "^2.2.37", "dasherize": "^2.0.0", "electron-updater": "^4.6.5", "image-size": "^1.0.1", @@ -146,14 +145,6 @@ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, - "node_modules/@types/jquery": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", - "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", - "dependencies": { - "@types/sizzle": "*" - } - }, "node_modules/@types/node": { "version": "17.0.21", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", @@ -164,19 +155,6 @@ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.6.tgz", "integrity": "sha512-0caWDWmpCp0uifxFh+FaqK3CuZ2SkRR/ZRxAV5+zNdC3QVUi6wyOJnefhPvtNt8NQWXB5OA93BUvZsXpWat2Xw==" }, - "node_modules/@types/signalr": { - "version": "2.2.37", - "resolved": "https://registry.npmjs.org/@types/signalr/-/signalr-2.2.37.tgz", - "integrity": "sha512-Oay9I3cevxwfQlc8y60FPdtskRqYCPmDMZYamObcD+kr1uDC/EmfOT/2AmrKh/4JQ148yWbTkadnd8ZLM5tOFA==", - "dependencies": { - "@types/jquery": "*" - } - }, - "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==" - }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -1909,14 +1887,6 @@ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, - "@types/jquery": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", - "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", - "requires": { - "@types/sizzle": "*" - } - }, "@types/node": { "version": "17.0.21", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", @@ -1927,19 +1897,6 @@ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.6.tgz", "integrity": "sha512-0caWDWmpCp0uifxFh+FaqK3CuZ2SkRR/ZRxAV5+zNdC3QVUi6wyOJnefhPvtNt8NQWXB5OA93BUvZsXpWat2Xw==" }, - "@types/signalr": { - "version": "2.2.37", - "resolved": "https://registry.npmjs.org/@types/signalr/-/signalr-2.2.37.tgz", - "integrity": "sha512-Oay9I3cevxwfQlc8y60FPdtskRqYCPmDMZYamObcD+kr1uDC/EmfOT/2AmrKh/4JQ148yWbTkadnd8ZLM5tOFA==", - "requires": { - "@types/jquery": "*" - } - }, - "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==" - }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", diff --git a/ElectronNET.Host/package.json b/ElectronNET.Host/package.json index 4511a422..0c3bbf77 100644 --- a/ElectronNET.Host/package.json +++ b/ElectronNET.Host/package.json @@ -13,7 +13,6 @@ }, "dependencies": { "@microsoft/signalr": "^6.0.2", - "@types/signalr": "^2.2.37", "dasherize": "^2.0.0", "electron-updater": "^4.6.5", "image-size": "^1.0.1", diff --git a/ElectronNET.WebApp/ElectronHostHook/package-lock.json b/ElectronNET.WebApp/ElectronHostHook/package-lock.json index db70d938..388041f6 100644 --- a/ElectronNET.WebApp/ElectronHostHook/package-lock.json +++ b/ElectronNET.WebApp/ElectronHostHook/package-lock.json @@ -13,7 +13,6 @@ }, "devDependencies": { "@microsoft/signalr": "^6.0.2", - "@types/signalr": "^2.2.37", "@types/socket.io": "^3.0.1", "typescript": "^4.6.2" } @@ -85,35 +84,11 @@ "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", "dev": true }, - "node_modules/@types/jquery": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", - "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", - "dev": true, - "dependencies": { - "@types/sizzle": "*" - } - }, "node_modules/@types/node": { "version": "14.18.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" }, - "node_modules/@types/signalr": { - "version": "2.2.37", - "resolved": "https://registry.npmjs.org/@types/signalr/-/signalr-2.2.37.tgz", - "integrity": "sha512-Oay9I3cevxwfQlc8y60FPdtskRqYCPmDMZYamObcD+kr1uDC/EmfOT/2AmrKh/4JQ148yWbTkadnd8ZLM5tOFA==", - "dev": true, - "dependencies": { - "@types/jquery": "*" - } - }, - "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, "node_modules/@types/socket.io": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-3.0.2.tgz", @@ -1453,35 +1428,11 @@ "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", "dev": true }, - "@types/jquery": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", - "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", - "dev": true, - "requires": { - "@types/sizzle": "*" - } - }, "@types/node": { "version": "14.18.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" }, - "@types/signalr": { - "version": "2.2.37", - "resolved": "https://registry.npmjs.org/@types/signalr/-/signalr-2.2.37.tgz", - "integrity": "sha512-Oay9I3cevxwfQlc8y60FPdtskRqYCPmDMZYamObcD+kr1uDC/EmfOT/2AmrKh/4JQ148yWbTkadnd8ZLM5tOFA==", - "dev": true, - "requires": { - "@types/jquery": "*" - } - }, - "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, "@types/socket.io": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-3.0.2.tgz", diff --git a/ElectronNET.WebApp/ElectronHostHook/package.json b/ElectronNET.WebApp/ElectronHostHook/package.json index 221d7917..49ba8358 100644 --- a/ElectronNET.WebApp/ElectronHostHook/package.json +++ b/ElectronNET.WebApp/ElectronHostHook/package.json @@ -14,7 +14,6 @@ "license": "MIT", "devDependencies": { "@microsoft/signalr": "^6.0.2", - "@types/signalr": "^2.2.37", "@types/socket.io": "^3.0.1", "typescript": "^4.6.2" }, From 4ddcc283b2fb9f5967086787bc883c7d4cd18827 Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Fri, 4 Mar 2022 15:09:01 +0100 Subject: [PATCH 09/15] Manually merge in ElectronNET.API from @theolivenbaum --- ElectronNET.API/App.cs | 157 ++++++++++++++-- ElectronNET.API/AutoUpdater.cs | 175 ++++++------------ ElectronNET.API/BridgeSettings.cs | 11 ++ ElectronNET.API/BrowserView.cs | 27 ++- ElectronNET.API/BrowserWindow.cs | 133 ++++++++++--- ElectronNET.API/Clipboard.cs | 8 +- ElectronNET.API/CommandLine.cs | 2 +- ElectronNET.API/Cookies.cs | 2 +- ElectronNET.API/DesktopCapturer.cs | 47 +++++ ElectronNET.API/Dialog.cs | 9 +- ElectronNET.API/Dock.cs | 8 +- ElectronNET.API/Electron.cs | 9 + ElectronNET.API/ElectronNET.API.csproj | 1 + .../Entities/BrowserWindowOptions.cs | 82 ++++---- .../Entities/CookieChangedCause.cs | 4 +- .../Entities/CookieRemovedResponse.cs | 10 + ElectronNET.API/Entities/Data.cs | 2 + .../Entities/DesktopCapturerSource.cs | 15 ++ ElectronNET.API/Entities/Display.cs | 9 +- ElectronNET.API/Entities/JumpListSettings.cs | 9 +- ElectronNET.API/Entities/MessageBoxResult.cs | 6 + ElectronNET.API/Entities/NativeImage.cs | 6 +- .../Entities/NativeImageJsonConverter.cs | 9 +- .../Entities/NotificationAction.cs | 5 +- .../Entities/NotificationOptions.cs | 13 ++ ElectronNET.API/Entities/OpenDialogOptions.cs | 2 + .../Entities/OpenDialogProperty.cs | 53 +++++- .../Entities/OpenExternalOptions.cs | 3 + ElectronNET.API/Entities/SaveDialogOptions.cs | 13 ++ .../Entities/SecondInstanceResponse.cs | 9 + ElectronNET.API/Entities/SourcesOption.cs | 9 + ElectronNET.API/Entities/TitleBarStyle.cs | 7 + .../Entities/TrayClickEventArgs.cs | 1 + .../Entities/TrayClickEventResponse.cs | 8 + ElectronNET.API/Entities/UpdateInfo.cs | 8 +- ElectronNET.API/Entities/Vibrancy.cs | 36 +++- ElectronNET.API/Entities/WebPreferences.cs | 21 ++- ElectronNET.API/Events.cs | 32 +--- ElectronNET.API/Extensions/EnumExtensions.cs | 2 +- .../Extensions/MenuItemExtensions.cs | 2 +- .../Extensions/ThumbarButtonExtensions.cs | 2 +- ElectronNET.API/GlobalShortcut.cs | 2 +- ElectronNET.API/HostHook.cs | 64 ++----- ElectronNET.API/Hubs/HubElectron.cs | 45 ++++- ElectronNET.API/IpcMain.cs | 94 +++++++++- ElectronNET.API/LifetimeServiceHost.cs | 2 - ElectronNET.API/Menu.cs | 8 +- ElectronNET.API/MenuResponse.cs | 8 + ElectronNET.API/NativeTheme.cs | 7 +- ElectronNET.API/Notification.cs | 6 +- ElectronNET.API/PowerMonitor.cs | 18 +- ElectronNET.API/Screen.cs | 2 +- ElectronNET.API/Shell.cs | 5 +- ElectronNET.API/Tray.cs | 48 +++-- ElectronNET.API/WebHostBuilderExtensions.cs | 2 +- ElectronNET.API/WindowManager.cs | 108 ++++++++--- 56 files changed, 1007 insertions(+), 379 deletions(-) create mode 100644 ElectronNET.API/DesktopCapturer.cs create mode 100644 ElectronNET.API/Entities/CookieRemovedResponse.cs create mode 100644 ElectronNET.API/Entities/DesktopCapturerSource.cs create mode 100644 ElectronNET.API/Entities/SecondInstanceResponse.cs create mode 100644 ElectronNET.API/Entities/SourcesOption.cs create mode 100644 ElectronNET.API/Entities/TrayClickEventResponse.cs create mode 100644 ElectronNET.API/MenuResponse.cs diff --git a/ElectronNET.API/App.cs b/ElectronNET.API/App.cs index aa5d9e94..3f64017f 100644 --- a/ElectronNET.API/App.cs +++ b/ElectronNET.API/App.cs @@ -9,6 +9,7 @@ using System.Threading; using System.Threading.Tasks; using ElectronNET.API.Extensions; +using System.Runtime.Versioning; namespace ElectronNET.API { @@ -17,6 +18,56 @@ namespace ElectronNET.API /// public sealed class App { + /// + /// Emitted when the user clicks on the dock on Mac + /// + /// + [SupportedOSPlatform("macos")] + public event Action Activate + { + add + { + _appActivate += value; + } + remove + { + _appActivate -= value; + } + } + + public void TriggerOnActivate() + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + _appActivate(); + } + } + + private event Action _appActivate; + + /// + /// Emitted on the first instance when the user opens a second instance of the app, and the app is single instance + /// + /// + public event Action ActivateFromSecondInstance + { + add + { + _appActivateFromSecondInstance += value; + } + remove + { + _appActivateFromSecondInstance -= value; + } + } + + public void TriggerOnAppActivateFromSecondInstance(string[] args) + { + _appActivateFromSecondInstance(args); + } + + private event Action _appActivateFromSecondInstance; + /// /// Emitted when all windows have been closed. /// @@ -314,6 +365,8 @@ public void TriggerOnWebContentsCreated() /// screen readers, are enabled or disabled. See https://www.chromium.org/developers/design-documents/accessibility for more details. /// /// when Chrome's accessibility support is enabled, otherwise. + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public event Action AccessibilitySupportChanged { add @@ -340,11 +393,11 @@ public void TriggerOnAccessibilitySupportChanged(bool state) /// /// Emitted when the application has finished basic startup. /// - public event Action Ready + public event Action Ready { add { - if(IsReady) + if (IsReady) { value(); } @@ -362,14 +415,14 @@ public event Action Ready /// /// Application host fully started. /// - public bool IsReady - { + public bool IsReady + { get { return _isReady; } internal set { _isReady = value; - if(value) + if (value) { _ready?.Invoke(); } @@ -384,6 +437,7 @@ internal set /// /// On Windows, you have to parse the arguments using App.CommandLine to get the filepath. /// + [SupportedOSPlatform("macos")] public event Action OpenFile { add @@ -409,8 +463,7 @@ public void TriggerOnOpenFile(string openFile) /// - /// Emitted when a MacOS user wants to open a URL with the application. Your application's Info.plist file must - /// define the URL scheme within the CFBundleURLTypes key, and set NSPrincipalClass to AtomApplication. + /// Emitted when a user wants to open a URL with the application. See https://www.electronjs.org/docs/latest/tutorial/launch-app-from-url-in-another-app for more information. /// public event Action OpenUrl { @@ -482,8 +535,12 @@ public Task NameAsync } - internal App() + private App() { + if (OperatingSystem.IsMacOS() || OperatingSystem.IsLinux()) + { + AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true); + } CommandLine = new CommandLine(); } @@ -495,7 +552,7 @@ internal static App Instance { lock (_syncRoot) { - if(_app == null) + if (_app == null) { _app = new App(); } @@ -506,8 +563,16 @@ internal static App Instance } } + /// + /// Manually set that the app is ready instead of using the UseElectron extension method + /// + public static void ManuallySetIsReady() + { + Instance.IsReady = true; + } + private static App _app; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new object(); private readonly JsonSerializer _jsonSerializer = new JsonSerializer() { @@ -583,6 +648,7 @@ public async void Focus() /// /// You should seek to use the option as sparingly as possible. /// + [SupportedOSPlatform("macos")] public async void Focus(FocusOptions focusOptions) { await Electron.SignalrElectron.Clients.All.SendAsync("appFocus", JObject.FromObject(focusOptions, _jsonSerializer)); @@ -591,6 +657,7 @@ public async void Focus(FocusOptions focusOptions) /// /// Hides all application windows without minimizing them. /// + [SupportedOSPlatform("macos")] public async void Hide() { await Electron.SignalrElectron.Clients.All.SendAsync("appHide"); @@ -599,6 +666,7 @@ public async void Hide() /// /// Shows application windows after they were hidden. Does not automatically focus them. /// + [SupportedOSPlatform("macos")] public async void Show() { await Electron.SignalrElectron.Clients.All.SendAsync("appShow"); @@ -609,7 +677,7 @@ public async void Show() /// public async Task GetAppPathAsync(CancellationToken cancellationToken = default) { - return (await SignalrSerializeHelper.GetSignalrResultString("appGetAppPath")); + return (await SignalrSerializeHelper.GetSignalrResultString("appGetAppPath")); } /// @@ -683,6 +751,8 @@ public async Task GetLocaleAsync(CancellationToken cancellationToken = d /// list from the task bar, and on macOS you can visit it from dock menu. /// /// Path to add. + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public async void AddRecentDocument(string path) { await Electron.SignalrElectron.Clients.All.SendAsync("appAddRecentDocument", path); @@ -691,6 +761,8 @@ public async void AddRecentDocument(string path) /// /// Clears the recent documents list. /// + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public async void ClearRecentDocuments() { await Electron.SignalrElectron.Clients.All.SendAsync("appClearRecentDocuments"); @@ -721,6 +793,8 @@ public async void ClearRecentDocuments() /// call this method with electron as the parameter. /// The cancellation token. /// Whether the call succeeded. + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public async Task SetAsDefaultProtocolClientAsync(string protocol, CancellationToken cancellationToken = default) { return await SetAsDefaultProtocolClientAsync(protocol, null, null, cancellationToken); @@ -752,6 +826,8 @@ public async Task SetAsDefaultProtocolClientAsync(string protocol, Cancell /// The path to the Electron executable. Defaults to process.execPath /// The cancellation token. /// Whether the call succeeded. + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public async Task SetAsDefaultProtocolClientAsync(string protocol, string path, CancellationToken cancellationToken = default) { return await SetAsDefaultProtocolClientAsync(protocol, path, null, cancellationToken); @@ -784,6 +860,8 @@ public async Task SetAsDefaultProtocolClientAsync(string protocol, string /// Arguments passed to the executable. Defaults to an empty array. /// The cancellation token. /// Whether the call succeeded. + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public async Task SetAsDefaultProtocolClientAsync(string protocol, string path, string[] args, CancellationToken cancellationToken = default) { return await SignalrSerializeHelper.GetSignalrResultBool("appSetAsDefaultProtocolClient", protocol, path, args); @@ -796,6 +874,8 @@ public async Task SetAsDefaultProtocolClientAsync(string protocol, string /// The name of your protocol, without ://. /// The cancellation token. /// Whether the call succeeded. + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public async Task RemoveAsDefaultProtocolClientAsync(string protocol, CancellationToken cancellationToken = default) { return await RemoveAsDefaultProtocolClientAsync(protocol, null, null, cancellationToken); @@ -809,6 +889,8 @@ public async Task RemoveAsDefaultProtocolClientAsync(string protocol, Canc /// Defaults to process.execPath. /// The cancellation token. /// Whether the call succeeded. + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public async Task RemoveAsDefaultProtocolClientAsync(string protocol, string path, CancellationToken cancellationToken = default) { return await RemoveAsDefaultProtocolClientAsync(protocol, path, null, cancellationToken); @@ -823,6 +905,8 @@ public async Task RemoveAsDefaultProtocolClientAsync(string protocol, stri /// Defaults to an empty array. /// The cancellation token. /// Whether the call succeeded. + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public async Task RemoveAsDefaultProtocolClientAsync(string protocol, string path, string[] args, CancellationToken cancellationToken = default) { return await SignalrSerializeHelper.GetSignalrResultBool("appRemoveAsDefaultProtocolClient", protocol, path, args); @@ -841,6 +925,8 @@ public async Task RemoveAsDefaultProtocolClientAsync(string protocol, stri /// The name of your protocol, without ://. /// The cancellation token. /// Whether the current executable is the default handler for a protocol (aka URI scheme). + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public async Task IsDefaultProtocolClientAsync(string protocol, CancellationToken cancellationToken = default) { return await IsDefaultProtocolClientAsync(protocol, null, null, cancellationToken); @@ -860,6 +946,8 @@ public async Task IsDefaultProtocolClientAsync(string protocol, Cancellati /// Defaults to process.execPath. /// The cancellation token. /// Whether the current executable is the default handler for a protocol (aka URI scheme). + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public async Task IsDefaultProtocolClientAsync(string protocol, string path, CancellationToken cancellationToken = default) { return await IsDefaultProtocolClientAsync(protocol, path, null, cancellationToken); @@ -880,6 +968,8 @@ public async Task IsDefaultProtocolClientAsync(string protocol, string pat /// Defaults to an empty array. /// The cancellation token. /// Whether the current executable is the default handler for a protocol (aka URI scheme). + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public async Task IsDefaultProtocolClientAsync(string protocol, string path, string[] args, CancellationToken cancellationToken = default) { return await SignalrSerializeHelper.GetSignalrResultBool("appIsDefaultProtocolClient", protocol, path, args); @@ -893,6 +983,7 @@ public async Task IsDefaultProtocolClientAsync(string protocol, string pat /// Array of objects. /// The cancellation token. /// Whether the call succeeded. + [SupportedOSPlatform("windows")] public async Task SetUserTasksAsync(UserTask[] userTasks, CancellationToken cancellationToken = default) { return await SignalrSerializeHelper.GetSignalrResultBool("appSetUserTasks", JArray.FromObject(userTasks, _jsonSerializer)); @@ -903,6 +994,7 @@ public async Task SetUserTasksAsync(UserTask[] userTasks, CancellationToke /// /// The cancellation token. /// Jump List settings. + [SupportedOSPlatform("windows")] public async Task GetJumpListSettingsAsync(CancellationToken cancellationToken = default) { var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("appGetJumpListSettings"); @@ -925,6 +1017,7 @@ public async Task GetJumpListSettingsAsync(CancellationToken c /// omitted from the Jump List. The list of removed items can be obtained using . /// /// Array of objects. + [SupportedOSPlatform("windows")] public async void SetJumpList(JumpListCategory[] categories) { await Electron.SignalrElectron.Clients.All.SendAsync("appSetJumpList", JArray.FromObject(categories, _jsonSerializer)); @@ -997,6 +1090,7 @@ public async Task HasSingleInstanceLockAsync(CancellationToken cancellatio /// /// Uniquely identifies the activity. Maps to NSUserActivity.activityType. /// App-specific state to store for use by another device. + [SupportedOSPlatform("macos")] public void SetUserActivity(string type, object userInfo) { SetUserActivity(type, userInfo, null); @@ -1014,6 +1108,7 @@ public void SetUserActivity(string type, object userInfo) /// /// The webpage to load in a browser if no suitable app is installed on the resuming device. The scheme must be http or https. /// + [SupportedOSPlatform("macos")] public async void SetUserActivity(string type, object userInfo, string webpageUrl) { await Electron.SignalrElectron.Clients.All.SendAsync("appSetUserActivity", type, userInfo, webpageUrl); @@ -1023,6 +1118,7 @@ public async void SetUserActivity(string type, object userInfo, string webpageUr /// The type of the currently running activity. /// /// The cancellation token. + [SupportedOSPlatform("macos")] public async Task GetCurrentActivityTypeAsync(CancellationToken cancellationToken = default) { return await SignalrSerializeHelper.GetSignalrResultString("appGetCurrentActivityType"); @@ -1031,6 +1127,7 @@ public async Task GetCurrentActivityTypeAsync(CancellationToken cancella /// /// Invalidates the current Handoff user activity. /// + [SupportedOSPlatform("macos")] public async void InvalidateCurrentActivity() { await Electron.SignalrElectron.Clients.All.SendAsync("appInvalidateCurrentActivity"); @@ -1039,6 +1136,7 @@ public async void InvalidateCurrentActivity() /// /// Marks the current Handoff user activity as inactive without invalidating it. /// + [SupportedOSPlatform("macos")] public async void ResignCurrentActivity() { await Electron.SignalrElectron.Clients.All.SendAsync("appResignCurrentActivity"); @@ -1048,6 +1146,7 @@ public async void ResignCurrentActivity() /// Changes the Application User Model ID to id. /// /// Model Id. + [SupportedOSPlatform("windows")] public async void SetAppUserModelId(string id) { await Electron.SignalrElectron.Clients.All.SendAsync("appSetAppUserModelId", id); @@ -1062,6 +1161,7 @@ public async void SetAppUserModelId(string id) /// /// The cancellation token. /// Result of import. Value of 0 indicates success. + [SupportedOSPlatform("linux")] public async Task ImportCertificateAsync(ImportCertificateOptions options, CancellationToken cancellationToken = default) { return await SignalrSerializeHelper.GetSignalrResultInt("appImportCertificate", JObject.FromObject(options, _jsonSerializer)); @@ -1103,6 +1203,8 @@ public async Task GetGpuFeatureStatusAsync(CancellationToken c /// Counter badge. /// The cancellation token. /// Whether the call succeeded. + [SupportedOSPlatform("linux")] + [SupportedOSPlatform("macos")] public async Task SetBadgeCountAsync(int count, CancellationToken cancellationToken = default) { return await SignalrSerializeHelper.GetSignalrResultBool("appSetBadgeCount", count); @@ -1112,6 +1214,8 @@ public async Task SetBadgeCountAsync(int count, CancellationToken cancella /// The current value displayed in the counter badge. /// /// The cancellation token. + [SupportedOSPlatform("linux")] + [SupportedOSPlatform("macos")] public async Task GetBadgeCountAsync(CancellationToken cancellationToken = default) { return await SignalrSerializeHelper.GetSignalrResultInt("appGetBadgeCount"); @@ -1126,6 +1230,7 @@ public async Task GetBadgeCountAsync(CancellationToken cancellationToken = /// Whether the current desktop environment is Unity launcher. /// /// The cancellation token. + [SupportedOSPlatform("linux")] public async Task IsUnityRunningAsync(CancellationToken cancellationToken = default) { return await SignalrSerializeHelper.GetSignalrResultBool("appIsUnityRunning"); @@ -1135,6 +1240,8 @@ public async Task IsUnityRunningAsync(CancellationToken cancellationToken /// If you provided path and args options to then you need to pass the same /// arguments here for to be set correctly. /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async Task GetLoginItemSettingsAsync(CancellationToken cancellationToken = default) { return await GetLoginItemSettingsAsync(null, cancellationToken); @@ -1146,6 +1253,8 @@ public async Task GetLoginItemSettingsAsync(CancellationToken /// /// /// The cancellation token. + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async Task GetLoginItemSettingsAsync(LoginItemSettingsOptions options, CancellationToken cancellationToken = default) { JObject appGetLoginItemSettingsCompleted; @@ -1167,6 +1276,8 @@ public async Task GetLoginItemSettingsAsync(LoginItemSettings /// you'll want to set the launch path to Update.exe, and pass arguments that specify your application name. /// /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async void SetLoginItemSettings(LoginSettings loginSettings) { await Electron.SignalrElectron.Clients.All.SendAsync("appSetLoginItemSettings", JObject.FromObject(loginSettings, _jsonSerializer)); @@ -1178,6 +1289,8 @@ public async void SetLoginItemSettings(LoginSettings loginSettings) /// See Chromium's accessibility docs for more details. /// /// if Chrome’s accessibility support is enabled, otherwise. + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async Task IsAccessibilitySupportEnabledAsync(CancellationToken cancellationToken = default) { return await SignalrSerializeHelper.GetSignalrResultBool("appIsAccessibilitySupportEnabled"); @@ -1193,11 +1306,33 @@ public async Task IsAccessibilitySupportEnabledAsync(CancellationToken can /// Note: Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default. /// /// Enable or disable accessibility tree rendering. + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async void SetAccessibilitySupportEnabled(bool enabled) { await Electron.SignalrElectron.Clients.All.SendAsync("appSetAboutPanelOptions", enabled); } + /// + /// Fetches a path's associated icon. + /// + /// + /// + public async Task GetFileIcon(string path) + { + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJArray("appGetFileIcon"); + return signalrResult[1].ToObject(); + } + + /// + /// If you're using a splashscreen in the electron.manifest.json, the window will ony be fully destroyed once you call this method once. + /// You should only do this after creating another window, to avoid a bug where the Electron renderer process frezees till any window interaction. + /// + public async void DestroySplashScreen() + { + await Electron.SignalrElectron.Clients.All.SendAsync("splashscreen-destroy"); + } + /// /// Show the app's about panel options. These options can be overridden with /// . diff --git a/ElectronNET.API/AutoUpdater.cs b/ElectronNET.API/AutoUpdater.cs index 0bf98f0f..0db2fcf8 100644 --- a/ElectronNET.API/AutoUpdater.cs +++ b/ElectronNET.API/AutoUpdater.cs @@ -14,21 +14,55 @@ namespace ElectronNET.API /// public sealed class AutoUpdater { + /// + /// Whether to automatically download an update when it is found. (Default is true) + /// + public async Task IsAutoDownloadEnabledAsync() + { + return await SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-autoDownload-get"); + } + + /// + /// Whether to automatically install a downloaded update on app quit (if `QuitAndInstall` was not called before). + /// + /// Applicable only on Windows and Linux. + /// + public async Task IsAutoInstallOnAppQuitEnabledAsync() + { + return await SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-autoInstallOnAppQuit-get"); + } + + /// + /// *GitHub provider only.* Whether to allow update to pre-release versions. + /// Defaults to "true" if application version contains prerelease components (e.g. "0.12.1-alpha.1", here "alpha" is a prerelease component), otherwise "false". + /// + /// If "true", downgrade will be allowed("allowDowngrade" will be set to "true"). + /// + public async Task IsAllowPrereleaseEnabledAsync() + { + return await SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-allowPrerelease-get"); + } + + /// + /// *GitHub provider only.* + /// Get all release notes (from current version to latest), not just the latest (Default is false). + /// + public async Task IsFullChangeLogEnabledAsync() + { + return await SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-fullChangelog-get"); + } + + public async Task IsAllowDowngradeEnabledAsync() + { + return await SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-allowDowngrade-get"); + } + + /// /// Whether to automatically download an update when it is found. (Default is true) /// public bool AutoDownload { - get - { - return Task.Run(() => - { - var taskCompletionSource = new TaskCompletionSource(); - var signalrResult = SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-autoDownload-get"); - taskCompletionSource.SetResult(signalrResult.Result); - return taskCompletionSource.Task; - }).Result; - } set { Electron.SignalrElectron.Clients.All.SendAsync("autoUpdater-autoDownload-set", value); @@ -42,16 +76,6 @@ public bool AutoDownload /// public bool AutoInstallOnAppQuit { - get - { - return Task.Run(() => - { - var taskCompletionSource = new TaskCompletionSource(); - var signalrResult = SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-autoInstallOnAppQuit-get"); - taskCompletionSource.SetResult(signalrResult.Result); - return taskCompletionSource.Task; - }).Result; - } set { Electron.SignalrElectron.Clients.All.SendAsync("autoUpdater-autoInstallOnAppQuit-set", value); @@ -66,16 +90,6 @@ public bool AutoInstallOnAppQuit /// public bool AllowPrerelease { - get - { - return Task.Run(() => - { - var taskCompletionSource = new TaskCompletionSource(); - var signalrResult = SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-allowPrerelease-get"); - taskCompletionSource.SetResult(signalrResult.Result); - return taskCompletionSource.Task; - }).Result; - } set { Electron.SignalrElectron.Clients.All.SendAsync("autoUpdater-allowPrerelease-set", value); @@ -88,16 +102,6 @@ public bool AllowPrerelease /// public bool FullChangelog { - get - { - return Task.Run(() => - { - var taskCompletionSource = new TaskCompletionSource(); - var signalrResult = SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-fullChangelog-get"); - taskCompletionSource.SetResult(signalrResult.Result); - return taskCompletionSource.Task; - }).Result; - } set { Electron.SignalrElectron.Clients.All.SendAsync("autoUpdater-fullChangelog-set", value); @@ -111,17 +115,6 @@ public bool FullChangelog /// public bool AllowDowngrade { - get - { - return Task.Run(() => - { - var taskCompletionSource = new TaskCompletionSource(); - var signalrResult = SignalrSerializeHelper.GetSignalrResultBool("autoUpdater-allowDowngrade-get"); - taskCompletionSource.SetResult(signalrResult.Result); - - return taskCompletionSource.Task; - }).Result; - } set { Electron.SignalrElectron.Clients.All.SendAsync("autoUpdater-allowDowngrade-set", value); @@ -131,87 +124,39 @@ public bool AllowDowngrade /// /// For test only. /// - public string UpdateConfigPath + public async Task GetUpdateConfigPathAsync() { - get - { - return Task.Run(() => - { - var taskCompletionSource = new TaskCompletionSource(); - var signalrResult = SignalrSerializeHelper.GetSignalrResultString("autoUpdater-updateConfigPath-get"); - taskCompletionSource.SetResult(signalrResult.Result); - return taskCompletionSource.Task; - }).Result; - } + return await SignalrSerializeHelper.GetSignalrResultString("autoUpdater-updateConfigPath-get"); } - + /// /// The current application version /// - public Task CurrentVersionAsync + public async Task GetCurrentVersionAsync() { - get - { - return Task.Run(() => - { - var taskCompletionSource = new TaskCompletionSource(); - var signalrResult = SignalrSerializeHelper.GetSignalrResultJObject("autoUpdater-currentVersion-get"); - SemVer version = ((JObject)signalrResult.Result).ToObject(); - taskCompletionSource.SetResult(version); - return taskCompletionSource.Task; - }); - } + var signalrResult = await SignalrSerializeHelper.GetSignalrResultString("autoUpdater-updateConcurrentVersionfigPath-get"); + SemVer version = ((JObject)signalrResult).ToObject(); + return version; } - /// - /// Get the update channel. Not applicable for GitHub. - /// Doesn’t return channel from the update configuration, only if was previously set. - /// - [Obsolete("Use the asynchronous version ChannelAsync instead")] - public string Channel - { - get - { - return ChannelAsync.Result; - } - } /// /// Get the update channel. Not applicable for GitHub. /// Doesn’t return channel from the update configuration, only if was previously set. /// - public Task ChannelAsync + public async Task GetChannelAsync() { - get - { - return Task.Run(() => - { - var taskCompletionSource = new TaskCompletionSource(); - var signalrResult = SignalrSerializeHelper.GetSignalrResultString("autoUpdater-channel-get"); - taskCompletionSource.SetResult(signalrResult.Result); - return taskCompletionSource.Task; - }); - } + return await SignalrSerializeHelper.GetSignalrResultString("autoUpdater-channel-get"); } - - /// /// The request headers. /// - public Task> RequestHeadersAsync + public async Task> GetRequestHeadersAsync() { - get - { - return Task.Run(() => - { - var taskCompletionSource = new TaskCompletionSource>(); - var signalrResult = SignalrSerializeHelper.GetSignalrResultJObject("autoUpdater-requestHeaders-get"); - Dictionary result = ((JObject)signalrResult.Result).ToObject>(); - taskCompletionSource.SetResult(result); - return taskCompletionSource.Task; - }); - } + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("autoUpdater-requestHeaders-get"); + Dictionary result = signalrResult.ToObject>(); + return result; } /// @@ -327,7 +272,7 @@ public event Action OnUpdateNotAvailable public void TriggerOnUpdateNotAvailable(JObject jobject) { - _updateAvailable(JObject.Parse(jobject.ToString()).ToObject()); + _updateNotAvailable(JObject.Parse(jobject.ToString()).ToObject()); } private event Action _updateNotAvailable; @@ -385,7 +330,7 @@ public void TriggerOnUpdateDownloaded(JObject jobject) private event Action _updateDownloaded; private static AutoUpdater _autoUpdater; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal AutoUpdater() { } @@ -462,6 +407,7 @@ public async Task CheckForUpdatesAndNotifyAsync() { var updateCheckResult = signalrResult.ToObject(); taskCompletionSource.SetResult(updateCheckResult); + taskCompletionSource.SetResult(JObject.Parse(updateCheckResult.ToString()).ToObject()); } catch (Exception ex) { @@ -483,6 +429,7 @@ public async Task CheckForUpdatesAndNotifyAsync() /// Run the app after finish even on silent install. Not applicable for macOS. Ignored if `isSilent` is set to `false`. public async void QuitAndInstall(bool isSilent = false, bool isForceRunAfter = false) { + await Electron.SignalrElectron.Clients.All.SendAsync("prepare-for-update", isSilent, isForceRunAfter); await Electron.SignalrElectron.Clients.All.SendAsync("autoUpdaterQuitAndInstall", isSilent, isForceRunAfter); } diff --git a/ElectronNET.API/BridgeSettings.cs b/ElectronNET.API/BridgeSettings.cs index b707a61b..122f68af 100644 --- a/ElectronNET.API/BridgeSettings.cs +++ b/ElectronNET.API/BridgeSettings.cs @@ -20,5 +20,16 @@ public static class BridgeSettings /// The web port. /// public static string WebPort { get; set; } + + /// + /// Manually set the port values instead of using the UseElectron extension method + /// + /// + /// + public static void InitializePorts(int socketPort, int webPort) + { + SocketPort = socketPort.ToString(); + WebPort = webPort.ToString(); + } } } diff --git a/ElectronNET.API/BrowserView.cs b/ElectronNET.API/BrowserView.cs index 8aa5377c..baa06488 100644 --- a/ElectronNET.API/BrowserView.cs +++ b/ElectronNET.API/BrowserView.cs @@ -32,22 +32,19 @@ public class BrowserView /// /// (experimental) /// - public Rectangle Bounds + public async Task GetBoundsAsync() { - get - { - return Task.Run(() => - { - var taskCompletionSource = new TaskCompletionSource(); - var signalrResult = SignalrSerializeHelper.GetSignalrResultJObject("browserView-getBounds", Id).Result; - taskCompletionSource.SetResult(((JObject)signalrResult).ToObject()); - return taskCompletionSource.Task; - }).Result; - } - set - { - Electron.SignalrElectron.Clients.All.SendAsync("browserView-setBounds", Id, JObject.FromObject(value, _jsonSerializer)); - } + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("browserView-getBounds", Id); + return ((JObject)signalrResult).ToObject(); + } + + /// + /// Set the bounds of the current view inside the window + /// + /// + public async void SetBounds(Rectangle value) + { + await Electron.SignalrElectron.Clients.All.SendAsync("browserView-setBounds", Id, JObject.FromObject(value, _jsonSerializer)); } /// diff --git a/ElectronNET.API/BrowserWindow.cs b/ElectronNET.API/BrowserWindow.cs index bcec316d..e9fe4f5a 100644 --- a/ElectronNET.API/BrowserWindow.cs +++ b/ElectronNET.API/BrowserWindow.cs @@ -9,8 +9,11 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; +using System.Runtime.Versioning; using System.Threading.Tasks; +//TODO: Add setTrafficLightPosition and getTrafficLightPosition: https://www.electronjs.org/docs/api/browser-window#winsettrafficlightpositionposition-macos + namespace ElectronNET.API { /// @@ -140,6 +143,7 @@ public void TriggerOnClosed() /// /// Emitted when window session is going to end due to force shutdown or machine restart or session log off. /// + [SupportedOSPlatform("windows")] public event Action OnSessionEnd { add @@ -426,6 +430,8 @@ public void TriggerOnRestore() /// /// Emitted when the window is being resized. /// + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public event Action OnResize { add @@ -454,6 +460,8 @@ public void TriggerOnResize() /// /// Note: On macOS this event is just an alias of moved. /// + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public event Action OnMove { add @@ -478,8 +486,10 @@ public void TriggerOnMove() private event Action _move; /// - /// macOS: Emitted once when the window is moved to a new position. + /// Emitted once when the window is moved to a new position. /// + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public event Action OnMoved { add @@ -616,6 +626,8 @@ public void TriggerOnLeaveHtmlFullScreen() /// and the APPCOMMAND_ prefix is stripped off.e.g.APPCOMMAND_BROWSER_BACKWARD /// is emitted as browser-backward. /// + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public event Action OnAppCommand { add @@ -642,6 +654,7 @@ public void TriggerOnAppCommand(string command) /// /// Emitted when scroll wheel event phase has begun. /// + [SupportedOSPlatform("macos")] public event Action OnScrollTouchBegin { add @@ -668,6 +681,7 @@ public void TriggerOnScrollTouchBegin() /// /// Emitted when scroll wheel event phase has ended. /// + [SupportedOSPlatform("macos")] public event Action OnScrollTouchEnd { add @@ -694,6 +708,7 @@ public void TriggerOnScrollTouchEnd() /// /// Emitted when scroll wheel event phase filed upon reaching the edge of element. /// + [SupportedOSPlatform("macos")] public event Action OnScrollTouchEdge { add @@ -720,6 +735,7 @@ public void TriggerOnScrollTouchEdge() /// /// Emitted on 3-finger swipe. Possible directions are up, right, down, left. /// + [SupportedOSPlatform("macos")] public event Action OnSwipe { add @@ -746,6 +762,7 @@ public void TriggerOnSwipe(string direction) /// /// Emitted when the window opens a sheet. /// + [SupportedOSPlatform("macos")] public event Action OnSheetBegin { add @@ -772,6 +789,7 @@ public void TriggerOnSheetBegin() /// /// Emitted when the window has closed a sheet. /// + [SupportedOSPlatform("macos")] public event Action OnSheetEnd { add @@ -798,6 +816,7 @@ public void TriggerOnSheetEnd() /// /// Emitted when the native new tab button is clicked. /// + [SupportedOSPlatform("macos")] public event Action OnNewWindowForTab { add @@ -978,6 +997,14 @@ public async void SetFullScreen(bool flag) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetFullScreen", Id, flag); } + + /// + /// Sets whether the background color of the window + /// + public async void SetBackgroundColor(string color) + { + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetBackgroundColor", Id, color); + } /// /// Whether the window is in fullscreen mode. @@ -988,6 +1015,24 @@ public async Task IsFullScreenAsync() return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsFullScreen", Id); } + /// + /// This will make a window maintain an aspect ratio. The extra size allows a developer to have space, + /// specified in pixels, not included within the aspect ratio calculations. This API already takes into + /// account the difference between a window’s size and its content size. + /// + /// Consider a normal window with an HD video player and associated controls.Perhaps there are 15 pixels + /// of controls on the left edge, 25 pixels of controls on the right edge and 50 pixels of controls below + /// the player. In order to maintain a 16:9 aspect ratio (standard aspect ratio for HD @1920x1080) within + /// the player itself we would call this function with arguments of 16/9 and[40, 50]. The second argument + /// doesn’t care where the extra width and height are within the content view–only that they exist. Just + /// sum any extra width and height areas you have within the overall content view. + /// + /// The aspect ratio to maintain for some portion of the content view. + public async void SetAspectRatio(int aspectRatio) + { + await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetAspectRatio", Id, aspectRatio, JObject.FromObject(new Size() { Height = 0, Width = 0 }, _jsonSerializer)); + } + /// /// This will make a window maintain an aspect ratio. The extra size allows a developer to have space, /// specified in pixels, not included within the aspect ratio calculations. This API already takes into @@ -1002,6 +1047,7 @@ public async Task IsFullScreenAsync() /// /// The aspect ratio to maintain for some portion of the content view. /// The extra size not to be included while maintaining the aspect ratio. + [SupportedOSPlatform("macos")] public async void SetAspectRatio(int aspectRatio, Size extraSize) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetAspectRatio", Id, aspectRatio, JObject.FromObject(extraSize, _jsonSerializer)); @@ -1013,6 +1059,7 @@ public async void SetAspectRatio(int aspectRatio, Size extraSize) /// The absolute path to the file to preview with QuickLook. This is important as /// Quick Look uses the file name and file extension on the path to determine the content type of the /// file to open. + [SupportedOSPlatform("macos")] public async void PreviewFile(string path) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowPreviewFile", Id, path); @@ -1026,6 +1073,7 @@ public async void PreviewFile(string path) /// file to open. /// The name of the file to display on the Quick Look modal view. This is /// purely visual and does not affect the content type of the file. Defaults to path. + [SupportedOSPlatform("macos")] public async void PreviewFile(string path, string displayname) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowPreviewFile", Id, path, displayname); @@ -1034,6 +1082,7 @@ public async void PreviewFile(string path, string displayname) /// /// Closes the currently open Quick Look panel. /// + [SupportedOSPlatform("macos")] public async void CloseFilePreview() { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowCloseFilePreview", Id); @@ -1053,6 +1102,7 @@ public async void SetBounds(Rectangle bounds) /// /// /// + [SupportedOSPlatform("macos")] public async void SetBounds(Rectangle bounds, bool animate) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetBounds", Id, JObject.FromObject(bounds, _jsonSerializer), animate); @@ -1082,6 +1132,7 @@ public async void SetContentBounds(Rectangle bounds) /// /// /// + [SupportedOSPlatform("macos")] public async void SetContentBounds(Rectangle bounds, bool animate) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetContentBounds", Id, JObject.FromObject(bounds, _jsonSerializer), animate); @@ -1113,6 +1164,7 @@ public async void SetSize(int width, int height) /// /// /// + [SupportedOSPlatform("macos")] public async void SetSize(int width, int height, bool animate) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetSize", Id, width, height, animate); @@ -1143,6 +1195,7 @@ public async void SetContentSize(int width, int height) /// /// /// + [SupportedOSPlatform("macos")] public async void SetContentSize(int width, int height, bool animate) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetContentSize", Id, width, height, animate); @@ -1217,6 +1270,8 @@ public async Task IsResizableAsync() /// Sets whether the window can be moved by user. On Linux does nothing. /// /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async void SetMovable(bool movable) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetMovable", Id, movable); @@ -1224,10 +1279,10 @@ public async void SetMovable(bool movable) /// /// Whether the window can be moved by user. - /// - /// On Linux always returns true. /// /// On Linux always returns true. + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async Task IsMovableAsync() { return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsMovable", Id); @@ -1237,6 +1292,8 @@ public async Task IsMovableAsync() /// Sets whether the window can be manually minimized by user. On Linux does nothing. /// /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async void SetMinimizable(bool minimizable) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetMinimizable", Id, minimizable); @@ -1244,10 +1301,10 @@ public async void SetMinimizable(bool minimizable) /// /// Whether the window can be manually minimized by user. - /// - /// On Linux always returns true. /// /// On Linux always returns true. + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async Task IsMinimizableAsync() { return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsMinimizable", Id); @@ -1257,6 +1314,8 @@ public async Task IsMinimizableAsync() /// Sets whether the window can be manually maximized by user. On Linux does nothing. /// /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async void SetMaximizable(bool maximizable) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetMaximizable", Id, maximizable); @@ -1264,10 +1323,10 @@ public async void SetMaximizable(bool maximizable) /// /// Whether the window can be manually maximized by user. - /// - /// On Linux always returns true. /// /// On Linux always returns true. + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async Task IsMaximizableAsync() { return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsMaximizable", Id); @@ -1295,6 +1354,8 @@ public async Task IsFullScreenableAsync() /// Sets whether the window can be manually closed by user. On Linux does nothing. /// /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async void SetClosable(bool closable) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetClosable", Id, closable); @@ -1302,10 +1363,10 @@ public async void SetClosable(bool closable) /// /// Whether the window can be manually closed by user. - /// - /// On Linux always returns true. /// /// On Linux always returns true. + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async Task IsClosableAsync() { return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsClosable", Id); @@ -1331,6 +1392,8 @@ public async void SetAlwaysOnTop(bool flag) /// Values include normal, floating, torn-off-menu, modal-panel, main-menu, /// status, pop-up-menu and screen-saver. The default is floating. /// See the macOS docs + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async void SetAlwaysOnTop(bool flag, OnTopLevel level) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetAlwaysOnTop", Id, flag, level.GetDescription()); @@ -1347,6 +1410,7 @@ public async void SetAlwaysOnTop(bool flag, OnTopLevel level) /// See the macOS docs /// The number of layers higher to set this window relative to the given level. /// The default is 0. Note that Apple discourages setting levels higher than 1 above screen-saver. + [SupportedOSPlatform("macos")] public async void SetAlwaysOnTop(bool flag, OnTopLevel level, int relativeLevel) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetAlwaysOnTop", Id, flag, level.GetDescription(), relativeLevel); @@ -1380,7 +1444,7 @@ public void SetPosition(int x, int y) // https://github.com/electron/electron/issues/4045 if (isWindows10()) { - x = x - 7; + x -= 7; } Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetPosition", Id, x, y); @@ -1392,13 +1456,14 @@ public void SetPosition(int x, int y) /// /// /// + [SupportedOSPlatform("macos")] public void SetPosition(int x, int y, bool animate) { // Workaround Windows 10 / Electron Bug // https://github.com/electron/electron/issues/4045 if (isWindows10()) { - x = x - 7; + x -= 7; } Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetPosition", Id, x, y, animate); @@ -1406,7 +1471,7 @@ public void SetPosition(int x, int y, bool animate) private bool isWindows10() { - return RuntimeInformation.OSDescription.Contains("Windows 10"); + return OperatingSystem.IsWindowsVersionAtLeast(10); } /// @@ -1444,6 +1509,7 @@ public async Task GetTitleAsync() /// but you may want to display them beneath a HTML-rendered toolbar. /// /// + [SupportedOSPlatform("macos")] public async void SetSheetOffset(float offsetY) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetSheetOffset", Id, offsetY); @@ -1456,6 +1522,7 @@ public async void SetSheetOffset(float offsetY) /// /// /// + [SupportedOSPlatform("macos")] public async void SetSheetOffset(float offsetY, float offsetX) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetSheetOffset", Id, offsetY, offsetX); @@ -1511,6 +1578,7 @@ public async Task GetNativeWindowHandle() /// and the icon of the file will show in window’s title bar. /// /// + [SupportedOSPlatform("macos")] public async void SetRepresentedFilename(string filename) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetRepresentedFilename", Id, filename); @@ -1520,6 +1588,7 @@ public async void SetRepresentedFilename(string filename) /// The pathname of the file the window represents. /// /// + [SupportedOSPlatform("macos")] public async Task GetRepresentedFilenameAsync() { return await SignalrSerializeHelper.GetSignalrResultString("browserWindowGetRepresentedFilename", Id); @@ -1530,6 +1599,7 @@ public async Task GetRepresentedFilenameAsync() /// and the icon in title bar will become gray when set to true. /// /// + [SupportedOSPlatform("macos")] public async void SetDocumentEdited(bool edited) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetDocumentEdited", Id, edited); @@ -1539,6 +1609,7 @@ public async void SetDocumentEdited(bool edited) /// Whether the window’s document has been edited. /// /// + [SupportedOSPlatform("macos")] public async Task IsDocumentEditedAsync() { return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsDocumentEdited", Id); @@ -1596,7 +1667,7 @@ public async void Reload() /// The menu items. /// public IReadOnlyCollection MenuItems { get { return _items.AsReadOnly(); } } - private List _items = new List(); + private readonly List _items = new(); // ToDo: Check this -> Possibly wrong @@ -1605,19 +1676,8 @@ public async void Reload() /// setting it to null will remove the menu bar. /// /// - /*public void SetMenu(MenuItem[] menuItems) - { - menuItems.AddMenuItemsId(); - BridgeConnector.Socket.Emit("browserWindowSetMenu", JArray.FromObject(menuItems, _jsonSerializer)); - _items.AddRange(menuItems); - - BridgeConnector.Socket.Off("windowMenuItemClicked"); - BridgeConnector.Socket.On("windowMenuItemClicked", (id) => { - MenuItem menuItem = _items.GetMenuItem(id.ToString()); - menuItem?.Click(); - }); - }*/ - + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("linux")] public void SetMenu(MenuItem[] menuItems) { menuItems.AddMenuItemsId(); @@ -1634,6 +1694,8 @@ public void TriggerOnMenuItemClicked(string id) /// /// Remove the window's menu bar. /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("linux")] public async void RemoveMenu() { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowRemoveMenu", Id); @@ -1667,6 +1729,7 @@ public async void SetProgressBar(double progress) /// /// /// + [SupportedOSPlatform("windows")] public async void SetProgressBar(double progress, ProgressBarOptions progressBarOptions) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetProgressBar", Id, progress, JObject.FromObject(progressBarOptions, _jsonSerializer)); @@ -1676,6 +1739,7 @@ public async void SetProgressBar(double progress, ProgressBarOptions progressBar /// Sets whether the window should have a shadow. On Windows and Linux does nothing. /// /// + [SupportedOSPlatform("macos")] public async void SetHasShadow(bool hasShadow) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetHasShadow", Id, hasShadow); @@ -1699,7 +1763,8 @@ public async Task HasShadowAsync() /// The thumbar buttons. /// public IReadOnlyCollection ThumbarButtons { get { return _thumbarButtons.AsReadOnly(); } } - private List _thumbarButtons = new List(); + + private readonly List _thumbarButtons = new(); /// /// Add a thumbnail toolbar with a specified set of buttons to the thumbnail @@ -1731,6 +1796,7 @@ public async Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) /// an empty region: {x: 0, y: 0, width: 0, height: 0}. /// /// + [SupportedOSPlatform("windows")] public async void SetThumbnailClip(Rectangle rectangle) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetThumbnailClip", Id, rectangle); @@ -1740,6 +1806,7 @@ public async void SetThumbnailClip(Rectangle rectangle) /// Sets the toolTip that is displayed when hovering over the window thumbnail in the taskbar. /// /// + [SupportedOSPlatform("windows")] public async void SetThumbnailToolTip(string tooltip) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetThumbnailToolTip", Id, tooltip); @@ -1752,6 +1819,7 @@ public async void SetThumbnailToolTip(string tooltip) /// If one of those properties is not set, then neither will be used. /// /// + [SupportedOSPlatform("windows")] public async void SetAppDetails(AppDetailsOptions options) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetAppDetails", Id, JObject.FromObject(options, _jsonSerializer)); @@ -1760,6 +1828,7 @@ public async void SetAppDetails(AppDetailsOptions options) /// /// Same as webContents.showDefinitionForSelection(). /// + [SupportedOSPlatform("macos")] public async void ShowDefinitionForSelection() { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowShowDefinitionForSelection", Id); @@ -1791,6 +1860,8 @@ public async Task IsMenuBarAutoHideAsync() /// users can still bring up the menu bar by pressing the single Alt key. /// /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("linux")] public async void SetMenuBarVisibility(bool visible) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetMenuBarVisibility", Id, visible); @@ -1800,6 +1871,8 @@ public async void SetMenuBarVisibility(bool visible) /// Whether the menu bar is visible. /// /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("linux")] public async Task IsMenuBarVisibleAsync() { return await SignalrSerializeHelper.GetSignalrResultBool("browserWindowIsMenuBarVisible", Id); @@ -1846,6 +1919,8 @@ public async void SetIgnoreMouseEvents(bool ignore) /// On Windows it calls SetWindowDisplayAffinity with WDA_MONITOR. /// /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async void SetContentProtection(bool enable) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetContentProtection", Id, enable); @@ -1855,6 +1930,8 @@ public async void SetContentProtection(bool enable) /// Changes whether the window can be focused. /// /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async void SetFocusable(bool focusable) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetFocusable", Id, focusable); @@ -1904,6 +1981,7 @@ public async Task> GetChildWindowsAsync() /// Controls whether to hide cursor when typing. /// /// + [SupportedOSPlatform("macos")] public async void SetAutoHideCursor(bool autoHide) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetAutoHideCursor", Id, autoHide); @@ -1916,6 +1994,7 @@ public async void SetAutoHideCursor(bool autoHide) /// Can be appearance-based, light, dark, titlebar, selection, /// menu, popover, sidebar, medium-light or ultra-dark. /// See the macOS documentation for more details. + [SupportedOSPlatform("macos")] public async void SetVibrancy(Vibrancy type) { await Electron.SignalrElectron.Clients.All.SendAsync("browserWindowSetVibrancy", Id, type.GetDescription()); diff --git a/ElectronNET.API/Clipboard.cs b/ElectronNET.API/Clipboard.cs index 1627e3a5..8efa8721 100644 --- a/ElectronNET.API/Clipboard.cs +++ b/ElectronNET.API/Clipboard.cs @@ -3,6 +3,7 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; +using System.Runtime.Versioning; using System.Threading.Tasks; namespace ElectronNET.API @@ -13,7 +14,7 @@ namespace ElectronNET.API public sealed class Clipboard { private static Clipboard _clipboard; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal Clipboard() { } @@ -102,6 +103,8 @@ public async void WriteRTF(string text, string type = "") /// be empty strings when the bookmark is unavailable. /// /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async Task ReadBookmarkAsync() { var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("clipboard-readBookmark"); @@ -118,6 +121,8 @@ public async Task ReadBookmarkAsync() /// /// /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async void WriteBookmark(string title, string url, string type = "") { await Electron.SignalrElectron.Clients.All.SendAsync("clipboard-writeBookmark", title, url, type); @@ -139,6 +144,7 @@ public async Task ReadFindTextAsync() /// synchronous IPC when called from the renderer process. /// /// + [SupportedOSPlatform("macos")] public async void WriteFindText(string text) { await Electron.SignalrElectron.Clients.All.SendAsync("clipboard-writeFindText", text); diff --git a/ElectronNET.API/CommandLine.cs b/ElectronNET.API/CommandLine.cs index ddd60fad..0b765843 100644 --- a/ElectronNET.API/CommandLine.cs +++ b/ElectronNET.API/CommandLine.cs @@ -32,7 +32,7 @@ internal static CommandLine Instance private static CommandLine _commandLine; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); /// /// Append a switch (with optional value) to Chromium's command line. diff --git a/ElectronNET.API/Cookies.cs b/ElectronNET.API/Cookies.cs index 9d29f7b2..6460ed75 100644 --- a/ElectronNET.API/Cookies.cs +++ b/ElectronNET.API/Cookies.cs @@ -98,7 +98,7 @@ public async Task FlushStoreAsync() await Electron.SignalrElectron.Clients.All.SendAsync("webContents-session-cookies-flushStore", Id); } - private JsonSerializer _jsonSerializer = new JsonSerializer() + private static readonly JsonSerializer _jsonSerializer = new() { ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore, diff --git a/ElectronNET.API/DesktopCapturer.cs b/ElectronNET.API/DesktopCapturer.cs new file mode 100644 index 00000000..0562e472 --- /dev/null +++ b/ElectronNET.API/DesktopCapturer.cs @@ -0,0 +1,47 @@ +using System.Threading.Tasks; +using ElectronNET.API.Entities; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json.Serialization; + +namespace ElectronNET.API +{ + public sealed class DesktopCapturer + { + private static readonly object _syncRoot = new(); + private static DesktopCapturer _desktopCapturer; + + internal DesktopCapturer() { } + + internal static DesktopCapturer Instance + { + get + { + if (_desktopCapturer == null) + { + lock (_syncRoot) + { + if (_desktopCapturer == null) + { + _desktopCapturer = new DesktopCapturer(); + } + } + } + + return _desktopCapturer; + } + } + + public async Task GetSourcesAsync(SourcesOption option) + { + var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("desktop-capturer-get-sources", JObject.FromObject(option, _jsonSerializer)); + return ((JObject)signalrResult).ToObject(); + } + + private JsonSerializer _jsonSerializer = new JsonSerializer() + { + ContractResolver = new CamelCasePropertyNamesContractResolver(), + NullValueHandling = NullValueHandling.Ignore + }; + } +} \ No newline at end of file diff --git a/ElectronNET.API/Dialog.cs b/ElectronNET.API/Dialog.cs index 6b788ee7..eb4de858 100644 --- a/ElectronNET.API/Dialog.cs +++ b/ElectronNET.API/Dialog.cs @@ -5,6 +5,7 @@ using Newtonsoft.Json.Serialization; using System; using System.Collections.Generic; +using System.Runtime.Versioning; using System.Threading.Tasks; using System.Web; @@ -16,7 +17,7 @@ namespace ElectronNET.API public sealed class Dialog { private static Dialog _dialog; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal Dialog() { } @@ -163,6 +164,8 @@ public async void ShowErrorBox(string title, string content) /// /// /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public Task ShowCertificateTrustDialogAsync(CertificateTrustDialogOptions options) { return ShowCertificateTrustDialogAsync(null, options); @@ -176,12 +179,14 @@ public Task ShowCertificateTrustDialogAsync(CertificateTrustDialogOptions option /// /// /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async Task ShowCertificateTrustDialogAsync(BrowserWindow browserWindow, CertificateTrustDialogOptions options) { await Electron.SignalrElectron.Clients.All.SendAsync("showCertificateTrustDialog", JObject.FromObject(browserWindow, _jsonSerializer), JObject.FromObject(options, _jsonSerializer)); } - private JsonSerializer _jsonSerializer = new JsonSerializer() + private static readonly JsonSerializer _jsonSerializer = new() { ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore, diff --git a/ElectronNET.API/Dock.cs b/ElectronNET.API/Dock.cs index fc1db39c..48add51b 100644 --- a/ElectronNET.API/Dock.cs +++ b/ElectronNET.API/Dock.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; using ElectronNET.API.Entities; @@ -13,10 +14,11 @@ namespace ElectronNET.API /// /// Control your app in the macOS dock. /// + [SupportedOSPlatform("macos")] public sealed class Dock { private static Dock _dock; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal Dock() { @@ -127,7 +129,7 @@ public async Task IsVisibleAsync(CancellationToken cancellationToken = def /// The menu items. /// public IReadOnlyCollection MenuItems { get { return _items.AsReadOnly(); } } - private List _items = new List(); + private readonly List _items = new(); /// /// Sets the application's dock menu. @@ -158,7 +160,7 @@ public async void SetIcon(string image) await Electron.SignalrElectron.Clients.All.SendAsync("dock-setIcon", image); } - private JsonSerializer _jsonSerializer = new JsonSerializer() + private static readonly JsonSerializer _jsonSerializer = new() { ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore diff --git a/ElectronNET.API/Electron.cs b/ElectronNET.API/Electron.cs index 1663f996..60087eef 100644 --- a/ElectronNET.API/Electron.cs +++ b/ElectronNET.API/Electron.cs @@ -1,6 +1,9 @@ using ElectronNET.API.Hubs; using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using System; +using System.Runtime.Versioning; namespace ElectronNET.API { @@ -64,6 +67,11 @@ public static class Electron /// public static Screen Screen { get { return Screen.Instance; } } + /// + /// Access information about media sources that can be used to capture audio and video from the desktop using the navigator.mediaDevices.getUserMedia API. + /// + public static DesktopCapturer DesktopCapturer { get { return DesktopCapturer.Instance; } } + /// /// Perform copy and paste operations on the system clipboard. /// @@ -95,6 +103,7 @@ public static class Electron /// /// Control your app in the macOS dock. /// + [SupportedOSPlatform("macos")] public static Dock Dock { get { return Dock.Instance; } } } } \ No newline at end of file diff --git a/ElectronNET.API/ElectronNET.API.csproj b/ElectronNET.API/ElectronNET.API.csproj index 33667108..48b4fd11 100644 --- a/ElectronNET.API/ElectronNET.API.csproj +++ b/ElectronNET.API/ElectronNET.API.csproj @@ -6,6 +6,7 @@ ..\artifacts ElectronNET.API Gregor Biswanger, Robert Muehsig + Gregor Biswanger, Robert Muehsig, Rafael Oliveira Electron.NET MIT diff --git a/ElectronNET.API/Entities/BrowserWindowOptions.cs b/ElectronNET.API/Entities/BrowserWindowOptions.cs index ba920e10..30ca0101 100644 --- a/ElectronNET.API/Entities/BrowserWindowOptions.cs +++ b/ElectronNET.API/Entities/BrowserWindowOptions.cs @@ -1,6 +1,7 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.ComponentModel; +using System.Runtime.Versioning; namespace ElectronNET.API.Entities { @@ -36,62 +37,62 @@ public class BrowserWindowOptions /// window's size will include window frame's size and be slightly larger. Default /// is false. /// - public bool UseContentSize { get; set; } + public bool? UseContentSize { get; set; } /// /// Show window in the center of the screen. /// - public bool Center { get; set; } + public bool? Center { get; set; } /// /// Window's minimum width. Default is 0. /// - public int MinWidth { get; set; } + public int? MinWidth { get; set; } /// /// Window's minimum height. Default is 0. /// - public int MinHeight { get; set; } + public int? MinHeight { get; set; } /// /// Window's maximum width. Default is no limit. /// - public int MaxWidth { get; set; } + public int? MaxWidth { get; set; } /// /// Window's maximum height. Default is no limit. /// - public int MaxHeight { get; set; } + public int? MaxHeight { get; set; } /// /// Whether window is resizable. Default is true. /// [DefaultValue(true)] - public bool Resizable { get; set; } = true; + public bool? Resizable { get; set; } = true; /// /// Whether window is movable. This is not implemented on Linux. Default is true. /// [DefaultValue(true)] - public bool Movable { get; set; } = true; + public bool? Movable { get; set; } = true; /// /// Whether window is minimizable. This is not implemented on Linux. Default is true. /// [DefaultValue(true)] - public bool Minimizable { get; set; } = true; + public bool? Minimizable { get; set; } = true; /// /// Whether window is maximizable. This is not implemented on Linux. Default is true. /// [DefaultValue(true)] - public bool Maximizable { get; set; } = true; + public bool? Maximizable { get; set; } = true; /// /// Whether window is closable. This is not implemented on Linux. Default is true. /// [DefaultValue(true)] - public bool Closable { get; set; } = true; + public bool? Closable { get; set; } = true; /// /// Whether the window can be focused. Default is true. On Windows setting @@ -100,35 +101,35 @@ public class BrowserWindowOptions /// always stay on top in all workspaces. /// [DefaultValue(true)] - public bool Focusable { get; set; } = true; + public bool? Focusable { get; set; } = true; /// /// Whether the window should always stay on top of other windows. Default is false. /// - public bool AlwaysOnTop { get; set; } + public bool? AlwaysOnTop { get; set; } /// /// Whether the window should show in fullscreen. When explicitly set to false the /// fullscreen button will be hidden or disabled on macOS.Default is false. /// - public bool Fullscreen { get; set; } + public bool? Fullscreen { get; set; } /// /// Whether the window can be put into fullscreen mode. On macOS, also whether the /// maximize/zoom button should toggle full screen mode or maximize window.Default /// is true. /// - public bool Fullscreenable { get; set; } + public bool? Fullscreenable { get; set; } /// /// Whether to show the window in taskbar. Default is false. /// - public bool SkipTaskbar { get; set; } + public bool? SkipTaskbar { get; set; } /// /// The kiosk mode. Default is false. /// - public bool Kiosk { get; set; } + public bool? Kiosk { get; set; } /// /// Default window title. Default is "Electron.NET". @@ -145,40 +146,40 @@ public class BrowserWindowOptions /// Whether window should be shown when created. Default is true. /// [DefaultValue(true)] - public bool Show { get; set; } = true; + public bool? Show { get; set; } = true; /// /// Specify false to create a . Default is true. /// [DefaultValue(true)] - public bool Frame { get; set; } = true; + public bool? Frame { get; set; } = true; /// /// Whether this is a modal window. This only works when the window is a child /// window.Default is false. /// - public bool Modal { get; set; } + public bool? Modal { get; set; } /// /// Whether the web view accepts a single mouse-down event that simultaneously /// activates the window.Default is false. /// - public bool AcceptFirstMouse { get; set; } + public bool? AcceptFirstMouse { get; set; } /// /// Whether to hide cursor when typing. Default is false. /// - public bool DisableAutoHideCursor { get; set; } + public bool? DisableAutoHideCursor { get; set; } /// /// Auto hide the menu bar unless the Alt key is pressed. Default is false. /// - public bool AutoHideMenuBar { get; set; } + public bool? AutoHideMenuBar { get; set; } /// /// Enable the window to be resized larger than screen. Default is false. /// - public bool EnableLargerThanScreen { get; set; } + public bool? EnableLargerThanScreen { get; set; } /// /// Window's background color as Hexadecimal value, like #66CD00 or #FFF or @@ -190,18 +191,18 @@ public class BrowserWindowOptions /// Whether window should have a shadow. This is only implemented on macOS. Default /// is true. /// - public bool HasShadow { get; set; } + public bool? HasShadow { get; set; } /// /// Forces using dark theme for the window, only works on some GTK+3 desktop /// environments.Default is false. /// - public bool DarkTheme { get; set; } + public bool? DarkTheme { get; set; } /// /// Makes the window . Default is false. /// - public bool Transparent { get; set; } + public bool? Transparent { get; set; } /// /// The type of window, default is normal window. @@ -213,13 +214,21 @@ public class BrowserWindowOptions /// 'default' | 'hidden' | 'hiddenInset' | 'customButtonsOnHover' /// [JsonConverter(typeof(StringEnumConverter))] - public TitleBarStyle TitleBarStyle { get; set; } + public TitleBarStyle? TitleBarStyle { get; set; } /// /// Shows the title in the tile bar in full screen mode on macOS for all /// titleBarStyle options.Default is false. /// - public bool FullscreenWindowTitle { get; set; } + public bool? FullscreenWindowTitle { get; set; } + + /// + /// Activate the Window Controls Overlay on Windows, when combined with = + /// + [SupportedOSPlatform("win")] + [SupportedOSPlatform("macos")] + [DefaultValue(null)] + public TitleBarOverlayConfig TitleBarOverlay { get; set; } /// /// Use WS_THICKFRAME style for frameless windows on Windows, which adds standard @@ -227,7 +236,7 @@ public class BrowserWindowOptions /// animations. Default is true. /// [DefaultValue(true)] - public bool ThickFrame { get; set; } = true; + public bool? ThickFrame { get; set; } = true; /// /// Add a type of vibrancy effect to the window, only on macOS. Can be @@ -235,7 +244,7 @@ public class BrowserWindowOptions /// medium-light or ultra-dark. /// [JsonConverter(typeof(StringEnumConverter))] - public Vibrancy Vibrancy { get; set; } + public Vibrancy? Vibrancy { get; set; } /// /// Controls the behavior on macOS when option-clicking the green stoplight button @@ -244,7 +253,7 @@ public class BrowserWindowOptions /// it to zoom to the width of the screen.This will also affect the behavior when /// calling maximize() directly.Default is false. /// - public bool ZoomToPageWidth { get; set; } + public bool? ZoomToPageWidth { get; set; } /// /// Tab group name, allows opening the window as a native tab on macOS 10.12+. @@ -270,5 +279,14 @@ public class BrowserWindowOptions /// These will only be used if the Proxy field is also set. /// public string ProxyCredentials { get; set; } + + + /// + /// Set a custom position for the traffic light buttons in frameless windows. + /// + + [DefaultValue(null)] + [SupportedOSPlatform("macos")] + public Point TrafficLightPosition { get; set; } } } diff --git a/ElectronNET.API/Entities/CookieChangedCause.cs b/ElectronNET.API/Entities/CookieChangedCause.cs index d42430da..f48c8f91 100644 --- a/ElectronNET.API/Entities/CookieChangedCause.cs +++ b/ElectronNET.API/Entities/CookieChangedCause.cs @@ -1,7 +1,9 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace ElectronNET.API.Entities { +namespace ElectronNET.API.Entities +{ + /// /// The cause of the change /// diff --git a/ElectronNET.API/Entities/CookieRemovedResponse.cs b/ElectronNET.API/Entities/CookieRemovedResponse.cs new file mode 100644 index 00000000..88dece6f --- /dev/null +++ b/ElectronNET.API/Entities/CookieRemovedResponse.cs @@ -0,0 +1,10 @@ +namespace ElectronNET.API.Entities +{ + public class CookieRemovedResponse + { + public Cookie cookie {get;set;} + + public CookieChangedCause cause { get; set; } + public bool removed { get; set; } + } +} \ No newline at end of file diff --git a/ElectronNET.API/Entities/Data.cs b/ElectronNET.API/Entities/Data.cs index 2dcca894..eb27e864 100644 --- a/ElectronNET.API/Entities/Data.cs +++ b/ElectronNET.API/Entities/Data.cs @@ -34,5 +34,7 @@ public class Data /// The title of the url at text. /// public string Bookmark { get; set; } + + public NativeImage? Image { get; set; } } } \ No newline at end of file diff --git a/ElectronNET.API/Entities/DesktopCapturerSource.cs b/ElectronNET.API/Entities/DesktopCapturerSource.cs new file mode 100644 index 00000000..c08dbb90 --- /dev/null +++ b/ElectronNET.API/Entities/DesktopCapturerSource.cs @@ -0,0 +1,15 @@ +using Newtonsoft.Json; + +namespace ElectronNET.API.Entities +{ + public sealed class DesktopCapturerSource + { + public string Id { get; set; } + public string Name { get; set; } + public NativeImage Thumbnail { get; set; } + + [JsonProperty("display_id")] + public string DisplayId { get; set; } + public NativeImage AppIcon { get; set; } + } +} \ No newline at end of file diff --git a/ElectronNET.API/Entities/Display.cs b/ElectronNET.API/Entities/Display.cs index cdf9ac87..4d8cceb4 100644 --- a/ElectronNET.API/Entities/Display.cs +++ b/ElectronNET.API/Entities/Display.cs @@ -1,5 +1,10 @@ namespace ElectronNET.API.Entities { + public class DisplayChanged + { + public Display display { get; set; } + public string[] metrics { get; set; } + } /// /// /// @@ -21,12 +26,12 @@ public class Display /// /// Can be 0, 90, 180, 270, represents screen rotation in clock-wise degrees. /// - public int Rotation { get; set; } + public float Rotation { get; set; } /// /// Output device's pixel scale factor. /// - public int ScaleFactor { get; set; } + public float ScaleFactor { get; set; } /// /// Gets or sets the size. diff --git a/ElectronNET.API/Entities/JumpListSettings.cs b/ElectronNET.API/Entities/JumpListSettings.cs index 82184ed1..dbd657a1 100644 --- a/ElectronNET.API/Entities/JumpListSettings.cs +++ b/ElectronNET.API/Entities/JumpListSettings.cs @@ -1,8 +1,7 @@ -namespace ElectronNET.API.Entities +using System; + +namespace ElectronNET.API.Entities { - /// - /// - /// public class JumpListSettings { /// @@ -16,6 +15,6 @@ public class JumpListSettings /// in the Jump List. These items must not be re-added to the Jump List in the next call to , Windows will /// not display any custom category that contains any of the removed items. /// - public JumpListItem[] RemovedItems { get; set; } = new JumpListItem[0]; + public JumpListItem[] RemovedItems { get; set; } = Array.Empty(); } } \ No newline at end of file diff --git a/ElectronNET.API/Entities/MessageBoxResult.cs b/ElectronNET.API/Entities/MessageBoxResult.cs index 835c292c..8910dff1 100644 --- a/ElectronNET.API/Entities/MessageBoxResult.cs +++ b/ElectronNET.API/Entities/MessageBoxResult.cs @@ -1,5 +1,11 @@ namespace ElectronNET.API.Entities { + internal class MessageBoxResponse + { + public int response { get; set; } + public bool @checked { get; set; } + } + /// /// /// diff --git a/ElectronNET.API/Entities/NativeImage.cs b/ElectronNET.API/Entities/NativeImage.cs index e1066bed..97d181d0 100644 --- a/ElectronNET.API/Entities/NativeImage.cs +++ b/ElectronNET.API/Entities/NativeImage.cs @@ -16,10 +16,10 @@ namespace ElectronNET.API.Entities [JsonConverter(typeof(NativeImageJsonConverter))] public class NativeImage { - private readonly Dictionary _images = new Dictionary(); + private readonly Dictionary _images = new(); private bool _isTemplateImage; - private static readonly Dictionary ScaleFactorPairs = new Dictionary + private static readonly Dictionary ScaleFactorPairs = new() { {"@2x", 2.0f}, {"@3x", 3.0f}, {"@1x", 1.0f}, {"@4x", 4.0f}, {"@5x", 5.0f}, {"@1.25x", 1.25f}, {"@1.33x", 1.33f}, {"@1.4x", 1.4f}, @@ -434,7 +434,7 @@ internal Dictionary GetAllScaledImages() } catch (Exception ex) { - Console.WriteLine(ex); + Console.WriteLine("Error getting scaled images " + ex.Message); } return dict; diff --git a/ElectronNET.API/Entities/NativeImageJsonConverter.cs b/ElectronNET.API/Entities/NativeImageJsonConverter.cs index a82c38ec..9a2e4e5c 100644 --- a/ElectronNET.API/Entities/NativeImageJsonConverter.cs +++ b/ElectronNET.API/Entities/NativeImageJsonConverter.cs @@ -19,12 +19,15 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { - var dict = serializer.Deserialize>(reader); + var dict = serializer.Deserialize>(reader); var newDictionary = new Dictionary(); foreach (var item in dict) { - var bytes = Convert.FromBase64String(item.Value); - newDictionary.Add(item.Key, Image.FromStream(new MemoryStream(bytes))); + if (float.TryParse(item.Key, out var size)) + { + var bytes = Convert.FromBase64String(item.Value); + newDictionary.Add(size, Image.FromStream(new MemoryStream(bytes))); + } } return new NativeImage(newDictionary); } diff --git a/ElectronNET.API/Entities/NotificationAction.cs b/ElectronNET.API/Entities/NotificationAction.cs index c7194cd0..6dd4fa97 100644 --- a/ElectronNET.API/Entities/NotificationAction.cs +++ b/ElectronNET.API/Entities/NotificationAction.cs @@ -1,8 +1,11 @@ -namespace ElectronNET.API.Entities +using System.Runtime.Versioning; + +namespace ElectronNET.API.Entities { /// /// /// + [SupportedOSPlatform("macos")] public class NotificationAction { /// diff --git a/ElectronNET.API/Entities/NotificationOptions.cs b/ElectronNET.API/Entities/NotificationOptions.cs index d1913798..53478220 100644 --- a/ElectronNET.API/Entities/NotificationOptions.cs +++ b/ElectronNET.API/Entities/NotificationOptions.cs @@ -1,5 +1,6 @@ using Newtonsoft.Json; using System; +using System.Runtime.Versioning; namespace ElectronNET.API.Entities { @@ -17,6 +18,8 @@ public class NotificationOptions /// /// A subtitle for the notification, which will be displayed below the title. /// + [SupportedOSPlatform("macos")] + public string SubTitle { get; set; } /// @@ -38,38 +41,46 @@ public class NotificationOptions /// /// Whether or not to add an inline reply option to the notification. /// + [SupportedOSPlatform("macos")] public bool HasReply { get; set; } /// /// The timeout duration of the notification. Can be 'default' or 'never'. /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("linux")] public string TimeoutType { get; set; } /// /// The placeholder to write in the inline reply input field. /// + [SupportedOSPlatform("macos")] public string ReplyPlaceholder { get; set; } /// /// The name of the sound file to play when the notification is shown. /// + [SupportedOSPlatform("macos")] public string Sound { get; set; } /// /// The urgency level of the notification. Can be 'normal', 'critical', or 'low'. /// + [SupportedOSPlatform("linux")] public string Urgency { get; set; } /// /// Actions to add to the notification. Please read the available actions and /// limitations in the NotificationAction documentation. /// + [SupportedOSPlatform("macos")] public NotificationAction Actions { get; set; } /// /// A custom title for the close button of an alert. An empty string will cause the /// default localized text to be used. /// + [SupportedOSPlatform("macos")] public string CloseButtonText { get; set; } /// @@ -127,6 +138,7 @@ public class NotificationOptions /// The string the user entered into the inline reply field /// [JsonIgnore] + [SupportedOSPlatform("macos")] public Action OnReply { get; set; } /// @@ -142,6 +154,7 @@ public class NotificationOptions /// macOS only - The index of the action that was activated /// [JsonIgnore] + [SupportedOSPlatform("macos")] public Action OnAction { get; set; } /// diff --git a/ElectronNET.API/Entities/OpenDialogOptions.cs b/ElectronNET.API/Entities/OpenDialogOptions.cs index 3f18dffd..76b58a81 100644 --- a/ElectronNET.API/Entities/OpenDialogOptions.cs +++ b/ElectronNET.API/Entities/OpenDialogOptions.cs @@ -1,5 +1,6 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; +using System.Runtime.Versioning; namespace ElectronNET.API.Entities { @@ -39,6 +40,7 @@ public class OpenDialogOptions /// /// Message to display above input boxes. /// + [SupportedOSPlatform("macos")] public string Message { get; set; } /// diff --git a/ElectronNET.API/Entities/OpenDialogProperty.cs b/ElectronNET.API/Entities/OpenDialogProperty.cs index 44a16b15..ec47dad0 100644 --- a/ElectronNET.API/Entities/OpenDialogProperty.cs +++ b/ElectronNET.API/Entities/OpenDialogProperty.cs @@ -1,4 +1,6 @@ -namespace ElectronNET.API.Entities +using System.Runtime.Versioning; + +namespace ElectronNET.API.Entities { /// /// @@ -28,21 +30,66 @@ public enum OpenDialogProperty /// /// The create directory /// + [SupportedOSPlatform("macos")] createDirectory, /// /// The prompt to create /// + [SupportedOSPlatform("windows")] promptToCreate, /// /// The no resolve aliases /// + [SupportedOSPlatform("macos")] noResolveAliases, /// - /// The treat package as directory + /// Treat packages, such as .app folders, as a directory instead of a file. + /// + [SupportedOSPlatform("macos")] + treatPackageAsDirectory, + + /// + /// Don't add the item being opened to recent documents list + /// + [SupportedOSPlatform("windows")] + dontAddToRecent + } + + /// + /// + /// + public enum SaveDialogProperty + { + /// + /// The show hidden files + /// + showHiddenFiles, + + /// + /// The create directory + /// + [SupportedOSPlatform("macos")] + createDirectory, + + /// + /// Treat packages, such as .app folders, as a directory instead of a file. + /// + [SupportedOSPlatform("macos")] + treatPackageAsDirectory, + + /// + /// Sets whether the user will be presented a confirmation dialog if the user types a file name that already exists. + /// + [SupportedOSPlatform("linux")] + showOverwriteConfirmation, + + /// + /// Don't add the item being opened to recent documents list /// - treatPackageAsDirectory + [SupportedOSPlatform("windows")] + dontAddToRecent } } \ No newline at end of file diff --git a/ElectronNET.API/Entities/OpenExternalOptions.cs b/ElectronNET.API/Entities/OpenExternalOptions.cs index dba51ca4..d913593f 100644 --- a/ElectronNET.API/Entities/OpenExternalOptions.cs +++ b/ElectronNET.API/Entities/OpenExternalOptions.cs @@ -1,5 +1,6 @@ using System; using System.ComponentModel; +using System.Runtime.Versioning; namespace ElectronNET.API.Entities { @@ -12,11 +13,13 @@ public class OpenExternalOptions /// to bring the opened application to the foreground. The default is . /// [DefaultValue(true)] + [SupportedOSPlatform("macos")] public bool Activate { get; set; } = true; /// /// The working directory. /// + [SupportedOSPlatform("windows")] public string WorkingDirectory { get; set; } } } \ No newline at end of file diff --git a/ElectronNET.API/Entities/SaveDialogOptions.cs b/ElectronNET.API/Entities/SaveDialogOptions.cs index 16811d70..2e7ed4ea 100644 --- a/ElectronNET.API/Entities/SaveDialogOptions.cs +++ b/ElectronNET.API/Entities/SaveDialogOptions.cs @@ -1,4 +1,7 @@ using ElectronNET.API.Entities; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.Runtime.Versioning; namespace ElectronNET.API { @@ -46,16 +49,26 @@ public class SaveDialogOptions /// /// Message to display above text fields. /// + [SupportedOSPlatform("macos")] public string Message { get; set; } /// /// Custom label for the text displayed in front of the filename text field. /// + [SupportedOSPlatform("macos")] public string NameFieldLabel { get; set; } /// /// Show the tags input box, defaults to true. /// + [SupportedOSPlatform("macos")] public bool ShowsTagField { get; set; } + + /// + /// Contains which features the dialog should use. The following values are supported: + /// 'openFile' | 'openDirectory' | 'multiSelections' | 'showHiddenFiles' | 'createDirectory' | 'promptToCreate' | 'noResolveAliases' | 'treatPackageAsDirectory' + /// + [JsonProperty("properties", ItemConverterType = typeof(StringEnumConverter))] + public SaveDialogProperty[] Properties { get; set; } } } \ No newline at end of file diff --git a/ElectronNET.API/Entities/SecondInstanceResponse.cs b/ElectronNET.API/Entities/SecondInstanceResponse.cs new file mode 100644 index 00000000..de3e2eca --- /dev/null +++ b/ElectronNET.API/Entities/SecondInstanceResponse.cs @@ -0,0 +1,9 @@ +namespace ElectronNET.API.Entities +{ + public class SecondInstanceResponse + { + public string[] args { get; set; } + + public string workingDirectory { get;set;} + } +} \ No newline at end of file diff --git a/ElectronNET.API/Entities/SourcesOption.cs b/ElectronNET.API/Entities/SourcesOption.cs new file mode 100644 index 00000000..f6bcac4f --- /dev/null +++ b/ElectronNET.API/Entities/SourcesOption.cs @@ -0,0 +1,9 @@ +namespace ElectronNET.API.Entities +{ + public sealed class SourcesOption + { + public string[] Types { get; set; } + public Size ThumbnailSize { get; set; } + public bool FetchWindowIcons { get; set; } + } +} \ No newline at end of file diff --git a/ElectronNET.API/Entities/TitleBarStyle.cs b/ElectronNET.API/Entities/TitleBarStyle.cs index 8fb108ec..a166b994 100644 --- a/ElectronNET.API/Entities/TitleBarStyle.cs +++ b/ElectronNET.API/Entities/TitleBarStyle.cs @@ -28,4 +28,11 @@ public enum TitleBarStyle /// customButtonsOnHover } + + public class TitleBarOverlayConfig + { + public string color { get; set; } + public string symbolColor { get; set; } + public int height { get; set; } + } } \ No newline at end of file diff --git a/ElectronNET.API/Entities/TrayClickEventArgs.cs b/ElectronNET.API/Entities/TrayClickEventArgs.cs index 516e192a..ca3a4449 100644 --- a/ElectronNET.API/Entities/TrayClickEventArgs.cs +++ b/ElectronNET.API/Entities/TrayClickEventArgs.cs @@ -1,5 +1,6 @@ namespace ElectronNET.API { + /// /// /// diff --git a/ElectronNET.API/Entities/TrayClickEventResponse.cs b/ElectronNET.API/Entities/TrayClickEventResponse.cs new file mode 100644 index 00000000..e0a51703 --- /dev/null +++ b/ElectronNET.API/Entities/TrayClickEventResponse.cs @@ -0,0 +1,8 @@ +namespace ElectronNET.API.Entities +{ + public class TrayClickEventResponse + { + public TrayClickEventArgs eventArgs { get; set; } + public Rectangle bounds { get; set; } + } +} \ No newline at end of file diff --git a/ElectronNET.API/Entities/UpdateInfo.cs b/ElectronNET.API/Entities/UpdateInfo.cs index 5b33bf0b..8acc0bc0 100644 --- a/ElectronNET.API/Entities/UpdateInfo.cs +++ b/ElectronNET.API/Entities/UpdateInfo.cs @@ -1,4 +1,6 @@ -namespace ElectronNET.API.Entities +using System; + +namespace ElectronNET.API.Entities { /// /// @@ -13,7 +15,7 @@ public class UpdateInfo /// /// /// - public UpdateFileInfo[] Files { get; set; } = new UpdateFileInfo[0]; + public UpdateFileInfo[] Files { get; set; } = Array.Empty(); /// /// The release name. @@ -23,7 +25,7 @@ public class UpdateInfo /// /// The release notes. /// - public ReleaseNoteInfo[] ReleaseNotes { get; set; } = new ReleaseNoteInfo[0]; + public string ReleaseNotes { get; set; } /// /// diff --git a/ElectronNET.API/Entities/Vibrancy.cs b/ElectronNET.API/Entities/Vibrancy.cs index 2e8bec85..b496abc8 100644 --- a/ElectronNET.API/Entities/Vibrancy.cs +++ b/ElectronNET.API/Entities/Vibrancy.cs @@ -1,4 +1,5 @@ -using System.Runtime.Serialization; +using System.Runtime.Serialization; +using System; namespace ElectronNET.API.Entities { @@ -11,16 +12,19 @@ public enum Vibrancy /// The appearance based /// [EnumMember(Value = "appearance-based")] + [Obsolete("Removed in macOS Catalina (10.15).")] appearanceBased, /// /// The light /// + [Obsolete("Removed in macOS Catalina (10.15).")] light, /// /// The dark /// + [Obsolete("Removed in macOS Catalina (10.15).")] dark, /// @@ -52,12 +56,38 @@ public enum Vibrancy /// The medium light /// [EnumMember(Value = "medium-light")] + [Obsolete("Removed in macOS Catalina (10.15).")] mediumLight, /// /// The ultra dark /// [EnumMember(Value = "ultra-dark")] - ultraDark + [Obsolete("Removed in macOS Catalina (10.15).")] + ultraDark, + + header, + + sheet, + + window, + + hud, + + [EnumMember(Value = "fullscreen-ui")] + fullscreenUI, + + tooltip, + + content, + + [EnumMember(Value = "under-window")] + underWindow, + + [EnumMember(Value = "under-page")] + underPage + + + } -} \ No newline at end of file +} diff --git a/ElectronNET.API/Entities/WebPreferences.cs b/ElectronNET.API/Entities/WebPreferences.cs index 382de6aa..294d57d5 100644 --- a/ElectronNET.API/Entities/WebPreferences.cs +++ b/ElectronNET.API/Entities/WebPreferences.cs @@ -15,10 +15,10 @@ public class WebPreferences public bool DevTools { get; set; } = true; /// - /// Whether node integration is enabled. Required to enable IPC. Default is true. + /// Whether node integration is enabled. Required to enable IPC. Default is false. /// - [DefaultValue(true)] - public bool NodeIntegration { get; set; } = true; + [DefaultValue(false)] + public bool NodeIntegration { get; set; } = false; /// /// Whether node integration is enabled in web workers. Default is false. @@ -171,6 +171,12 @@ public class WebPreferences /// public bool Offscreen { get; set; } + /// + /// Whether to enable built-in spellcheck + /// + [DefaultValue(true)] + public bool Spellcheck { get; set; } = true; + /// /// Whether to run Electron APIs and the specified preload script in a separate /// JavaScript context. Defaults to false. The context that the preload script runs @@ -184,9 +190,10 @@ public class WebPreferences /// can access this context in the dev tools by selecting the 'Electron Isolated /// Context' entry in the combo box at the top of the Console tab. This option is /// currently experimental and may change or be removed in future Electron releases. + /// Default value is true. /// - [DefaultValue(false)] - public bool ContextIsolation { get; set; } = false; + [DefaultValue(true)] + public bool ContextIsolation { get; set; } = true; /// /// Whether to use native window.open(). Defaults to false. This option is currently experimental. @@ -208,9 +215,9 @@ public class WebPreferences public bool WebviewTag { get; set; } = false; /// - /// Whether to enable the remote module. Defaults to false. + /// Make the web view transparent /// [DefaultValue(false)] - public bool EnableRemoteModule { get; set; } = false; + public bool Transparent { get; set; } = false; } } \ No newline at end of file diff --git a/ElectronNET.API/Events.cs b/ElectronNET.API/Events.cs index 803e0dd4..5345679c 100644 --- a/ElectronNET.API/Events.cs +++ b/ElectronNET.API/Events.cs @@ -1,7 +1,6 @@ using System; using System.Globalization; using Microsoft.AspNetCore.SignalR; -using Quobject.EngineIoClientDotNet.ComponentEmitter; namespace ElectronNET.API { @@ -11,8 +10,8 @@ namespace ElectronNET.API internal class Events { private static Events _events; - private static object _syncRoot = new object(); - private TextInfo _ti = new CultureInfo("en-US", false).TextInfo; + private static readonly object _syncRoot = new(); + private readonly TextInfo _ti = new CultureInfo("en-US", false).TextInfo; private Events() { @@ -43,17 +42,8 @@ public static Events Instance /// The name of the module, e.g. app, dock, etc... /// The name of the event /// The event handler - public void On(string moduleName, string eventName, Action fn) - => On(moduleName, eventName, new ListenerImpl(fn)); + public void On(string moduleName, string eventName, Action fn) => On(moduleName, eventName, _ => fn()); - /// - /// Subscribe to an unmapped electron event. - /// - /// The name of the module, e.g. app, dock, etc... - /// The name of the event - /// The event handler - public void On(string moduleName, string eventName, Action fn) - => On(moduleName, eventName, new ListenerImpl(fn)); /// /// Subscribe to an unmapped electron event. @@ -61,7 +51,7 @@ public void On(string moduleName, string eventName, Action fn) /// The name of the module, e.g. app, dock, etc... /// The name of the event /// The event handler - private async void On(string moduleName, string eventName, IListener fn) + public async void On(string moduleName, string eventName, Action fn) { var listener = $"{moduleName}{_ti.ToTitleCase(eventName)}Completed"; var subscriber = $"register-{moduleName}-on-event"; @@ -74,17 +64,7 @@ private async void On(string moduleName, string eventName, IListener fn) /// The name of the module, e.g. app, dock, etc... /// The name of the event /// The event handler - public void Once(string moduleName, string eventName, Action fn) - => Once(moduleName, eventName, new ListenerImpl(fn)); - - /// - /// Subscribe to an unmapped electron event. - /// - /// The name of the module, e.g. app, dock, etc... - /// The name of the event - /// The event handler - public void Once(string moduleName, string eventName, Action fn) - => Once(moduleName, eventName, new ListenerImpl(fn)); + public void Once(string moduleName, string eventName, Action fn) => Once(moduleName, eventName, _ => fn()); /// /// Subscribe to an unmapped electron event. @@ -92,7 +72,7 @@ public void Once(string moduleName, string eventName, Action fn) /// The name of the module, e.g. app, dock, etc... /// The name of the event /// The event handler - private async void Once(string moduleName, string eventName, IListener fn) + public async void Once(string moduleName, string eventName, Action fn) { var listener = $"{moduleName}{_ti.ToTitleCase(eventName)}Completed"; var subscriber = $"register-{moduleName}-once-event"; diff --git a/ElectronNET.API/Extensions/EnumExtensions.cs b/ElectronNET.API/Extensions/EnumExtensions.cs index 4424310e..949c1fcd 100644 --- a/ElectronNET.API/Extensions/EnumExtensions.cs +++ b/ElectronNET.API/Extensions/EnumExtensions.cs @@ -11,7 +11,7 @@ public static string GetDescription(this T enumerationValue) where T : struct Type type = enumerationValue.GetType(); if (!type.IsEnum) { - throw new ArgumentException("EnumerationValue must be of Enum type", "enumerationValue"); + throw new ArgumentException("EnumerationValue must be of Enum type", nameof(enumerationValue)); } //Tries to find a DescriptionAttribute for a potential friendly name diff --git a/ElectronNET.API/Extensions/MenuItemExtensions.cs b/ElectronNET.API/Extensions/MenuItemExtensions.cs index 37a5b9cb..44678a29 100644 --- a/ElectronNET.API/Extensions/MenuItemExtensions.cs +++ b/ElectronNET.API/Extensions/MenuItemExtensions.cs @@ -28,7 +28,7 @@ public static MenuItem[] AddMenuItemsId(this MenuItem[] menuItems) public static MenuItem GetMenuItem(this List menuItems, string id) { - MenuItem result = new MenuItem(); + MenuItem result = new(); foreach (var item in menuItems) { diff --git a/ElectronNET.API/Extensions/ThumbarButtonExtensions.cs b/ElectronNET.API/Extensions/ThumbarButtonExtensions.cs index 3b155546..4d510053 100644 --- a/ElectronNET.API/Extensions/ThumbarButtonExtensions.cs +++ b/ElectronNET.API/Extensions/ThumbarButtonExtensions.cs @@ -23,7 +23,7 @@ public static ThumbarButton[] AddThumbarButtonsId(this ThumbarButton[] thumbarBu public static ThumbarButton GetThumbarButton(this List thumbarButtons, string id) { - ThumbarButton result = new ThumbarButton(""); + ThumbarButton result = new(""); foreach (var item in thumbarButtons) { diff --git a/ElectronNET.API/GlobalShortcut.cs b/ElectronNET.API/GlobalShortcut.cs index 19b908b0..e408d67a 100644 --- a/ElectronNET.API/GlobalShortcut.cs +++ b/ElectronNET.API/GlobalShortcut.cs @@ -11,7 +11,7 @@ namespace ElectronNET.API public sealed class GlobalShortcut { private static GlobalShortcut _globalShortcut; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal GlobalShortcut() { } diff --git a/ElectronNET.API/HostHook.cs b/ElectronNET.API/HostHook.cs index 57eb09c3..314e419a 100644 --- a/ElectronNET.API/HostHook.cs +++ b/ElectronNET.API/HostHook.cs @@ -17,8 +17,8 @@ namespace ElectronNET.API public sealed class HostHook { private static HostHook _electronHostHook; - private static object _syncRoot = new object(); - string oneCallguid = Guid.NewGuid().ToString(); + private static readonly object _syncRoot = new(); + readonly string oneCallguid = Guid.NewGuid().ToString(); internal HostHook() { } @@ -42,8 +42,8 @@ internal static HostHook Instance } // ToDo: Need reimplementation - /* + /// /// Execute native JavaScript/TypeScript code. /// @@ -51,13 +51,13 @@ internal static HostHook Instance /// Optional parameters. public void Call(string socketEventName, params dynamic[] arguments) { - BridgeConnector.Socket.On(socketEventName + "Error" + oneCallguid, (result) => + BridgeConnector.On(socketEventName + "Error" + oneCallguid, (result) => { - BridgeConnector.Socket.Off(socketEventName + "Error" + oneCallguid); - Electron.Dialog.ShowErrorBox("Host Hook Exception", result.ToString()); + BridgeConnector.Off(socketEventName + "Error" + oneCallguid); + Electron.Dialog.ShowErrorBox("Host Hook Exception", result); }); - BridgeConnector.Socket.Emit(socketEventName, arguments, oneCallguid); + BridgeConnector.Emit(socketEventName, arguments, oneCallguid); } /// @@ -69,59 +69,27 @@ public void Call(string socketEventName, params dynamic[] arguments) /// public Task CallAsync(string socketEventName, params dynamic[] arguments) { - var taskCompletionSource = new TaskCompletionSource(); + var taskCompletionSource = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); string guid = Guid.NewGuid().ToString(); - BridgeConnector.Socket.On(socketEventName + "Error" + guid, (result) => + BridgeConnector.On(socketEventName + "Error" + guid, (result) => { - BridgeConnector.Socket.Off(socketEventName + "Error" + guid); - Electron.Dialog.ShowErrorBox("Host Hook Exception", result.ToString()); + BridgeConnector.Off(socketEventName + "Error" + guid); + Electron.Dialog.ShowErrorBox("Host Hook Exception", result); taskCompletionSource.SetException(new Exception($"Host Hook Exception {result}")); }); - BridgeConnector.Socket.On(socketEventName + "Complete" + guid, (result) => + BridgeConnector.On(socketEventName + "Complete" + guid, (result) => { - BridgeConnector.Socket.Off(socketEventName + "Error" + guid); - BridgeConnector.Socket.Off(socketEventName + "Complete" + guid); - T data = default; - - try - { - if (result.GetType().IsValueType || result is string) - { - data = (T)result; - } - else - { - var token = JToken.Parse(result.ToString()); - if (token is JArray) - { - data = token.ToObject(); - } - else if (token is JObject) - { - data = token.ToObject(); - } - else - { - data = (T)result; - } - } - } - catch (Exception exception) - { - taskCompletionSource.SetException(exception); - //throw new InvalidCastException("Return value does not match with the generic type.", exception); - } - - taskCompletionSource.SetResult(data); + BridgeConnector.Off(socketEventName + "Error" + guid); + BridgeConnector.Off(socketEventName + "Complete" + guid); + taskCompletionSource.SetResult(result); }); - BridgeConnector.Socket.Emit(socketEventName, arguments, guid); + BridgeConnector.Emit(socketEventName, arguments, guid); return taskCompletionSource.Task; } - private JsonSerializer _jsonSerializer = new JsonSerializer() { ContractResolver = new CamelCasePropertyNamesContractResolver(), diff --git a/ElectronNET.API/Hubs/HubElectron.cs b/ElectronNET.API/Hubs/HubElectron.cs index 5d7d3481..6c753fbd 100644 --- a/ElectronNET.API/Hubs/HubElectron.cs +++ b/ElectronNET.API/Hubs/HubElectron.cs @@ -24,12 +24,26 @@ public class SignalrResponse public JArray Value { get; set; } = null; } + public class SignalrResponseJObject + { + public string Channel { get; set; } = null; + public JObject Value { get; set; } = null; + } + + public class ArgsAndIds + { + public int id { get; set; } + public int wcId { get; set; } + public object[] args { get; set; } + } + public async Task SendMessage(string user) { await Clients.All.SendAsync("ReceiveMessage", user); } public static readonly ObservableCollection SignalrObservedJArray = new ObservableCollection(); + public static readonly ObservableCollection SignalrObservedJObject = new ObservableCollection(); public static readonly ConcurrentDictionary> ClientResponsesString = new ConcurrentDictionary>(); public static readonly ConcurrentDictionary> ClientResponsesInt = new ConcurrentDictionary>(); @@ -130,6 +144,16 @@ public void SendClientResponseJArray(string guidString, JArray response) #region App + public void AppWindowActivate() + { + Electron.App.TriggerOnActivate(); + } + + public void AppActivateFromSecondInstance(string[] args) + { + Electron.App.TriggerOnAppActivateFromSecondInstance(args); + } + public void AppWindowAllClosed(int id) { // We invoke this hub always because we dont know if it's started independent from electron @@ -569,6 +593,19 @@ public void IpcOnChannel(string channel, JArray args) HubElectron.SignalrObservedJArray.Add(signalrResponse); } + public void IpcMainChannelWithId(string channel, JObject args) + { + foreach (var item in HubElectron.SignalrObservedJObject.Where(x => x.Channel == channel).ToList()) + { + HubElectron.SignalrObservedJObject.Remove(item); + } + + SignalrResponseJObject signalrResponse = new SignalrResponseJObject(); + signalrResponse.Channel = channel; + signalrResponse.Value = args; + HubElectron.SignalrObservedJObject.Add(signalrResponse); + } + #endregion #region Screen @@ -653,7 +690,13 @@ public void WebContentOnDidFinishLoad(int id) } #endregion - + #region WindowManager + public void BootstrapUpdateOpenIDsEvent(int[] id) + { + WindowManager.Instance.TriggerOnBootstrapUpdateOpenIDsEvent(id); + } + #endregion + public override async Task OnConnectedAsync() { diff --git a/ElectronNET.API/IpcMain.cs b/ElectronNET.API/IpcMain.cs index a60ae8dc..0e2c6082 100644 --- a/ElectronNET.API/IpcMain.cs +++ b/ElectronNET.API/IpcMain.cs @@ -20,7 +20,7 @@ namespace ElectronNET.API public sealed class IpcMain { private static IpcMain _ipcMain; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal IpcMain() { } @@ -77,6 +77,57 @@ public async void On(string channel, Action listener) } } }); + + } + + /// + /// Listens to channel, when a new message arrives listener would be called with + /// listener(event, args...). This listner will keep the window event sender id + /// + /// Channelname. + /// Callback Method. + public async void OnWithId(string channel, Action<(int browserId, int webContentId, object arguments)> listener) + { + await Electron.SignalrElectron.Clients.All.SendAsync("registerIpcMainChannelWithId", channel); + + Observable.FromEventPattern(HubElectron.SignalrObservedJObject, "CollectionChanged") + .ObserveOn(RxApp.MainThreadScheduler) + .SubscribeOn(RxApp.TaskpoolScheduler) + .Subscribe(x => { + if (x.EventArgs.NewItems != null) + { + foreach (HubElectron.SignalrResponseJObject entry in x.EventArgs.NewItems) + { + //ArgsAndIds signalrResponse = ((JObject)args).ToObject(); + if (entry.Channel == channel && entry.Value != null) + { + var signalrResponse = ((JObject)entry.Value).ToObject(); + List objectArray = FormatArgumentsIds(signalrResponse.args); + + if (objectArray.Count == 1) + { + listener((signalrResponse.id, signalrResponse.wcId, objectArray.First())); + } + else + { + listener((signalrResponse.id, signalrResponse.wcId, objectArray)); + } + } + } + } + }); + } + + private class ArgsAndIds + { + public int id { get; set; } + public int wcId { get; set; } + public object[] args { get; set; } + } + + private List FormatArgumentsIds(object[] objectArray) + { + return objectArray.Where(o => o is object).ToList(); } private List FormatArguments(object args) @@ -185,19 +236,21 @@ public void Send(BrowserWindow browserWindow, string channel, params object[] da foreach (var parameterObject in data) { - if(parameterObject.GetType().IsArray || parameterObject.GetType().IsGenericType && parameterObject is IEnumerable) + if (parameterObject.GetType().IsArray || parameterObject.GetType().IsGenericType && parameterObject is IEnumerable) { jarrays.Add(JArray.FromObject(parameterObject, _jsonSerializer)); - } else if(parameterObject.GetType().IsClass && !parameterObject.GetType().IsPrimitive && !(parameterObject is string)) + } + else if (parameterObject.GetType().IsClass && !parameterObject.GetType().IsPrimitive && !(parameterObject is string)) { jobjects.Add(JObject.FromObject(parameterObject, _jsonSerializer)); - } else if(parameterObject.GetType().IsPrimitive || (parameterObject is string)) + } + else if (parameterObject.GetType().IsPrimitive || (parameterObject is string)) { objects.Add(parameterObject); } } - if(jobjects.Count > 0 || jarrays.Count > 0) + if (jobjects.Count > 0 || jarrays.Count > 0) { Electron.SignalrElectron.Clients.All.SendAsync("sendToIpcRenderer", JObject.FromObject(browserWindow, _jsonSerializer), channel, jarrays.ToArray(), jobjects.ToArray(), objects.ToArray()); } @@ -218,9 +271,9 @@ public void Send(BrowserWindow browserWindow, string channel, params object[] da /// Arguments data. public void Send(BrowserView browserView, string channel, params object[] data) { - List jobjects = new List(); - List jarrays = new List(); - List objects = new List(); + List jobjects = new(); + List jarrays = new(); + List objects = new(); foreach (var parameterObject in data) { @@ -236,7 +289,7 @@ public void Send(BrowserView browserView, string channel, params object[] data) } } - if(jobjects.Count > 0 || jarrays.Count > 0) + if (jobjects.Count > 0 || jarrays.Count > 0) { Electron.SignalrElectron.Clients.All.SendAsync("sendToIpcRendererBrowserView", browserView.Id, channel, jarrays.ToArray(), jobjects.ToArray(), objects.ToArray()); } @@ -246,7 +299,28 @@ public void Send(BrowserView browserView, string channel, params object[] data) } } - private JsonSerializer _jsonSerializer = new JsonSerializer() + /// + /// Log a message to the console output pipe. This is used when running with "detachedProcess" : true on the electron.manifest.json, + /// as in that case we can't open pipes to read the console output from the child process anymore + /// + /// Message to log + public static async void ConsoleLog(string text) + { + await Electron.SignalrElectron.Clients.All.SendAsync("console-stdout", text); + } + + /// + /// Log a message to the console error pipe. This is used when running with "detachedProcess" : true on the electron.manifest.json, + /// as in that case we can't open pipes to read the console output from the child process anymore + /// + /// Message to log + + public static async void ConsoleError(string text) + { + await Electron.SignalrElectron.Clients.All.SendAsync("console-stderr", text); + } + + private readonly JsonSerializer _jsonSerializer = new() { ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore, diff --git a/ElectronNET.API/LifetimeServiceHost.cs b/ElectronNET.API/LifetimeServiceHost.cs index cb58eb1b..17f92d4a 100644 --- a/ElectronNET.API/LifetimeServiceHost.cs +++ b/ElectronNET.API/LifetimeServiceHost.cs @@ -15,8 +15,6 @@ public LifetimeServiceHost(IHostApplicationLifetime lifetime) lifetime.ApplicationStarted.Register(() => { App.Instance.IsReady = true; - - Console.WriteLine("ASP.NET Core host has fully started."); }); } diff --git a/ElectronNET.API/Menu.cs b/ElectronNET.API/Menu.cs index 89967dad..1d793b9a 100644 --- a/ElectronNET.API/Menu.cs +++ b/ElectronNET.API/Menu.cs @@ -17,7 +17,7 @@ namespace ElectronNET.API public sealed class Menu { private static Menu _menu; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal Menu() { } @@ -47,7 +47,7 @@ internal static Menu Instance /// The menu items. /// public IReadOnlyCollection MenuItems { get { return _menuItems.AsReadOnly(); } } - private List _menuItems = new List(); + private readonly List _menuItems = new(); /// /// Sets the application menu. @@ -80,7 +80,7 @@ public MenuItem GetMenuItem(string id) /// The context menu items. /// public IReadOnlyDictionary> ContextMenuItems { get; internal set; } - private Dictionary> _contextMenuItems = new Dictionary>(); + private readonly Dictionary> _contextMenuItems = new(); /// /// Sets the context menu. @@ -111,7 +111,7 @@ public async void ContextMenuPopup(BrowserWindow browserWindow) await Electron.SignalrElectron.Clients.All.SendAsync("menu-contextMenuPopup", browserWindow.Id); } - private JsonSerializer _jsonSerializer = new JsonSerializer() + private readonly JsonSerializer _jsonSerializer = new() { ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore diff --git a/ElectronNET.API/MenuResponse.cs b/ElectronNET.API/MenuResponse.cs new file mode 100644 index 00000000..876a3634 --- /dev/null +++ b/ElectronNET.API/MenuResponse.cs @@ -0,0 +1,8 @@ +namespace ElectronNET.API +{ + internal class MenuResponse + { + public string id { get; set; } + public int windowId { get; set; } + } +} \ No newline at end of file diff --git a/ElectronNET.API/NativeTheme.cs b/ElectronNET.API/NativeTheme.cs index e3a5d30a..2d459785 100644 --- a/ElectronNET.API/NativeTheme.cs +++ b/ElectronNET.API/NativeTheme.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime.Versioning; using System.Threading.Tasks; using ElectronNET.API.Entities; using ElectronNET.API.Extensions; @@ -12,7 +13,7 @@ namespace ElectronNET.API public sealed class NativeTheme { private static NativeTheme _nativeTheme; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal NativeTheme() { } @@ -123,6 +124,8 @@ public async Task ShouldUseDarkColorsAsync() /// A for if the OS / Chromium currently has high-contrast mode enabled or is /// being instructed to show a high-contrast UI. /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async Task ShouldUseHighContrastColorsAsync() { return await SignalrSerializeHelper.GetSignalrResultBool("nativeTheme-shouldUseHighContrastColors"); @@ -132,6 +135,8 @@ public async Task ShouldUseHighContrastColorsAsync() /// A for if the OS / Chromium currently has an inverted color scheme or is /// being instructed to use an inverted color scheme. /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public async Task ShouldUseInvertedColorSchemeAsync() { return await SignalrSerializeHelper.GetSignalrResultBool("nativeTheme-shouldUseInvertedColorScheme"); diff --git a/ElectronNET.API/Notification.cs b/ElectronNET.API/Notification.cs index 34d329e8..e9a0efdc 100644 --- a/ElectronNET.API/Notification.cs +++ b/ElectronNET.API/Notification.cs @@ -16,7 +16,7 @@ namespace ElectronNET.API public sealed class Notification { private static Notification _notification; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal Notification() { } @@ -40,7 +40,7 @@ internal static Notification Instance } public IReadOnlyCollection NotificationOptions { get { return _notificationOptions.AsReadOnly(); } } - private static List _notificationOptions = new List(); + private static readonly List _notificationOptions = new(); /// /// Create OS desktop notifications @@ -102,7 +102,7 @@ public async Task IsSupportedAsync() return await SignalrSerializeHelper.GetSignalrResultBool("notificationIsSupported"); } - private JsonSerializer _jsonSerializer = new JsonSerializer() + private static readonly JsonSerializer _jsonSerializer = new() { ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore, diff --git a/ElectronNET.API/PowerMonitor.cs b/ElectronNET.API/PowerMonitor.cs index b2397264..e507a3d5 100644 --- a/ElectronNET.API/PowerMonitor.cs +++ b/ElectronNET.API/PowerMonitor.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.SignalR; using System; +using System.Runtime.Versioning; using System.Threading.Tasks; namespace ElectronNET.API @@ -12,6 +13,8 @@ public sealed class PowerMonitor /// /// Emitted when the system is about to lock the screen. /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public event Action OnLockScreen { add @@ -38,6 +41,8 @@ public void TriggerOnLockScreen() /// /// Emitted when the system is about to unlock the screen. /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public event Action OnUnLockScreen { add @@ -64,6 +69,8 @@ public void TriggerOnUnLockScreen() /// /// Emitted when the system is suspending. /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public event Action OnSuspend { add @@ -90,6 +97,8 @@ public void TriggerOnSuspend() /// /// Emitted when system is resuming. /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public event Action OnResume { add @@ -116,6 +125,8 @@ public void TriggerOnResume() /// /// Emitted when the system changes to AC power. /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public event Action OnAC { add @@ -142,6 +153,8 @@ public void TriggerOnAC() /// /// Emitted when system changes to battery power. /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public event Action OnBattery { add @@ -172,6 +185,9 @@ public void TriggerOnBattery() /// order for the app to exit cleanly.If `e.preventDefault()` is called, the app /// should exit as soon as possible by calling something like `app.quit()`. /// + [SupportedOSPlatform("linux")] + [SupportedOSPlatform("macos")] + public event Action OnShutdown { add @@ -196,7 +212,7 @@ public void TriggerOnShutdown() private event Action _shutdown; private static PowerMonitor _powerMonitor; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal PowerMonitor() { } diff --git a/ElectronNET.API/Screen.cs b/ElectronNET.API/Screen.cs index 2ae02c89..5c6a2645 100644 --- a/ElectronNET.API/Screen.cs +++ b/ElectronNET.API/Screen.cs @@ -95,7 +95,7 @@ public void TriggerOnDisplayMetricsChanged(Display display, string[] metrics) private event Action _onDisplayMetricsChanged; private static Screen _screen; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal Screen() { } diff --git a/ElectronNET.API/Shell.cs b/ElectronNET.API/Shell.cs index 787493f5..68c1cd03 100644 --- a/ElectronNET.API/Shell.cs +++ b/ElectronNET.API/Shell.cs @@ -5,6 +5,7 @@ using Newtonsoft.Json.Serialization; using System.Threading.Tasks; using ElectronNET.API.Extensions; +using System.Runtime.Versioning; namespace ElectronNET.API { @@ -14,7 +15,7 @@ namespace ElectronNET.API public sealed class Shell { private static Shell _shell; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal Shell() { } @@ -111,6 +112,7 @@ public async void Beep() /// Default is /// Structure of a shortcut. /// Whether the shortcut was created successfully. + [SupportedOSPlatform("windows")] public async Task WriteShortcutLinkAsync(string shortcutPath, ShortcutLinkOperation operation, ShortcutDetails options) { return await SignalrSerializeHelper.GetSignalrResultBool("shell-writeShortcutLink", shortcutPath, operation.GetDescription(), JObject.FromObject(options, _jsonSerializer)); @@ -122,6 +124,7 @@ public async Task WriteShortcutLinkAsync(string shortcutPath, ShortcutLink /// /// The path tot the shortcut. /// of the shortcut. + [SupportedOSPlatform("windows")] public async Task ReadShortcutLinkAsync(string shortcutPath) { var signalrResult = await SignalrSerializeHelper.GetSignalrResultJObject("shell-readShortcutLink", shortcutPath); diff --git a/ElectronNET.API/Tray.cs b/ElectronNET.API/Tray.cs index 08261115..adfaa187 100644 --- a/ElectronNET.API/Tray.cs +++ b/ElectronNET.API/Tray.cs @@ -6,6 +6,7 @@ using Newtonsoft.Json.Serialization; using System; using System.Collections.Generic; +using System.Runtime.Versioning; using System.Threading.Tasks; namespace ElectronNET.API @@ -13,6 +14,9 @@ namespace ElectronNET.API /// /// Add icons and context menus to the system's notification area. /// + + [SupportedOSPlatform("macos")] + [SupportedOSPlatform("windows")] public sealed class Tray { /// @@ -44,6 +48,8 @@ public void TriggerOnClick(TrayClickEventArgs trayClickEventArgs, Rectangle rect /// /// macOS, Windows: Emitted when the tray icon is right clicked. /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public event Action OnRightClick { add @@ -70,6 +76,8 @@ public void TriggerOnRightClick(TrayClickEventArgs trayClickEventArgs, Rectangle /// /// macOS, Windows: Emitted when the tray icon is double clicked. /// + [SupportedOSPlatform("windows")] + [SupportedOSPlatform("macos")] public event Action OnDoubleClick { add @@ -96,6 +104,7 @@ public void TriggerOnDoubleClick(TrayClickEventArgs trayClickEventArgs, Rectangl /// /// Windows: Emitted when the tray balloon shows. /// + [SupportedOSPlatform("windows")] public event Action OnBalloonShow { add @@ -122,6 +131,7 @@ public void TriggerOnBalloonShow() /// /// Windows: Emitted when the tray balloon is clicked. /// + [SupportedOSPlatform("windows")] public event Action OnBalloonClick { add @@ -149,6 +159,8 @@ public void TriggerOnBalloonClick() /// Windows: Emitted when the tray balloon is closed /// because of timeout or user manually closes it. /// + + [SupportedOSPlatform("windows")] public event Action OnBalloonClosed { add @@ -175,7 +187,7 @@ public void TriggerOnBalloonClosed() // TODO: Implement macOS Events private static Tray _tray; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal Tray() { } @@ -205,7 +217,7 @@ internal static Tray Instance /// The menu items. /// public IReadOnlyCollection MenuItems { get { return _items.AsReadOnly(); } } - private List _items = new List(); + private readonly List _items = new(); /// /// Shows the Traybar. @@ -262,6 +274,7 @@ public async void SetImage(string image) /// Sets the image associated with this tray icon when pressed on macOS. /// /// + [SupportedOSPlatform("macos")] public async void SetPressedImage(string image) { await Electron.SignalrElectron.Clients.All.SendAsync("tray-setPressedImage", image); @@ -280,6 +293,7 @@ public async void SetToolTip(string toolTip) /// macOS: Sets the title displayed aside of the tray icon in the status bar. /// /// + [SupportedOSPlatform("macos")] public async void SetTitle(string title) { await Electron.SignalrElectron.Clients.All.SendAsync("tray-setTitle", title); @@ -289,6 +303,7 @@ public async void SetTitle(string title) /// Windows: Displays a tray balloon. /// /// + [SupportedOSPlatform("windows")] public async void DisplayBalloon(DisplayBalloonOptions options) { await Electron.SignalrElectron.Clients.All.SendAsync("tray-displayBalloon", JObject.FromObject(options, _jsonSerializer)); @@ -303,40 +318,41 @@ public async Task IsDestroyedAsync() return await SignalrSerializeHelper.GetSignalrResultBool("tray-isDestroyed"); } - private JsonSerializer _jsonSerializer = new JsonSerializer() - { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - NullValueHandling = NullValueHandling.Ignore - }; - private const string ModuleName = "tray"; + /// /// Subscribe to an unmapped event on the module. /// /// The event name /// The handler - public void On(string eventName, Action fn) - => Events.Instance.On(ModuleName, eventName, fn); + public void On(string eventName, Action fn) => Events.Instance.On(ModuleName, eventName, fn); + /// /// Subscribe to an unmapped event on the module. /// /// The event name /// The handler - public void On(string eventName, Action fn) - => Events.Instance.On(ModuleName, eventName, fn); + public void On(string eventName, Action fn) => Events.Instance.On(ModuleName, eventName, fn); + /// /// Subscribe to an unmapped event on the module once. /// /// The event name /// The handler - public void Once(string eventName, Action fn) - => Events.Instance.Once(ModuleName, eventName, fn); + public void Once(string eventName, Action fn) => Events.Instance.Once(ModuleName, eventName, fn); + /// /// Subscribe to an unmapped event on the module once. /// /// The event name /// The handler - public void Once(string eventName, Action fn) - => Events.Instance.Once(ModuleName, eventName, fn); + public void Once(string eventName, Action fn) => Events.Instance.Once(ModuleName, eventName, fn); + + private readonly JsonSerializer _jsonSerializer = new() + { + ContractResolver = new CamelCasePropertyNamesContractResolver(), + NullValueHandling = NullValueHandling.Ignore + }; + } } diff --git a/ElectronNET.API/WebHostBuilderExtensions.cs b/ElectronNET.API/WebHostBuilderExtensions.cs index ae7a7442..b1637984 100644 --- a/ElectronNET.API/WebHostBuilderExtensions.cs +++ b/ElectronNET.API/WebHostBuilderExtensions.cs @@ -23,7 +23,7 @@ public static IWebHostBuilder UseElectron(this IWebHostBuilder builder, string[] if (argument.ToUpper().Contains("ELECTRONPORT") && signalrPort == null) { BridgeSettings.SocketPort = argument.ToUpper().Replace("/ELECTRONPORT=", ""); - Console.WriteLine("Use Electron Port: " + BridgeSettings.SocketPort); + } else if(argument.ToUpper().Contains("ELECTRONWEBPORT") && signalrPort == null) { BridgeSettings.WebPort = argument.ToUpper().Replace("/ELECTRONWEBPORT=", ""); diff --git a/ElectronNET.API/WindowManager.cs b/ElectronNET.API/WindowManager.cs index a60be20f..7620a477 100644 --- a/ElectronNET.API/WindowManager.cs +++ b/ElectronNET.API/WindowManager.cs @@ -3,9 +3,11 @@ using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; +using System.Threading; using System.Threading.Tasks; using ElectronNET.API.Hubs; using Microsoft.AspNetCore.SignalR; @@ -19,7 +21,7 @@ namespace ElectronNET.API public sealed class WindowManager { private static WindowManager _windowManager; - private static object _syncRoot = new object(); + private static readonly object _syncRoot = new(); internal WindowManager() { } @@ -65,8 +67,18 @@ public bool IsQuitOnWindowAllClosed /// /// The browser windows. /// - public IReadOnlyCollection BrowserWindows { get { return _browserWindows.AsReadOnly(); } } - private List _browserWindows = new List(); + public IReadOnlyCollection BrowserWindows { get { return _browserWindows.Values.ToList().AsReadOnly(); } } + + /// + /// Get a browser window using the ID + /// + /// The id of the browser window + /// The window, if any + /// True if it found the window + public bool TryGetBrowserWindows(int id, out BrowserWindow window) => _browserWindows.TryGetValue(id, out window); + + + private readonly ConcurrentDictionary _browserWindows = new (); /// /// Gets the browser views. @@ -74,8 +86,16 @@ public bool IsQuitOnWindowAllClosed /// /// The browser view. /// - public IReadOnlyCollection BrowserViews { get { return _browserViews.AsReadOnly(); } } - private List _browserViews = new List(); + public IReadOnlyCollection BrowserViews { get { return _browserViews.Values.ToList().AsReadOnly(); } } + private readonly ConcurrentDictionary _browserViews = new (); + + /// + /// Get a browser view using the ID + /// + /// The id of the browser view + /// The view, if any + /// True if it found the view + public bool TryGetBrowserViews(int id, out BrowserView view) => _browserViews.TryGetValue(id, out view); /// /// Creates the window asynchronous. @@ -95,6 +115,8 @@ public async Task CreateWindowAsync(string loadUrl = "http://loca /// public async Task CreateWindowAsync(BrowserWindowOptions options, string loadUrl = "http://127.0.0.1:5000") { + BootstrapUpdateOpenIDsEvent(); + var guid = Guid.NewGuid(); var taskCompletionSource = new TaskCompletionSource(); HubElectron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); @@ -108,47 +130,73 @@ public async Task CreateWindowAsync(BrowserWindowOptions options, // Workaround Windows 10 / Electron Bug // https://github.com/electron/electron/issues/4045 - if (isWindows10()) + if (IsWindows10()) { - options.Width = options.Width + 14; - options.Height = options.Height + 7; + options.Width += 14; + options.Height += 7; } if (options.X == -1 && options.Y == -1) { - options.X = 0; + options.X = 0; //This is manually removed by the browserWindows.js code before creating the window options.Y = 0; - browserWindowId = await SignalrSerializeHelper.GetSignalrResultInt("createBrowserWindow", JObject.FromObject(options, _jsonSerializer), loadUrl); + browserWindowId = await SignalrSerializeHelper.GetSignalrResultInt("createBrowserWindow", JObject.FromObject(options, _jsonSerializer), loadUrl); } else { // Workaround Windows 10 / Electron Bug // https://github.com/electron/electron/issues/4045 - if (isWindows10()) + if (IsWindows10()) { - options.X = options.X - 7; + options.X -= 7; } - var ownjsonSerializer = new JsonSerializer() - { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - NullValueHandling = NullValueHandling.Ignore - }; browserWindowId = await SignalrSerializeHelper.GetSignalrResultInt("createBrowserWindow", JObject.FromObject(options, _jsonSerializer), loadUrl); } BrowserWindow browserWindow; browserWindow = new BrowserWindow(browserWindowId); - _browserWindows.Add(browserWindow); - + _browserWindows.TryAdd(browserWindowId, browserWindow); return browserWindow; } - private bool isWindows10() + + private bool _hasClosedEvent = false; + private readonly object _hasClosedEventLock = new(); + private void BootstrapUpdateOpenIDsEvent() + { + if (!_hasClosedEvent) + { + lock(_hasClosedEventLock) + { + if(!_hasClosedEvent) + { + _hasClosedEvent = true; + } + } + } + } + + public void TriggerOnBootstrapUpdateOpenIDsEvent(int[] browserWindowIdsStillOpen) { - return RuntimeInformation.OSDescription.Contains("Windows 10"); + if (browserWindowIdsStillOpen.Any()) + { + foreach (var id in _browserWindows.Keys.ToArray()) + { + if (!browserWindowIdsStillOpen.Contains(id)) _browserWindows.TryRemove(id, out _); + } + } + else + { + _browserWindows.Clear(); + } + } + + private bool IsWindows10() + { + return OperatingSystem.IsWindowsVersionAtLeast(10); } /// @@ -181,8 +229,23 @@ public async Task CreateBrowserViewAsync(BrowserViewConstructorOpti BrowserView browserView = new BrowserView(browserViewId); - _browserViews.Add(browserView); + _browserViews.TryAdd(browserViewId, browserView); return browserView; + + } + + + /// + /// Destroy all windows. + /// + /// Number of windows destroyed + public async Task DestroyAllWindows() + { + + var destroyed = await SignalrSerializeHelper.GetSignalrResultInt("browserWindowDestroyAll"); + _browserViews.Clear(); + _browserWindows.Clear(); + return destroyed; } private JsonSerializer _jsonSerializer = new JsonSerializer() @@ -191,5 +254,6 @@ public async Task CreateBrowserViewAsync(BrowserViewConstructorOpti NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore }; + } } From 6e37a609e6b23c86fa1e7f7c0e18f1adaf9ad05d Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Fri, 4 Mar 2022 15:41:35 +0100 Subject: [PATCH 10/15] Manually merge in ElectronNET.CLI from @theolivenbaum --- .../Actions/DeployEmbeddedElectronFiles.cs | 3 + .../Commands/Actions/DirectoryCopy.cs | 4 +- ElectronNET.CLI/Commands/AddCommand.cs | 11 +- ElectronNET.CLI/Commands/BuildCommand.cs | 84 ++++++++------- ElectronNET.CLI/Commands/InitCommand.cs | 4 +- .../Commands/StartElectronCommand.cs | 101 ++++++++++++------ ElectronNET.CLI/Commands/VersionCommand.cs | 2 +- ElectronNET.CLI/ElectronNET.CLI.csproj | 2 + ElectronNET.CLI/EmbeddedFileHelper.cs | 27 ++++- ElectronNET.CLI/ProcessHelper.cs | 32 ++++++ ElectronNET.CLI/Program.cs | 27 +++-- .../Properties/launchSettings.json | 7 +- ElectronNET.CLI/SimpleCommandLineParser.cs | 8 +- 13 files changed, 216 insertions(+), 96 deletions(-) diff --git a/ElectronNET.CLI/Commands/Actions/DeployEmbeddedElectronFiles.cs b/ElectronNET.CLI/Commands/Actions/DeployEmbeddedElectronFiles.cs index fcefcd45..840d6fea 100644 --- a/ElectronNET.CLI/Commands/Actions/DeployEmbeddedElectronFiles.cs +++ b/ElectronNET.CLI/Commands/Actions/DeployEmbeddedElectronFiles.cs @@ -6,6 +6,8 @@ public static class DeployEmbeddedElectronFiles { public static void Do(string tempPath) { + EmbeddedFileHelper.PrintAllResources(); + EmbeddedFileHelper.DeployEmbeddedFile(tempPath, "main.js"); EmbeddedFileHelper.DeployEmbeddedFile(tempPath, "package.json"); EmbeddedFileHelper.DeployEmbeddedFile(tempPath, "build-helper.js"); @@ -28,6 +30,7 @@ public static void Do(string tempPath) EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "globalShortcut.js", "api."); EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "shell.js", "api."); EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "screen.js", "api."); + EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "desktopCapturer.js", "api."); EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "clipboard.js", "api."); EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "autoUpdater.js", "api."); EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "browserView.js", "api."); diff --git a/ElectronNET.CLI/Commands/Actions/DirectoryCopy.cs b/ElectronNET.CLI/Commands/Actions/DirectoryCopy.cs index 39ded697..9ecebd66 100644 --- a/ElectronNET.CLI/Commands/Actions/DirectoryCopy.cs +++ b/ElectronNET.CLI/Commands/Actions/DirectoryCopy.cs @@ -12,9 +12,7 @@ public static void Do(string sourceDirName, string destDirName, bool copySubDirs if (!dir.Exists) { - throw new DirectoryNotFoundException( - "Source directory does not exist or could not be found: " - + sourceDirName); + throw new DirectoryNotFoundException($"Source directory does not exist or could not be found: {sourceDirName}"); } DirectoryInfo[] dirs = dir.GetDirectories(); diff --git a/ElectronNET.CLI/Commands/AddCommand.cs b/ElectronNET.CLI/Commands/AddCommand.cs index cbfb0dd6..9d002407 100644 --- a/ElectronNET.CLI/Commands/AddCommand.cs +++ b/ElectronNET.CLI/Commands/AddCommand.cs @@ -16,14 +16,14 @@ public class AddCommand : ICommand public static IList CommandOptions { get; set; } = new List(); - private string[] _args; + private readonly string[] _args; public AddCommand(string[] args) { _args = args; } - private static string ElectronHostHookFolderName = "ElectronHostHook"; + private const string ElectronHostHookFolderName = "ElectronHostHook"; public Task ExecuteAsync() { @@ -124,11 +124,10 @@ private static bool EditProjectFile(string projectFile) OmitXmlDeclaration = true, Indent = true }; - using (XmlWriter xw = XmlWriter.Create(stream, xws)) - { - xmlDocument.Save(xw); - } + + using XmlWriter xw = XmlWriter.Create(stream, xws); + xmlDocument.Save(xw); } Console.WriteLine($"Publish setting added in csproj/fsproj!"); diff --git a/ElectronNET.CLI/Commands/BuildCommand.cs b/ElectronNET.CLI/Commands/BuildCommand.cs index ae09b1e2..3d83a143 100644 --- a/ElectronNET.CLI/Commands/BuildCommand.cs +++ b/ElectronNET.CLI/Commands/BuildCommand.cs @@ -11,42 +11,45 @@ public class BuildCommand : ICommand { public const string COMMAND_NAME = "build"; public const string COMMAND_DESCRIPTION = "Build your Electron Application."; - public static string COMMAND_ARGUMENTS = "Needed: '/target' with params 'win/osx/linux' to build for a typical app or use 'custom' and specify .NET Core build config & electron build config" + Environment.NewLine + - " for custom target, check .NET Core RID Catalog and Electron build target/" + Environment.NewLine + - " e.g. '/target win' or '/target custom \"win7-x86;win\"'" + Environment.NewLine + - "Optional: '/dotnet-configuration' with the desired .NET Core build config e.g. release or debug. Default = Release" + Environment.NewLine + - "Optional: '/electron-arch' to specify the resulting electron processor architecture (e.g. ia86 for x86 builds). Be aware to use the '/target custom' param as well!" + Environment.NewLine + - "Optional: '/electron-params' specify any other valid parameter, which will be routed to the electron-packager." + Environment.NewLine + - "Optional: '/relative-path' to specify output a subdirectory for output." + Environment.NewLine + - "Optional: '/absolute-path to specify and absolute path for output." + Environment.NewLine + - "Optional: '/package-json' to specify a custom package.json file." + Environment.NewLine + - "Optional: '/install-modules' to force node module install. Implied by '/package-json'" + Environment.NewLine + - "Optional: '/Version' to specify the version that should be applied to both the `dotnet publish` and `electron-builder` commands. Implied by '/Version'" + Environment.NewLine + - "Optional: '/p:[property]' or '/property:[property]' to pass in dotnet publish properties. Example: '/property:Version=1.0.0' to override the FileVersion" + Environment.NewLine + - "Full example for a 32bit debug build with electron prune: build /target custom win7-x86;win32 /dotnet-configuration Debug /electron-arch ia32 /electron-params \"--prune=true \"" + Environment.NewLine + - "Full example to pass publish parameters: build /PublishReadyToRun false /PublishSingleFile false /target custom win7-x86;win32 /dotnet-configuration Debug /electron-arch ia32 /electron-params \"--prune=true \""; + public const string COMMAND_ARGUMENTS = +@"Needed: '/target' with params 'win/osx/linux' to build for a typical app or use 'custom' and specify .NET Core build config & electron build config +for custom target, check .NET Core RID Catalog and Electron build target/ +e.g. '/target win' or '/target custom ""win7-x86;win""' +Optional: '/dotnet-configuration' with the desired .NET Core build config e.g. release or debug. Default = Release +Optional: '/electron-arch' to specify the resulting electron processor architecture (e.g. ia86 for x86 builds). Be aware to use the '/target custom' param as well! +Optional: '/electron-params' specify any other valid parameter, which will be routed to the electron-packager. +Optional: '/relative-path' to specify output a subdirectory for output. +Optional: '/absolute-path to specify and absolute path for output. +Optional: '/package-json' to specify a custom package.json file. +Optional: '/install-modules' to force node module install. Implied by '/package-json' +Optional: '/Version' to specify the version that should be applied to both the `dotnet publish` and `electron-builder` commands. Implied by '/Version' +Optional: '/p:[property]' or '/property:[property]' to pass in dotnet publish properties. Example: '/property:Version=1.0.0' to override the FileVersion +Full example for a 32bit debug build with electron prune: build /target custom win7-x86;win32 /dotnet-configuration Debug /electron-arch ia32 /electron-params ""--prune=true """; public static IList CommandOptions { get; set; } = new List(); - private string[] _args; + private readonly string[] _args; public BuildCommand(string[] args) { _args = args; } - private string _paramTarget = "target"; - private string _paramDotNetConfig = "dotnet-configuration"; - private string _paramElectronArch = "electron-arch"; - private string _paramElectronParams = "electron-params"; - private string _paramOutputDirectory = "relative-path"; - private string _paramAbsoluteOutput = "absolute-path"; - private string _paramPackageJson = "package-json"; - private string _paramForceNodeInstall = "install-modules"; - private string _manifest = "manifest"; - private string _paramPublishReadyToRun = "PublishReadyToRun"; - private string _paramPublishSingleFile = "PublishSingleFile"; - private string _paramVersion = "Version"; + private const string _defaultElectronVersion = "17.0.1"; + + private const string _paramTarget = "target"; + private const string _paramDotNetConfig = "dotnet-configuration"; + private const string _paramElectronArch = "electron-arch"; + private const string _paramElectronParams = "electron-params"; + private const string _paramElectronVersion = "electron-version"; + private const string _paramOutputDirectory = "relative-path"; + private const string _paramAbsoluteOutput = "absolute-path"; + private const string _paramPackageJson = "package-json"; + private const string _paramForceNodeInstall = "install-modules"; + private const string _manifest = "manifest"; + private const string _paramPublishReadyToRun = "PublishReadyToRun"; + private const string _paramPublishSingleFile = "PublishSingleFile"; + private const string _paramVersion = "Version"; public Task ExecuteAsync() { @@ -62,7 +65,7 @@ public Task ExecuteAsync() if (parser.Arguments.ContainsKey(_paramVersion)) version = parser.Arguments[_paramVersion][0]; - if (!parser.Arguments.ContainsKey(_paramTarget) || parser.Arguments[_paramTarget].Length == 0) + if (!parser.Arguments.ContainsKey(_paramTarget)) { Console.WriteLine($"Error: missing '{_paramTarget}' argument."); Console.WriteLine(COMMAND_ARGUMENTS); @@ -105,7 +108,7 @@ public Task ExecuteAsync() Console.WriteLine($"Build ASP.NET Core App for {platformInfo.NetCorePublishRid} under {configuration}-Configuration..."); - var dotNetPublishFlags = GetDotNetPublishFlags(parser); + var dotNetPublishFlags = GetDotNetPublishFlags(parser, "false", "false"); var command = $"dotnet publish -r {platformInfo.NetCorePublishRid} -c \"{configuration}\" --output \"{tempBinPath}\" {string.Join(' ', dotNetPublishFlags.Select(kvp => $"{kvp.Key}={kvp.Value}"))} --self-contained"; @@ -135,10 +138,11 @@ public Task ExecuteAsync() var checkForNodeModulesDirPath = Path.Combine(tempPath, "node_modules"); - if (Directory.Exists(checkForNodeModulesDirPath) == false || parser.Contains(_paramForceNodeInstall) || parser.Contains(_paramPackageJson)) - + if (!Directory.Exists(checkForNodeModulesDirPath)|| parser.Contains(_paramForceNodeInstall) || parser.Contains(_paramPackageJson)) + { Console.WriteLine("Start npm install..."); - ProcessHelper.CmdExecute("npm install --production", tempPath); + ProcessHelper.CmdExecute("npm install --production", tempPath); + } Console.WriteLine("ElectronHostHook handling started..."); @@ -177,6 +181,12 @@ public Task ExecuteAsync() electronArch = parser.Arguments[_paramElectronArch][0]; } + var electronVersion = _defaultElectronVersion; + if (parser.Arguments.ContainsKey(_paramElectronVersion)) + { + electronVersion = parser.Arguments[_paramElectronVersion][0]; + } + string electronParams = ""; if (parser.Arguments.ContainsKey(_paramElectronParams)) { @@ -199,7 +209,7 @@ public Task ExecuteAsync() : $"node build-helper.js {manifestFileName} {version}", tempPath); Console.WriteLine($"Package Electron App for Platform {platformInfo.ElectronPackerPlatform}..."); - ProcessHelper.CmdExecute($"npx electron-builder --config=./bin/electron-builder.json --{platformInfo.ElectronPackerPlatform} --{electronArch} -c.electronVersion=13.1.5 {electronParams}", tempPath); + ProcessHelper.CmdExecute($"npx electron-builder --config=./bin/electron-builder.json --{platformInfo.ElectronPackerPlatform} --{electronArch} -c.electronVersion={electronVersion} {electronParams}", tempPath); Console.WriteLine("... done"); @@ -207,12 +217,12 @@ public Task ExecuteAsync() }); } - private Dictionary GetDotNetPublishFlags(SimpleCommandLineParser parser) + internal static Dictionary GetDotNetPublishFlags(SimpleCommandLineParser parser, string defaultReadyToRun, string defaultSingleFile) { var dotNetPublishFlags = new Dictionary { - {"/p:PublishReadyToRun", parser.TryGet(_paramPublishReadyToRun, out var rtr) ? rtr[0] : "true"}, - {"/p:PublishSingleFile", parser.TryGet(_paramPublishSingleFile, out var psf) ? psf[0] : "false"}, + {"/p:PublishReadyToRun", parser.TryGet(_paramPublishReadyToRun, out var rtr) ? rtr[0] : defaultReadyToRun}, + {"/p:PublishSingleFile", parser.TryGet(_paramPublishSingleFile, out var psf) ? psf[0] : defaultSingleFile}, }; if (parser.Arguments.ContainsKey(_paramVersion)) @@ -253,4 +263,4 @@ private Dictionary GetDotNetPublishFlags(SimpleCommandLineParser return dotNetPublishFlags; } } -} +} \ No newline at end of file diff --git a/ElectronNET.CLI/Commands/InitCommand.cs b/ElectronNET.CLI/Commands/InitCommand.cs index c2539200..88e7bd5d 100644 --- a/ElectronNET.CLI/Commands/InitCommand.cs +++ b/ElectronNET.CLI/Commands/InitCommand.cs @@ -25,8 +25,8 @@ public InitCommand(string[] args) _parser.Parse(args); } - private static string _aspCoreProjectPath = "project-path"; - private static string _manifest = "manifest"; + private const string _aspCoreProjectPath = "project-path"; + private const string _manifest = "manifest"; public Task ExecuteAsync() { diff --git a/ElectronNET.CLI/Commands/StartElectronCommand.cs b/ElectronNET.CLI/Commands/StartElectronCommand.cs index 03382ecd..11672fad 100644 --- a/ElectronNET.CLI/Commands/StartElectronCommand.cs +++ b/ElectronNET.CLI/Commands/StartElectronCommand.cs @@ -15,21 +15,20 @@ public class StartElectronCommand : ICommand public const string COMMAND_ARGUMENTS = " from ASP.NET Core Project."; public static IList CommandOptions { get; set; } = new List(); - private string[] _args; + private readonly string[] _args; public StartElectronCommand(string[] args) { _args = args; } - private string _aspCoreProjectPath = "project-path"; - private string _arguments = "args"; - private string _manifest = "manifest"; - private string _clearCache = "clear-cache"; - private string _paramPublishReadyToRun = "PublishReadyToRun"; - private string _paramPublishSingleFile = "PublishSingleFile"; - private string _paramDotNetConfig = "dotnet-configuration"; - private string _paramTarget = "target"; + private const string _aspCoreProjectPath = "project-path"; + private const string _arguments = "args"; + private const string _manifest = "manifest"; + private const string _clearCache = "clear-cache"; + private const string _paramDotNetConfig = "dotnet-configuration"; + private const string _paramTarget = "target"; + private const string _buildInsteadOfPublish = "simple-build"; public Task ExecuteAsync() { @@ -55,34 +54,26 @@ public Task ExecuteAsync() aspCoreProjectPath = Directory.GetCurrentDirectory(); } + + bool buildInsteadOfPublish = false; + + if (parser.Arguments.ContainsKey(_buildInsteadOfPublish)) + { + buildInsteadOfPublish = bool.Parse(parser.Arguments[_buildInsteadOfPublish].First()); + } + string tempPath = Path.Combine(aspCoreProjectPath, "obj", "Host"); if (Directory.Exists(tempPath) == false) { Directory.CreateDirectory(tempPath); } - string tempBinPath = Path.Combine(tempPath, "bin"); - var resultCode = 0; + string tempBinPath = Path.GetFullPath(Path.Combine(tempPath, "bin")); - string publishReadyToRun = "/p:PublishReadyToRun="; - if (parser.Arguments.ContainsKey(_paramPublishReadyToRun)) - { - publishReadyToRun += parser.Arguments[_paramPublishReadyToRun][0]; - } - else - { - publishReadyToRun += "true"; - } + var dotNetPublishFlags = BuildCommand.GetDotNetPublishFlags(parser, "false", "false"); + + var resultCode = 0; - string publishSingleFile = "/p:PublishSingleFile="; - if (parser.Arguments.ContainsKey(_paramPublishSingleFile)) - { - publishSingleFile += parser.Arguments[_paramPublishSingleFile][0]; - } - else - { - publishSingleFile += "true"; - } // If target is specified as a command line argument, use it. // Format is the same as the build command. @@ -105,9 +96,19 @@ public Task ExecuteAsync() configuration = parser.Arguments[_paramDotNetConfig][0]; } - if (parser != null && !parser.Arguments.ContainsKey("watch")) + if (!buildInsteadOfPublish) + { + if (parser != null && !parser.Arguments.ContainsKey("watch")) + { + resultCode = ProcessHelper.CmdExecute($"dotnet publish -r {platformInfo.NetCorePublishRid} -c \"{configuration}\" --output \"{tempBinPath}\" {string.Join(' ', dotNetPublishFlags.Select(kvp => $"{kvp.Key}={kvp.Value}"))} --no-self-contained /p:DisabledWarnings=true", aspCoreProjectPath); + } + } + else { - resultCode = ProcessHelper.CmdExecute($"dotnet publish -r {platformInfo.NetCorePublishRid} -c \"{configuration}\" --output \"{tempBinPath}\" {publishReadyToRun} {publishSingleFile} --no-self-contained", aspCoreProjectPath); + if (parser != null && !parser.Arguments.ContainsKey("watch")) + { + resultCode = ProcessHelper.CmdExecute($"dotnet build -r {platformInfo.NetCorePublishRid} -c \"{configuration}\" --output \"{tempBinPath}\" {string.Join(' ', dotNetPublishFlags.Select(kvp => $"{kvp.Key}={kvp.Value}"))} /p:DisabledWarnings=true", aspCoreProjectPath); + } } if (resultCode != 0) @@ -120,10 +121,40 @@ public Task ExecuteAsync() var nodeModulesDirPath = Path.Combine(tempPath, "node_modules"); - Console.WriteLine("node_modules missing in: " + nodeModulesDirPath); + bool runNpmInstall = false; + + Console.WriteLine("node_modules in: " + nodeModulesDirPath); + + if (!Directory.Exists(nodeModulesDirPath)) + { + runNpmInstall = true; + } + + var packagesJson = Path.Combine(tempPath, "package.json"); + var packagesPrevious = Path.Combine(tempPath, "package.json.previous"); - Console.WriteLine("Start npm install..."); - ProcessHelper.CmdExecute("npm install", tempPath); + if (!runNpmInstall) + { + + if (File.Exists(packagesPrevious)) + { + if (File.ReadAllText(packagesPrevious) != File.ReadAllText(packagesJson)) + { + runNpmInstall = true; + } + } + else + { + runNpmInstall = true; + } + } + + if (runNpmInstall) + { + Console.WriteLine("Start npm install..."); + ProcessHelper.CmdExecute("npm install", tempPath); + File.Copy(packagesJson, packagesPrevious, true); + } Console.WriteLine("ElectronHostHook handling started..."); @@ -169,12 +200,14 @@ public Task ExecuteAsync() if (isWindows) { Console.WriteLine("Invoke electron.cmd - in dir: " + path); + Console.WriteLine("\n\n---------------------------------------------------\n\n\n"); ProcessHelper.CmdExecute(@"electron.cmd ""..\..\main.js"" " + arguments, path); } else { Console.WriteLine("Invoke electron - in dir: " + path); + Console.WriteLine("\n\n---------------------------------------------------\n\n\n"); ProcessHelper.CmdExecute(@"./electron ""../../main.js"" " + arguments, path); } diff --git a/ElectronNET.CLI/Commands/VersionCommand.cs b/ElectronNET.CLI/Commands/VersionCommand.cs index c8f60f83..0d2637ce 100644 --- a/ElectronNET.CLI/Commands/VersionCommand.cs +++ b/ElectronNET.CLI/Commands/VersionCommand.cs @@ -12,7 +12,7 @@ public class VersionCommand : ICommand public const string COMMAND_ARGUMENTS = ""; public static IList CommandOptions { get; set; } = new List(); - public VersionCommand(string[] args) + public VersionCommand() { } diff --git a/ElectronNET.CLI/ElectronNET.CLI.csproj b/ElectronNET.CLI/ElectronNET.CLI.csproj index 03a3a3de..0c0cd84e 100644 --- a/ElectronNET.CLI/ElectronNET.CLI.csproj +++ b/ElectronNET.CLI/ElectronNET.CLI.csproj @@ -14,6 +14,7 @@ 99.0.0.0 Gregor Biswanger, Robert Muehsig + Gregor Biswanger, Robert Muehsig, Rafael Oliveira Electron.NET @@ -66,6 +67,7 @@ + diff --git a/ElectronNET.CLI/EmbeddedFileHelper.cs b/ElectronNET.CLI/EmbeddedFileHelper.cs index d41e657e..0f65ea71 100644 --- a/ElectronNET.CLI/EmbeddedFileHelper.cs +++ b/ElectronNET.CLI/EmbeddedFileHelper.cs @@ -7,13 +7,38 @@ namespace ElectronNET.CLI public static class EmbeddedFileHelper { private const string ResourcePath = "ElectronNET.CLI.{0}"; + private const string ResourcePath2 = "ElectronNet.CLI.{0}"; private static Stream GetTestResourceFileStream(string folderAndFileInProjectPath) { var asm = Assembly.GetExecutingAssembly(); var resource = string.Format(ResourcePath, folderAndFileInProjectPath); + var resource2 = string.Format(ResourcePath2, folderAndFileInProjectPath); - return asm.GetManifestResourceStream(resource); + var stream = asm.GetManifestResourceStream(resource) ?? asm.GetManifestResourceStream(resource2); + + if(stream is null) + { + PrintAllResources(); + + Console.WriteLine("Was missing resource: {0}", resource); + + return null; + } + else + { + return stream; + } + } + + public static void PrintAllResources() + { + var asm = Assembly.GetExecutingAssembly(); + + foreach (var n in asm.GetManifestResourceNames()) + { + Console.WriteLine("Found resource : {0}", n); + } } public static void DeployEmbeddedFile(string targetPath, string file, string namespacePath = "") diff --git a/ElectronNET.CLI/ProcessHelper.cs b/ElectronNET.CLI/ProcessHelper.cs index 9e0048f4..9ac02f96 100644 --- a/ElectronNET.CLI/ProcessHelper.cs +++ b/ElectronNET.CLI/ProcessHelper.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.Diagnostics; using System.Runtime.InteropServices; @@ -6,6 +7,33 @@ namespace ElectronNET.CLI { public class ProcessHelper { + private static readonly ConcurrentDictionary _activeProcess = new(); + + public static void KillActive() + { + foreach(var kv in _activeProcess) + { + if (!kv.Key.HasExited) + { + try + { + kv.Key.CloseMainWindow(); + } + catch + { + + } + try + { + kv.Key.Kill(true); + } + catch + { + + } + } + } + } public static int CmdExecute(string command, string workingDirectoryPath, bool output = true, bool waitForExit = true) { using (Process cmd = new Process()) @@ -43,7 +71,11 @@ public static int CmdExecute(string command, string workingDirectoryPath, bool o if (waitForExit) { + _activeProcess[cmd] = true; + cmd.WaitForExit(); + + _activeProcess.TryRemove(cmd, out _); } return cmd.ExitCode; diff --git a/ElectronNET.CLI/Program.cs b/ElectronNET.CLI/Program.cs index 2030030c..8621efc6 100644 --- a/ElectronNET.CLI/Program.cs +++ b/ElectronNET.CLI/Program.cs @@ -4,12 +4,13 @@ using System.Linq; using System.Reflection; using System.Text; +using System.Threading.Tasks; namespace ElectronNET.CLI { class Program { - static void Main(string[] args) + static async Task Main(string[] args) { if (args.Length == 0) { @@ -18,6 +19,12 @@ static void Main(string[] args) Environment.Exit(-1); } + Console.CancelKeyPress += (s,e) => + { + ProcessHelper.KillActive(); + Environment.Exit(-1); + }; + ICommand command = null; switch (args[0]) @@ -35,7 +42,7 @@ static void Main(string[] args) command = new AddCommand(args.Skip(1).ToArray()); break; case VersionCommand.COMMAND_NAME: - command = new VersionCommand(args.Skip(1).ToArray()); + command = new VersionCommand(); break; case "--help": case "--h": @@ -56,7 +63,7 @@ static void Main(string[] args) if (command != null) { - var success = command.ExecuteAsync().Result; + var success = await command.ExecuteAsync(); if (!success) { Environment.Exit(-1); @@ -83,27 +90,27 @@ private static void PrintUsage() Console.WriteLine("\t"); Console.WriteLine("Commands to start the Electron Application:"); Console.WriteLine("\t"); - Console.WriteLine($"\t{StartElectronCommand.COMMAND_NAME.PadRight(NAME_WIDTH)} {StartElectronCommand.COMMAND_DESCRIPTION}"); + Console.WriteLine($"\t{StartElectronCommand.COMMAND_NAME,-NAME_WIDTH} {StartElectronCommand.COMMAND_DESCRIPTION}"); Console.WriteLine("\t"); Console.WriteLine("Command to build the Electron Application:"); Console.WriteLine("\t"); - Console.WriteLine($"\t{BuildCommand.COMMAND_NAME.PadRight(NAME_WIDTH)} {BuildCommand.COMMAND_DESCRIPTION}"); + Console.WriteLine($"\t{BuildCommand.COMMAND_NAME,-NAME_WIDTH} {BuildCommand.COMMAND_DESCRIPTION}"); Console.WriteLine("\t"); Console.WriteLine("Command to init the Electron Application:"); Console.WriteLine("\t"); - Console.WriteLine($"\t{InitCommand.COMMAND_NAME.PadRight(NAME_WIDTH)} {InitCommand.COMMAND_DESCRIPTION}"); + Console.WriteLine($"\t{InitCommand.COMMAND_NAME,-NAME_WIDTH} {InitCommand.COMMAND_DESCRIPTION}"); Console.WriteLine("\t"); Console.WriteLine("Command to add a custom npm packages to the Electron Application:"); Console.WriteLine("\t"); - Console.WriteLine($"\t{AddCommand.COMMAND_NAME.PadRight(NAME_WIDTH)} {AddCommand.COMMAND_DESCRIPTION}"); + Console.WriteLine($"\t{AddCommand.COMMAND_NAME,-NAME_WIDTH} {AddCommand.COMMAND_DESCRIPTION}"); Console.WriteLine("\t"); Console.WriteLine("Commands to see the current ElectronNET version number:"); Console.WriteLine("\t"); - Console.WriteLine($"\t{VersionCommand.COMMAND_NAME.PadRight(NAME_WIDTH)} {VersionCommand.COMMAND_DESCRIPTION}"); + Console.WriteLine($"\t{VersionCommand.COMMAND_NAME,-NAME_WIDTH} {VersionCommand.COMMAND_DESCRIPTION}"); Console.WriteLine("\t"); Console.WriteLine("\t"); @@ -165,7 +172,7 @@ private static void PrintUsage(string command, string description, IList(); + } else + { values.Add(arg); + } } if (currentName != "") Arguments[currentName] = values.ToArray(); From db208e17aa6ad93d7a91e7d32b1523728748ffef Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Fri, 4 Mar 2022 16:02:25 +0100 Subject: [PATCH 11/15] Manually merge in ElectronNET.Host from @theolivenbaum -> main.js needs cleanup --- ElectronNET.Host/api/app.ts | 44 +-- ElectronNET.Host/api/autoUpdater.ts | 26 +- ElectronNET.Host/api/browserWindows.ts | 387 ++++++++++++---------- ElectronNET.Host/api/clipboard.ts | 18 +- ElectronNET.Host/api/desktopCapturer.ts | 25 ++ ElectronNET.Host/api/dialog.ts | 5 +- ElectronNET.Host/api/dock.ts | 4 +- ElectronNET.Host/api/globalShortcut.ts | 3 +- ElectronNET.Host/api/ipc.ts | 22 +- ElectronNET.Host/api/menu.ts | 9 +- ElectronNET.Host/api/tray.ts | 37 ++- ElectronNET.Host/api/webContents.ts | 2 +- ElectronNET.Host/main.js | 388 +++++++++++++++++++---- ElectronNET.Host/splashscreen/index.html | 7 +- ElectronNET.Host/tsconfig.json | 2 +- 15 files changed, 695 insertions(+), 284 deletions(-) create mode 100644 ElectronNET.Host/api/desktopCapturer.ts diff --git a/ElectronNET.Host/api/app.ts b/ElectronNET.Host/api/app.ts index 9ddf64c4..b0037786 100644 --- a/ElectronNET.Host/api/app.ts +++ b/ElectronNET.Host/api/app.ts @@ -2,23 +2,31 @@ import { HubConnection } from "@microsoft/signalr"; let isQuitWindowAllClosed = true; let appWindowAllClosedEventId; -export = (socket: HubConnection, app: Electron.App) => { - - // By default, quit when all windows are closed - app.on('window-all-closed', () => { - // On macOS it is common for applications and their menu bar - // to stay active until the user quits explicitly with Cmd + Q - if (process.platform !== 'darwin' && isQuitWindowAllClosed) { +export = (socket: HubConnection, app: Electron.App, firstTime: boolean) => { + + if (firstTime) { + // By default, quit when all windows are closed + app.on('window-all-closed', () => { + // On macOS it is common for applications and their menu bar + // to stay active until the user quits explicitly with Cmd + Q + if (process.platform !== 'darwin' && isQuitWindowAllClosed) { socket.invoke('AppWindowAllClosed', 0); - app.quit(); - } else if (appWindowAllClosedEventId) { - // If the user is on macOS - // - OR - - // If the user has indicated NOT to quit when all windows are closed, - // emit the event. + app.quit(); + } else if (appWindowAllClosedEventId) { + // If the user is on macOS + // - OR - + // If the user has indicated NOT to quit when all windows are closed, + // emit the event. socket.invoke('AppWindowAllClosed', appWindowAllClosedEventId); - } - }); + } + }); + + app.on('activate', () => { + // On macOS it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + socket.invoke('AppWindowActivate'); + }); + } socket.on('quit-app-window-all-closed-event', (quit) => { isQuitWindowAllClosed = quit; @@ -116,11 +124,11 @@ export = (socket: HubConnection, app: Electron.App) => { let error = {}; if (options) { - const nativeImage = await app.getFileIcon(path, options).catch((errorFileIcon) => error = errorFileIcon); + const nativeImage = await app.getFileIcon(path, options).catch((errorFileIcon) => error = errorFileIcon); socket.invoke('appGetFileIconCompleted', [error, nativeImage]); } else { - const nativeImage = await app.getFileIcon(path).catch((errorFileIcon) => error = errorFileIcon); + const nativeImage = await app.getFileIcon(path).catch((errorFileIcon) => error = errorFileIcon); socket.invoke('appGetFileIconCompleted', [error, nativeImage]); } @@ -190,7 +198,7 @@ export = (socket: HubConnection, app: Electron.App) => { socket.invoke('SendClientResponseBool', guid, success); app.on('second-instance', (event, args = [], workingDirectory = '') => { - socket.invoke('SendClientResponseJArray', guid, [args, workingDirectory]); + socket.invoke('AppActivateFromSecondInstance', {args: args, workingDirectory: workingDirectory}); }); }); diff --git a/ElectronNET.Host/api/autoUpdater.ts b/ElectronNET.Host/api/autoUpdater.ts index 89cfe068..49a2fa25 100644 --- a/ElectronNET.Host/api/autoUpdater.ts +++ b/ElectronNET.Host/api/autoUpdater.ts @@ -1,5 +1,6 @@ import { HubConnection } from "@microsoft/signalr"; import { autoUpdater } from 'electron-updater'; +import {BrowserWindow} from 'electron'; export = (socket: HubConnection, app: Electron.App) => { @@ -126,7 +127,30 @@ export = (socket: HubConnection, app: Electron.App) => { }); socket.on('autoUpdaterQuitAndInstall', async (isSilent, isForceRunAfter) => { - autoUpdater.quitAndInstall(isSilent, isForceRunAfter); + console.log('running autoUpdaterQuitAndInstall'); + + app.removeAllListeners("window-all-closed"); + const windows = BrowserWindow.getAllWindows(); + if (windows && windows.length) { + windows.forEach(w => { + try { + w.removeAllListeners('close'); + w.removeAllListeners('closed'); + w.destroy(); + } catch { + //ignore, probably already destroyed + } + }); + } + + //The call to quitAndInstall needs to happen after the windows + //get a chance to close and release resources, so it must be done on a timeout + setTimeout(() => { + console.log('running autoUpdater.quitAndInstall'); + console.log('isSilent:' + isSilent); + console.log('isForceRunAfter:' + isForceRunAfter); + autoUpdater.quitAndInstall(isSilent, isForceRunAfter); + }, 100); }); socket.on('autoUpdaterDownloadUpdate', async (guid) => { diff --git a/ElectronNET.Host/api/browserWindows.ts b/ElectronNET.Host/api/browserWindows.ts index d0b1f7a2..b36f5601 100644 --- a/ElectronNET.Host/api/browserWindows.ts +++ b/ElectronNET.Host/api/browserWindows.ts @@ -1,6 +1,7 @@ import { HubConnection } from "@microsoft/signalr"; import { BrowserWindow, Menu, nativeImage } from 'electron'; import { browserViewMediateService } from './browserView'; + const path = require('path'); const windows: Electron.BrowserWindow[] = (global['browserWindows'] = global['browserWindows'] || []) as Electron.BrowserWindow[]; let readyToShowWindowsIds: number[] = []; @@ -8,19 +9,21 @@ let window, lastOptions; let mainWindowURL; const proxyToCredentialsMap: { [proxy: string]: string } = (global['proxyToCredentialsMap'] = global['proxyToCredentialsMap'] || []) as { [proxy: string]: string }; -export = (socket: HubConnection, app: Electron.App) => { - - app.on('login', (event, webContents, request, authInfo, callback) => { - if (authInfo.isProxy) { - let proxy = `${authInfo.host}:${authInfo.port}` - if (proxy in proxyToCredentialsMap && proxyToCredentialsMap[proxy].split(':').length === 2) { - event.preventDefault() - let user = proxyToCredentialsMap[proxy].split(':')[0] - let pass = proxyToCredentialsMap[proxy].split(':')[1] - callback(user, pass) +export = (socket: HubConnection, app: Electron.App, firstTime: boolean) => { + + if (firstTime) { + app.on('login', (event, webContents, request, authInfo, callback) => { + if (authInfo.isProxy) { + let proxy = `${authInfo.host}:${authInfo.port}` + if (proxy in proxyToCredentialsMap && proxyToCredentialsMap[proxy].split(':').length === 2) { + event.preventDefault() + let user = proxyToCredentialsMap[proxy].split(':')[0] + let pass = proxyToCredentialsMap[proxy].split(':')[1] + callback(user, pass) + } } - } - }) + }) + } socket.on('register-browserWindow-ready-to-show', (id) => { if (readyToShowWindowsIds.includes(id)) { @@ -28,194 +31,202 @@ export = (socket: HubConnection, app: Electron.App) => { socket.invoke('browserWindow-ready-to-show' + id); } - getWindowById(id).on('ready-to-show', () => { + getWindowById(id)?.on('ready-to-show', () => { readyToShowWindowsIds.push(id); socket.invoke('BrowserWindowReadyToShow', id); }); }); socket.on('register-browserWindow-page-title-updated', (id) => { - getWindowById(id).on('page-title-updated', (event, title) => { + getWindowById(id)?.on('page-title-updated', (event, title) => { socket.invoke('BrowserWindowPageTitleUpdated', id, title); }); }); socket.on('register-browserWindow-close', (id) => { - getWindowById(id).on('close', () => { + getWindowById(id)?.on('close', () => { socket.invoke('BrowserWindowClose', id); }); }); socket.on('register-browserWindow-closed', (id) => { - getWindowById(id).on('closed', () => { + getWindowById(id)?.on('closed', () => { console.log(id); socket.invoke('BrowserWindowClosed', id); }); }); socket.on('register-browserWindow-session-end', (id) => { - getWindowById(id).on('session-end', () => { + getWindowById(id)?.on('session-end', () => { socket.invoke('BrowserWindowSessionEnd', id); }); }); socket.on('register-browserWindow-unresponsive', (id) => { - getWindowById(id).on('unresponsive', () => { + getWindowById(id)?.on('unresponsive', () => { socket.invoke('BrowserWindowUnresponsive', id); }); }); socket.on('register-browserWindow-responsive', (id) => { - getWindowById(id).on('responsive', () => { + getWindowById(id)?.on('responsive', () => { socket.invoke('BrowserWindowResponsive', id); }); }); //Testing socket.on('register-browserWindow-blur', (id) => { - getWindowById(id).on('blur', () => { + getWindowById(id)?.on('blur', () => { console.log("BLUR"); socket.invoke('BrowserWindowBlur', id); }); }); socket.on('register-browserWindow-focus', (id) => { - getWindowById(id).on('focus', () => { + getWindowById(id)?.on('focus', () => { socket.invoke('BrowserWindowFocus', id); }); }); socket.on('register-browserWindow-show', (id) => { - getWindowById(id).on('show', () => { + getWindowById(id)?.on('show', () => { socket.invoke('BrowserWindowShow', id); }); }); socket.on('register-browserWindow-hide', (id) => { - getWindowById(id).on('hide', () => { + getWindowById(id)?.on('hide', () => { socket.invoke('BrowserWindowHide', id); }); }); socket.on('register-browserWindow-maximize', (id) => { - getWindowById(id).on('maximize', () => { + getWindowById(id)?.on('maximize', () => { socket.invoke('BrowserWindowMaximize', id); }); }); socket.on('register-browserWindow-unmaximize', (id) => { - getWindowById(id).on('unmaximize', () => { + getWindowById(id)?.on('unmaximize', () => { socket.invoke('BrowserWindowUnmaximize', id); }); }); socket.on('register-browserWindow-minimize', (id) => { - getWindowById(id).on('minimize', () => { + getWindowById(id)?.on('minimize', () => { socket.invoke('BrowserWindowMinimize', id); }); }); socket.on('register-browserWindow-restore', (id) => { - getWindowById(id).on('restore', () => { + getWindowById(id)?.on('restore', () => { socket.invoke('BrowserWindowRestore', id); }); }); socket.on('register-browserWindow-resize', (id) => { - getWindowById(id).on('resize', () => { + getWindowById(id)?.on('resize', () => { socket.invoke('BrowserWindowResize', id); }); }); socket.on('register-browserWindow-move', (id) => { - getWindowById(id).on('move', () => { + getWindowById(id)?.on('move', () => { socket.invoke('BrowserWindowMove', id); }); }); socket.on('register-browserWindow-moved', (id) => { - getWindowById(id).on('moved', () => { + getWindowById(id)?.on('moved', () => { socket.invoke('BrowserWindowMoved', id); }); }); socket.on('register-browserWindow-enter-full-screen', (id) => { - getWindowById(id).on('enter-full-screen', () => { + getWindowById(id)?.on('enter-full-screen', () => { socket.invoke('BrowserWindowEnterFullScreen', id); }); }); socket.on('register-browserWindow-leave-full-screen', (id) => { - getWindowById(id).on('leave-full-screen', () => { + getWindowById(id)?.on('leave-full-screen', () => { socket.invoke('BrowserWindowLeaveFullScreen', id); }); }); socket.on('register-browserWindow-enter-html-full-screen', (id) => { - getWindowById(id).on('enter-html-full-screen', () => { + getWindowById(id)?.on('enter-html-full-screen', () => { socket.invoke('BrowserWindowEnterHtmlFullScreen', id); }); }); socket.on('register-browserWindow-leave-html-full-screen', (id) => { - getWindowById(id).on('leave-html-full-screen', () => { + getWindowById(id)?.on('leave-html-full-screen', () => { socket.invoke('BrowserWindowLeaveHtmlFullScreen', id); }); }); socket.on('register-browserWindow-app-command', (id) => { - getWindowById(id).on('app-command', (event, command) => { + getWindowById(id)?.on('app-command', (event, command) => { socket.invoke('BrowserWindowAppCommand', id, command); }); }); socket.on('register-browserWindow-scroll-touch-begin', (id) => { - getWindowById(id).on('scroll-touch-begin', () => { + getWindowById(id)?.on('scroll-touch-begin', () => { socket.invoke('BrowserWindowScrollTouchBegin', id); }); }); socket.on('register-browserWindow-scroll-touch-end', (id) => { - getWindowById(id).on('scroll-touch-end', () => { + getWindowById(id)?.on('scroll-touch-end', () => { socket.invoke('BrowserWindowScrollTouchEnd', id); }); }); socket.on('register-browserWindow-scroll-touch-edge', (id) => { - getWindowById(id).on('scroll-touch-edge', () => { + getWindowById(id)?.on('scroll-touch-edge', () => { socket.invoke('BrowserWindowScrollTouchEdge', id); }); }); socket.on('register-browserWindow-swipe', (id) => { - getWindowById(id).on('swipe', (event, direction) => { + getWindowById(id)?.on('swipe', (event, direction) => { socket.invoke('BrowserWindowSwipe', id, direction); }); }); socket.on('register-browserWindow-sheet-begin', (id) => { - getWindowById(id).on('sheet-begin', () => { + getWindowById(id)?.on('sheet-begin', () => { socket.invoke('BrowserWindowSheetBegin', id); }); }); socket.on('register-browserWindow-sheet-end', (id) => { - getWindowById(id).on('sheet-end', () => { + getWindowById(id)?.on('sheet-end', () => { socket.invoke('BrowserWindowSheetEnd', id); }); }); socket.on('register-browserWindow-new-window-for-tab', (id) => { - getWindowById(id).on('new-window-for-tab', () => { + getWindowById(id)?.on('new-window-for-tab', () => { socket.invoke('BrowserWindowNewWindowForTab', id); }); }); socket.on('createBrowserWindow', (guid, options, loadUrl) => { if (options.webPreferences && !('nodeIntegration' in options.webPreferences)) { - options = { ...options, webPreferences: { ...options.webPreferences, nodeIntegration: true, contextIsolation: false } }; + options = { + ...options, + webPreferences: {...options.webPreferences, nodeIntegration: true, contextIsolation: false} + }; } else if (!options.webPreferences) { - options = { ...options, webPreferences: { nodeIntegration: true, contextIsolation: false } }; + options = {...options, webPreferences: {nodeIntegration: true, contextIsolation: false}}; + } + + if (options.x && options.y && options.x == 0 && options.y == 0) { + delete options.x; + delete options.y; } // we dont want to recreate the window when watch is ready. @@ -240,6 +251,14 @@ export = (socket: HubConnection, app: Electron.App) => { } window.on('ready-to-show', () => { + try { + window.id; + } catch (error) { + if (error.message === 'Object has been destroyed') { + return; + } + } + if (readyToShowWindowsIds.includes(window.id)) { readyToShowWindowsIds = readyToShowWindowsIds.filter(value => value !== window.id); } else { @@ -247,33 +266,22 @@ export = (socket: HubConnection, app: Electron.App) => { } }); - lastOptions = options; - window.on('closed', (sender) => { - for (let index = 0; index < windows.length; index++) { - const windowItem = windows[index]; - try { - windowItem.id; - } catch (error) { - if (error.message === 'Object has been destroyed') { - windows.splice(index, 1); - - const ids = []; - windows.forEach(x => ids.push(x.id)); - console.log("------------------------------------"); - console.log(ids); - socket.invoke('SendClientResponseInt', ids); + again: + for (let index = 0; index < windows.length; index++) { + const windowItem = windows[index]; + try { + windowItem.id; + } catch (error) { + if (error.message === 'Object has been destroyed') { + windows.splice(index, 1); + break again; + } } } - } - }); - - app.on('activate', () => { - // On macOS it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (window === null && lastOptions) { - window = new BrowserWindow(lastOptions); - } + const ids = []; + windows.forEach(x => ids.push(x.id)); + socket.invoke('BootstrapUpdateOpenIDsEvent', ids); }); if (loadUrl) { @@ -297,326 +305,356 @@ export = (socket: HubConnection, app: Electron.App) => { }); socket.on('browserWindowDestroy', (id) => { - getWindowById(id).destroy(); + getWindowById(id)?.destroy(); + }); + + socket.on('browserWindowDestroyAll', (guid) => { + const windows = BrowserWindow.getAllWindows(); + let count = 0; + if (windows.length) { + windows.forEach(w => { + try { + w.removeAllListeners('close'); + w.hide(); + w.destroy(); + count++; + } catch { + //ignore, probably already destroyed + } + }); + } + socket.invoke('SendClientResponseInt', guid, count); }); socket.on('browserWindowClose', (id) => { - getWindowById(id).close(); + getWindowById(id)?.close(); }); socket.on('browserWindowFocus', (id) => { - getWindowById(id).focus(); + getWindowById(id)?.focus(); }); socket.on('browserWindowBlur', (id) => { - getWindowById(id).blur(); + getWindowById(id)?.blur(); }); socket.on('browserWindowIsFocused', (guid, id) => { - const isFocused = getWindowById(id).isFocused(); + const isFocused = getWindowById(id)?.isFocused() ?? null; socket.invoke('SendClientResponseBool', guid, isFocused); }); socket.on('browserWindowIsDestroyed', (guid, id) => { - const isDestroyed = getWindowById(id).isDestroyed(); - - socket.invoke('SendClientResponseBool', guid, isDestroyed); + const w = getWindowById(id); + if (w) { + const isDestroyed = w.isDestroyed(); + socket.invoke('SendClientResponseBool', guid, isDestroyed); + } else { + socket.invoke('SendClientResponseBool', guid, true); + } }); socket.on('browserWindowShow', (id) => { - getWindowById(id).show(); + getWindowById(id)?.show(); }); socket.on('browserWindowShowInactive', (id) => { - getWindowById(id).showInactive(); + getWindowById(id)?.showInactive(); }); socket.on('browserWindowHide', (id) => { - getWindowById(id).hide(); + getWindowById(id)?.hide(); }); socket.on('browserWindowIsVisible', (guid, id) => { - const isVisible = getWindowById(id).isVisible(); + const isVisible = getWindowById(id)?.isVisible() ?? null; socket.invoke('SendClientResponseBool', guid, isVisible); }); socket.on('browserWindowIsModal', (guid, id) => { - const isModal = getWindowById(id).isModal(); + const isModal = getWindowById(id)?.isModal() ?? null; socket.invoke('SendClientResponseBool', guid, isModal); }); socket.on('browserWindowMaximize', (id) => { - getWindowById(id).maximize(); + getWindowById(id)?.maximize(); }); socket.on('browserWindowUnmaximize', (id) => { - getWindowById(id).unmaximize(); + getWindowById(id)?.unmaximize(); }); socket.on('browserWindowIsMaximized', (guid, id) => { - const isMaximized = getWindowById(id).isMaximized(); + const isMaximized = getWindowById(id)?.isMaximized() ?? null; socket.invoke('SendClientResponseBool', guid, isMaximized); }); socket.on('browserWindowMinimize', (id) => { - getWindowById(id).minimize(); + getWindowById(id)?.minimize(); }); socket.on('browserWindowRestore', (id) => { - getWindowById(id).restore(); + getWindowById(id)?.restore(); }); socket.on('browserWindowIsMinimized', (guid, id) => { - const isMinimized = getWindowById(id).isMinimized(); + const isMinimized = getWindowById(id)?.isMinimized() ?? null; socket.invoke('SendClientResponseBool', guid, isMinimized); }); socket.on('browserWindowSetFullScreen', (id, fullscreen) => { - getWindowById(id).setFullScreen(fullscreen); + getWindowById(id)?.setFullScreen(fullscreen); + }); + + socket.on('browserWindowSetBackgroundColor', (id, color) => { + getWindowById(id)?.setBackgroundColor(color); }); socket.on('browserWindowIsFullScreen', (guid, id) => { - const isFullScreen = getWindowById(id).isFullScreen(); + const isFullScreen = getWindowById(id)?.isFullScreen() ?? null; socket.invoke('SendClientResponseBool', guid, isFullScreen); }); socket.on('browserWindowSetAspectRatio', (id, aspectRatio, extraSize) => { - getWindowById(id).setAspectRatio(aspectRatio, extraSize); + getWindowById(id)?.setAspectRatio(aspectRatio, extraSize); }); socket.on('browserWindowPreviewFile', (id, path, displayname) => { - getWindowById(id).previewFile(path, displayname); + getWindowById(id)?.previewFile(path, displayname); }); socket.on('browserWindowCloseFilePreview', (id) => { - getWindowById(id).closeFilePreview(); + getWindowById(id)?.closeFilePreview(); }); socket.on('browserWindowSetBounds', (id, bounds, animate) => { - getWindowById(id).setBounds(bounds, animate); + getWindowById(id)?.setBounds(bounds, animate); }); socket.on('browserWindowGetBounds', (guid, id) => { - const rectangle = getWindowById(id).getBounds(); + const rectangle = getWindowById(id)?.getBounds() ?? null; socket.invoke('SendClientResponseJObject', guid, rectangle); }); socket.on('browserWindowSetContentBounds', (id, bounds, animate) => { - getWindowById(id).setContentBounds(bounds, animate); + getWindowById(id)?.setContentBounds(bounds, animate); }); socket.on('browserWindowGetContentBounds', (guid, id) => { - const rectangle = getWindowById(id).getContentBounds(); + const rectangle = getWindowById(id)?.getContentBounds() ?? null; socket.invoke('SendClientResponseBool', guid, rectangle); }); socket.on('browserWindowSetSize', (id, width, height, animate) => { - getWindowById(id).setSize(width, height, animate); + getWindowById(id)?.setSize(width, height, animate); }); socket.on('browserWindowGetSize', (guid, id) => { - const size = getWindowById(id).getSize(); + const size = getWindowById(id)?.getSize() ?? null; socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetContentSize', (id, width, height, animate) => { - getWindowById(id).setContentSize(width, height, animate); + getWindowById(id)?.setContentSize(width, height, animate); }); socket.on('browserWindowGetContentSize', (guid, id) => { - const size = getWindowById(id).getContentSize(); + const size = getWindowById(id)?.getContentSize() ?? null; socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetMinimumSize', (id, width, height) => { - getWindowById(id).setMinimumSize(width, height); + getWindowById(id)?.setMinimumSize(width, height); }); socket.on('browserWindowGetMinimumSize', (guid, id) => { - const size = getWindowById(id).getMinimumSize(); + const size = getWindowById(id)?.getMinimumSize() ?? null; socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetMaximumSize', (id, width, height) => { - getWindowById(id).setMaximumSize(width, height); + getWindowById(id)?.setMaximumSize(width, height); }); socket.on('browserWindowGetMaximumSize', (guid, id) => { - const size = getWindowById(id).getMaximumSize(); + const size = getWindowById(id)?.getMaximumSize() ?? null; socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetResizable', (id, resizable) => { - getWindowById(id).setResizable(resizable); + getWindowById(id)?.setResizable(resizable); }); socket.on('browserWindowIsResizable', (guid, id) => { - const resizable = getWindowById(id).isResizable(); + const resizable = getWindowById(id)?.isResizable() ?? null; socket.invoke('SendClientResponseBool', guid, resizable); }); socket.on('browserWindowSetMovable', (id, movable) => { - getWindowById(id).setMovable(movable); + getWindowById(id)?.setMovable(movable); }); socket.on('browserWindowIsMovable', (guid, id) => { - const movable = getWindowById(id).isMovable(); + const movable = getWindowById(id)?.isMovable() ?? null; socket.invoke('SendClientResponseBool', guid, movable); }); socket.on('browserWindowSetMinimizable', (id, minimizable) => { - getWindowById(id).setMinimizable(minimizable); + getWindowById(id)?.setMinimizable(minimizable); }); socket.on('browserWindowIsMinimizable', (guid, id) => { - const minimizable = getWindowById(id).isMinimizable(); + const minimizable = getWindowById(id)?.isMinimizable() ?? null; socket.invoke('SendClientResponseBool', guid, minimizable); }); socket.on('browserWindowSetMaximizable', (id, maximizable) => { - getWindowById(id).setMaximizable(maximizable); + getWindowById(id)?.setMaximizable(maximizable); }); socket.on('browserWindowIsMaximizable', (guid, id) => { - const maximizable = getWindowById(id).isMaximizable(); + const maximizable = getWindowById(id)?.isMaximizable() ?? null; socket.invoke('SendClientResponseBool', guid, maximizable); }); socket.on('browserWindowSetFullScreenable', (id, fullscreenable) => { - getWindowById(id).setFullScreenable(fullscreenable); + getWindowById(id)?.setFullScreenable(fullscreenable); }); socket.on('browserWindowIsFullScreenable', (guid, id) => { - const fullscreenable = getWindowById(id).isFullScreenable(); + const fullscreenable = getWindowById(id)?.isFullScreenable() ?? null; socket.invoke('SendClientResponseBool', guid, fullscreenable); }); socket.on('browserWindowSetClosable', (id, closable) => { - getWindowById(id).setClosable(closable); + getWindowById(id)?.setClosable(closable); }); socket.on('browserWindowIsClosable', (guid, id) => { - const closable = getWindowById(id).isClosable(); + const closable = getWindowById(id)?.isClosable() ?? null; socket.invoke('SendClientResponseBool', guid, closable); }); socket.on('browserWindowSetAlwaysOnTop', (id, flag, level, relativeLevel) => { - getWindowById(id).setAlwaysOnTop(flag, level, relativeLevel); + getWindowById(id)?.setAlwaysOnTop(flag, level, relativeLevel); }); socket.on('browserWindowIsAlwaysOnTop', (guid, id) => { - const isAlwaysOnTop = getWindowById(id).isAlwaysOnTop(); + const isAlwaysOnTop = getWindowById(id)?.isAlwaysOnTop() ?? null; socket.invoke('SendClientResponseBool', guid, isAlwaysOnTop); }); socket.on('browserWindowCenter', (id) => { - getWindowById(id).center(); + getWindowById(id)?.center(); }); socket.on('browserWindowSetPosition', (id, x, y, animate) => { - getWindowById(id).setPosition(x, y, animate); + getWindowById(id)?.setPosition(x, y, animate); }); socket.on('browserWindowGetPosition', (guid, id) => { - const position = getWindowById(id).getPosition(); + const position = getWindowById(id)?.getPosition() ?? null; socket.invoke('SendClientResponseJArray', guid, position); }); socket.on('browserWindowSetTitle', (id, title) => { - getWindowById(id).setTitle(title); + getWindowById(id)?.setTitle(title); }); socket.on('browserWindowGetTitle', (guid, id) => { - const title = getWindowById(id).getTitle(); + const title = getWindowById(id)?.getTitle() ?? null; socket.invoke('SendClientResponseString', guid, title); }); + socket.on('browserWindowSetTitle', (id, title) => { + getWindowById(id)?.setTitle(title); + }); + socket.on('browserWindowSetSheetOffset', (id, offsetY, offsetX) => { if (offsetX) { - getWindowById(id).setSheetOffset(offsetY, offsetX); + getWindowById(id)?.setSheetOffset(offsetY, offsetX); } else { - getWindowById(id).setSheetOffset(offsetY); + getWindowById(id)?.setSheetOffset(offsetY); } }); socket.on('browserWindowFlashFrame', (id, flag) => { - getWindowById(id).flashFrame(flag); + getWindowById(id)?.flashFrame(flag); }); socket.on('browserWindowSetSkipTaskbar', (id, skip) => { - getWindowById(id).setSkipTaskbar(skip); + getWindowById(id)?.setSkipTaskbar(skip); }); socket.on('browserWindowSetKiosk', (id, flag) => { - getWindowById(id).setKiosk(flag); + getWindowById(id)?.setKiosk(flag); }); socket.on('browserWindowIsKiosk', (guid, id) => { - const isKiosk = getWindowById(id).isKiosk(); + const isKiosk = getWindowById(id)?.isKiosk() ?? null; socket.invoke('SendClientResponseBool', guid, isKiosk); }); socket.on('browserWindowGetNativeWindowHandle', (id) => { - const nativeWindowHandle = getWindowById(id).getNativeWindowHandle().readInt32LE(0).toString(16); + const nativeWindowHandle = getWindowById(id)?.getNativeWindowHandle()?.readInt32LE(0)?.toString(16) ?? null; socket.invoke('SendClientResponseString', nativeWindowHandle); }); socket.on('browserWindowSetRepresentedFilename', (id, filename) => { - getWindowById(id).setRepresentedFilename(filename); + getWindowById(id)?.setRepresentedFilename(filename); }); socket.on('browserWindowGetRepresentedFilename', (guid, id) => { - const pathname = getWindowById(id).getRepresentedFilename(); + const pathname = getWindowById(id)?.getRepresentedFilename() ?? null; socket.invoke('SendClientResponseString', guid, pathname); }); socket.on('browserWindowSetDocumentEdited', (id, edited) => { - getWindowById(id).setDocumentEdited(edited); + getWindowById(id)?.setDocumentEdited(edited); }); socket.on('browserWindowIsDocumentEdited', (guid, id) => { - const edited = getWindowById(id).isDocumentEdited(); + const edited = getWindowById(id)?.isDocumentEdited() ?? null; socket.invoke('SendClientResponseBool', guid, edited); }); socket.on('browserWindowFocusOnWebView', (id) => { - getWindowById(id).focusOnWebView(); + getWindowById(id)?.focusOnWebView(); }); socket.on('browserWindowBlurWebView', (id) => { - getWindowById(id).blurWebView(); + getWindowById(id)?.blurWebView(); }); socket.on('browserWindowLoadURL', (id, url, options) => { - getWindowById(id).loadURL(url, options); + getWindowById(id)?.loadURL(url, options); }); socket.on('browserWindowReload', (id) => { - getWindowById(id).reload(); + getWindowById(id)?.reload(); }); socket.on('browserWindowSetMenu', (id, menuItems) => { @@ -630,11 +668,11 @@ export = (socket: HubConnection, app: Electron.App) => { }); } - getWindowById(id).setMenu(menu); + getWindowById(id)?.setMenu(menu); }); socket.on('browserWindowRemoveMenu', (id) => { - getWindowById(id).removeMenu(); + getWindowById(id)?.removeMenu(); }); function addMenuItemClickConnector(menuItems, callback) { @@ -644,25 +682,27 @@ export = (socket: HubConnection, app: Electron.App) => { } if ('id' in item && item.id) { - item.click = () => { callback(item.id); }; + item.click = () => { + callback(item.id); + }; } }); } socket.on('browserWindowSetProgressBar', (id, progress) => { - getWindowById(id).setProgressBar(progress); + getWindowById(id)?.setProgressBar(progress); }); socket.on('browserWindowSetProgressBar', (id, progress, options) => { - getWindowById(id).setProgressBar(progress, options); + getWindowById(id)?.setProgressBar(progress, options); }); socket.on('browserWindowSetHasShadow', (id, hasShadow) => { - getWindowById(id).setHasShadow(hasShadow); + getWindowById(id)?.setHasShadow(hasShadow); }); socket.on('browserWindowHasShadow', (guid, id) => { - const hasShadow = getWindowById(id).hasShadow(); + const hasShadow = getWindowById(id)?.hasShadow() ?? null; socket.invoke('SendClientResponseBool', guid, hasShadow); }); @@ -676,82 +716,82 @@ export = (socket: HubConnection, app: Electron.App) => { }; }); - const success = getWindowById(id).setThumbarButtons(thumbarButtons); + const success = getWindowById(id)?.setThumbarButtons(thumbarButtons) ?? null; socket.invoke('SendClientResponseBool', success); }); socket.on('browserWindowSetThumbnailClip', (id, rectangle) => { - getWindowById(id).setThumbnailClip(rectangle); + getWindowById(id)?.setThumbnailClip(rectangle); }); socket.on('browserWindowSetThumbnailToolTip', (id, toolTip) => { - getWindowById(id).setThumbnailToolTip(toolTip); + getWindowById(id)?.setThumbnailToolTip(toolTip); }); socket.on('browserWindowSetAppDetails', (id, options) => { - getWindowById(id).setAppDetails(options); + getWindowById(id)?.setAppDetails(options); }); socket.on('browserWindowShowDefinitionForSelection', (id) => { - getWindowById(id).showDefinitionForSelection(); + getWindowById(id)?.showDefinitionForSelection(); }); socket.on('browserWindowSetAutoHideMenuBar', (id, hide) => { - getWindowById(id).setAutoHideMenuBar(hide); + getWindowById(id)?.setAutoHideMenuBar(hide); }); socket.on('browserWindowIsMenuBarAutoHide', (guid, id) => { - const isMenuBarAutoHide = getWindowById(id).isMenuBarAutoHide(); + const isMenuBarAutoHide = getWindowById(id)?.isMenuBarAutoHide() ?? null; socket.invoke('SendClientResponseBool', guid, isMenuBarAutoHide); }); socket.on('browserWindowSetMenuBarVisibility', (id, visible) => { - getWindowById(id).setMenuBarVisibility(visible); + getWindowById(id)?.setMenuBarVisibility(visible); }); socket.on('browserWindowIsMenuBarVisible', (guid, id) => { - const isMenuBarVisible = getWindowById(id).isMenuBarVisible(); + const isMenuBarVisible = getWindowById(id)?.isMenuBarVisible() ?? null; socket.invoke('SendClientResponseBool', guid, isMenuBarVisible); }); socket.on('browserWindowSetVisibleOnAllWorkspaces', (id, visible) => { - getWindowById(id).setVisibleOnAllWorkspaces(visible); + getWindowById(id)?.setVisibleOnAllWorkspaces(visible); }); socket.on('browserWindowIsVisibleOnAllWorkspaces', (guid, id) => { - const isVisibleOnAllWorkspaces = getWindowById(id).isVisibleOnAllWorkspaces(); + const isVisibleOnAllWorkspaces = getWindowById(id)?.isVisibleOnAllWorkspaces() ?? null; socket.invoke('SendClientResponseBool', guid, isVisibleOnAllWorkspaces); }); socket.on('browserWindowSetIgnoreMouseEvents', (id, ignore) => { - getWindowById(id).setIgnoreMouseEvents(ignore); + getWindowById(id)?.setIgnoreMouseEvents(ignore); }); socket.on('browserWindowSetContentProtection', (id, enable) => { - getWindowById(id).setContentProtection(enable); + getWindowById(id)?.setContentProtection(enable); }); socket.on('browserWindowSetFocusable', (id, focusable) => { - getWindowById(id).setFocusable(focusable); + getWindowById(id)?.setFocusable(focusable); }); socket.on('browserWindowSetParentWindow', (id, parent) => { const browserWindow = BrowserWindow.fromId(parent.id); - getWindowById(id).setParentWindow(browserWindow); + getWindowById(id)?.setParentWindow(browserWindow); }); socket.on('browserWindowGetParentWindow', (guid, id) => { - const browserWindow = getWindowById(id).getParentWindow(); + const browserWindow = getWindowById(id)?.getParentWindow() ?? null; socket.invoke('SendClientResponseInt', guid, browserWindow.id); }); socket.on('browserWindowGetChildWindows', (guid, id) => { - const browserWindows = getWindowById(id).getChildWindows(); + const browserWindows = getWindowById(id)?.getChildWindows() ?? null; const ids = []; @@ -763,23 +803,36 @@ export = (socket: HubConnection, app: Electron.App) => { }); socket.on('browserWindowSetAutoHideCursor', (id, autoHide) => { - getWindowById(id).setAutoHideCursor(autoHide); + getWindowById(id)?.setAutoHideCursor(autoHide); }); socket.on('browserWindowSetVibrancy', (id, type) => { - getWindowById(id).setVibrancy(type); + getWindowById(id)?.setVibrancy(type); + }); + + socket.on('browserWindowSetExcludedFromShownWindowsMenu', (id) => { + const w = getWindowById(id); + if (w) { + w.excludedFromShownWindowsMenu = true; + } }); socket.on('browserWindow-setBrowserView', (id, browserViewId) => { - getWindowById(id).setBrowserView(browserViewMediateService(browserViewId)); + getWindowById(id)?.setBrowserView(browserViewMediateService(browserViewId)); }); function getWindowById(id: number): Electron.BrowserWindow { for (let index = 0; index < windows.length; index++) { const element = windows[index]; - if (element.id === id) { - return element; + try { + if (element.id === id) { + return element; + } + } catch { + //Accessing .id might throw 'Object has been destroyed', so we ignore it here + //The "closed" event should clean this up } } + return null; } }; diff --git a/ElectronNET.Host/api/clipboard.ts b/ElectronNET.Host/api/clipboard.ts index 74f539e0..ae38fc00 100644 --- a/ElectronNET.Host/api/clipboard.ts +++ b/ElectronNET.Host/api/clipboard.ts @@ -58,6 +58,9 @@ export = (socket: HubConnection) => { }); socket.on('clipboard-write', (data, type) => { + if (data.hasOwnProperty("image")) { + data["image"] = deserializeImage(data["image"]); + } clipboard.write(data, type); }); @@ -68,16 +71,19 @@ export = (socket: HubConnection) => { socket.on('clipboard-writeImage', (data, type) => { const dataContent = JSON.parse(data); - const image = nativeImage.createEmpty(); + const image = deserializeImage(dataContent); + clipboard.writeImage(image, type); + }); + function deserializeImage(data) { + const image = nativeImage.createEmpty(); // tslint:disable-next-line: forin - for (const key in dataContent) { + for (const key in data) { const scaleFactor = key; const bytes = data[key]; const buffer = Buffer.from(bytes, 'base64'); - image.addRepresentation({ scaleFactor: +scaleFactor, buffer: buffer }); + image.addRepresentation({scaleFactor: +scaleFactor, buffer: buffer}); } - - clipboard.writeImage(image, type); - }); + return image; + } }; diff --git a/ElectronNET.Host/api/desktopCapturer.ts b/ElectronNET.Host/api/desktopCapturer.ts new file mode 100644 index 00000000..0a5e50db --- /dev/null +++ b/ElectronNET.Host/api/desktopCapturer.ts @@ -0,0 +1,25 @@ +import { HubConnection } from "@microsoft/signalr"; +import { desktopCapturer } from 'electron'; + +let electronSocket; + +export = (socket: HubConnection) => { + socket.on('desktop-capturer-get-sources', (options) => { + desktopCapturer.getSources(options).then(sources => { + + const result = sources.map(src => { + return { + appIcon: src.appIcon, + name: src.name, + id: src.id, + display_id: src.display_id, + thumbnail: { 1: src.thumbnail.toPNG().toString('base64') } + }; + }); + + socket.invoke('SendClientResponseJObject', result); + }); + }); + + +};; diff --git a/ElectronNET.Host/api/dialog.ts b/ElectronNET.Host/api/dialog.ts index 68099b6d..240ed44c 100644 --- a/ElectronNET.Host/api/dialog.ts +++ b/ElectronNET.Host/api/dialog.ts @@ -7,11 +7,12 @@ export = (socket: HubConnection) => { const window = BrowserWindow.fromId(browserWindow.id); const messageBoxReturnValue = await dialog.showMessageBox(window, options); - socket.invoke('SendClientResponseJArray', guid, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); + socket.invoke('SendClientResponseJArray', guid, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); } else { + const id = guid || options; const messageBoxReturnValue = await dialog.showMessageBox(browserWindow); - socket.invoke('SendClientResponseJArray', guid, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); + socket.invoke('SendClientResponseJArray', guid, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); } }); diff --git a/ElectronNET.Host/api/dock.ts b/ElectronNET.Host/api/dock.ts index c4f1f271..c4ca52d0 100644 --- a/ElectronNET.Host/api/dock.ts +++ b/ElectronNET.Host/api/dock.ts @@ -68,7 +68,9 @@ export = (socket: HubConnection) => { } if ('id' in item && item.id) { - item.click = () => { callback(item.id); }; + item.click = () => { + callback(item.id); + }; } }); } diff --git a/ElectronNET.Host/api/globalShortcut.ts b/ElectronNET.Host/api/globalShortcut.ts index 0febc56a..fce2a714 100644 --- a/ElectronNET.Host/api/globalShortcut.ts +++ b/ElectronNET.Host/api/globalShortcut.ts @@ -21,6 +21,7 @@ export = (socket: HubConnection) => { socket.on('globalShortcut-unregisterAll', () => { try { globalShortcut.unregisterAll(); - } catch (error) { } + } catch (error) { + } }); }; diff --git a/ElectronNET.Host/api/ipc.ts b/ElectronNET.Host/api/ipc.ts index 2a522014..189275c1 100644 --- a/ElectronNET.Host/api/ipc.ts +++ b/ElectronNET.Host/api/ipc.ts @@ -1,11 +1,26 @@ import { HubConnection } from "@microsoft/signalr"; -import { ipcMain, BrowserWindow, BrowserView } from 'electron'; +import {BrowserView, BrowserWindow, ipcMain, webContents} from 'electron'; export = (socket: HubConnection) => { socket.on('registerIpcMainChannel', (channel) => { ipcMain.on(channel, (event, args) => { - socket.invoke("IpcOnChannel", channel, [event.preventDefault(), args]); + event.preventDefault(); + socket.invoke("IpcOnChannel", channel, [args]); + event.returnValue = null; + }); + }); + + socket.on('registerIpcMainChannelWithId', (channel) => { + ipcMain.on(channel, (event, args) => { + event.preventDefault(); + let wcId = event.sender.id; + let wc = webContents.fromId(wcId) + let bw = BrowserWindow.fromWebContents(wc); + if (bw) { + socket.invoke("IpcMainChannelWithId", channel, {id: bw.id, wcId: wcId, args: [args]}); + } + event.returnValue = null; }); }); @@ -16,13 +31,16 @@ export = (socket: HubConnection) => { socket.on(channel + 'Sync', (result) => { event.returnValue = result; }); + event.preventDefault(); socket.invoke("IpcOnChannel", channel, [event.preventDefault(), args]); }); }); socket.on('registerOnceIpcMainChannel', (guid, channel) => { ipcMain.once(channel, (event, args) => { + event.preventDefault(); socket.invoke("SendClientResponseJArray",guid, [event.preventDefault(), args]); + event.returnValue = null; }); }); diff --git a/ElectronNET.Host/api/menu.ts b/ElectronNET.Host/api/menu.ts index 21b39520..2ac5af2f 100644 --- a/ElectronNET.Host/api/menu.ts +++ b/ElectronNET.Host/api/menu.ts @@ -1,5 +1,6 @@ import { HubConnection } from "@microsoft/signalr"; import { Menu, BrowserWindow } from 'electron'; + const contextMenuItems = (global['contextMenuItems'] = global['contextMenuItems'] || []); export = (socket: HubConnection) => { @@ -31,7 +32,9 @@ export = (socket: HubConnection) => { } if ('id' in item && item.id) { - item.click = () => { callback(item.id, browserWindowId); }; + item.click = () => { + callback(item.id, browserWindowId); + }; } }); } @@ -62,7 +65,9 @@ export = (socket: HubConnection) => { } if ('id' in item && item.id) { - item.click = () => { callback(item.id); }; + item.click = () => { + callback(item.id); + }; } }); } diff --git a/ElectronNET.Host/api/tray.ts b/ElectronNET.Host/api/tray.ts index b3ce387b..cbf23f20 100644 --- a/ElectronNET.Host/api/tray.ts +++ b/ElectronNET.Host/api/tray.ts @@ -4,7 +4,7 @@ let tray: { value: Electron.Tray } = (global['$tray'] = global['tray'] || { valu export = (socket: HubConnection) => { socket.on('register-tray-click', (id) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.on('click', (event, bounds) => { socket.invoke('TrayOnClick', id, [(event).__proto__, bounds]); }); @@ -12,7 +12,7 @@ export = (socket: HubConnection) => { }); socket.on('register-tray-right-click', (id) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.on('right-click', (event, bounds) => { socket.invoke('TrayOnRightClick', id, [(event).__proto__, bounds]); }); @@ -20,15 +20,18 @@ export = (socket: HubConnection) => { }); socket.on('register-tray-double-click', (id) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.on('double-click', (event, bounds) => { - socket.invoke('TrayOnDoubleClick', id, [(event).__proto__, bounds]); + socket.invoke('TrayOnDoubleClick', id, { + eventArgs: (event).__proto__, + bounds: bounds + }); }); } }); socket.on('register-tray-balloon-show', (id) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.on('balloon-show', () => { socket.invoke('TrayOnBalloonShow', id); }); @@ -36,7 +39,7 @@ export = (socket: HubConnection) => { }); socket.on('register-tray-balloon-click', (id) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.on('balloon-click', () => { socket.invoke('TrayOnBalloonClick', id); }); @@ -44,7 +47,7 @@ export = (socket: HubConnection) => { }); socket.on('register-tray-balloon-closed', (id) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.on('balloon-closed', () => { socket.invoke('TrayOnBalloonClosed', id); }); @@ -67,38 +70,38 @@ export = (socket: HubConnection) => { }); socket.on('tray-destroy', () => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.destroy(); } }); socket.on('tray-setImage', (image) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.setImage(image); } }); socket.on('tray-setPressedImage', (image) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { const img = nativeImage.createFromPath(image); tray.value.setPressedImage(img); } }); socket.on('tray-setToolTip', (toolTip) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.setToolTip(toolTip); } }); socket.on('tray-setTitle', (title) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.setTitle(title); } }); socket.on('tray-displayBalloon', (options) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.displayBalloon(options); } }); @@ -111,7 +114,7 @@ export = (socket: HubConnection) => { }); socket.on('register-tray-on-event', (eventName, listenerName) => { - if (tray.value){ + if (tray.value && !tray.value.isDestroyed()) { tray.value.on(eventName, (...args) => { if (args.length > 1) { socket.invoke(listenerName, args[1]); @@ -123,7 +126,7 @@ export = (socket: HubConnection) => { }); socket.on('register-tray-once-event', (eventName, listenerName) => { - if (tray.value){ + if (tray.value && !tray.value.isDestroyed()) { tray.value.once(eventName, (...args) => { if (args.length > 1) { socket.invoke(listenerName, args[1]); @@ -141,7 +144,9 @@ export = (socket: HubConnection) => { } if ('id' in item && item.id) { - item.click = () => { callback(item.id); }; + item.click = () => { + callback(item.id); + }; } }); } diff --git a/ElectronNET.Host/api/webContents.ts b/ElectronNET.Host/api/webContents.ts index 4c7b62da..ead53c14 100644 --- a/ElectronNET.Host/api/webContents.ts +++ b/ElectronNET.Host/api/webContents.ts @@ -251,7 +251,7 @@ export = (socket: HubConnection) => { socket.on('webContents-session-removeExtension', (id, name) => { const browserWindow = getWindowById(id); - socket.invoke('webContents-getUrl' + id, browserWindow.webContents.getURL()); + browserWindow.webContents.session.removeExtension(name); }); socket.on('webContents-session-loadExtension', async (guid, id, path, allowFileAccess = false) => { diff --git a/ElectronNET.Host/main.js b/ElectronNET.Host/main.js index c48ba0f2..28219eeb 100644 --- a/ElectronNET.Host/main.js +++ b/ElectronNET.Host/main.js @@ -1,22 +1,29 @@ -const { app } = require('electron'); -const { BrowserWindow } = require('electron'); -const { protocol } = require('electron'); +const { app, nativeTheme, BrowserWindow, protocol } = require('electron'); const path = require('path'); -const cProcess = require('child_process').spawn; +const cProcess = require('child_process'); +const process = require('process'); const portscanner = require('portscanner'); const signalR = require('@microsoft/signalr'); const os = require('os'); const { imageSize } = require('image-size'); +const { connect } = require('http2'); +const crypto = require('crypto'); + +fixPath(); //For macOS and Linux packaged-apps, the path variable might be missing + +const auth = crypto.randomBytes(32).toString('hex'); + let io, server, browserWindows, ipc, apiProcess, loadURL; let appApi, menu, dialogApi, notification, tray, webContents; let globalShortcut, shellApi, screen, clipboard, autoUpdater; -let commandLine, browserView; +let commandLine, browserView, desktopCapturer; let powerMonitor; let splashScreen, hostHook; -let mainWindowId, nativeTheme; +let mainWindowId, nativeThemeApi; let dock; let launchFile; let launchUrl; +let ignoreApiProcessClosed = false; let manifestJsonFileName = 'electron.manifest.json'; let watchable = false; @@ -51,27 +58,60 @@ app.on('will-finish-launching', () => { }) }); +function prepareForUpdate() { + console.log('closing all windows before update'); + + ignoreApiProcessClosed = true; + + app.removeAllListeners("window-all-closed"); + + const windows = BrowserWindow.getAllWindows(); + + if (windows.length) { + windows.forEach(w => { + try { + w.removeAllListeners("close"); + w.hide(); + w.destroy(); + } + catch { + //ignore, probably already destroyed + } + }); + } +} + +app.on('before-quit-for-update', () => { prepareForUpdate(); }); + const manifestJsonFile = require(manifestJsonFilePath); + if (manifestJsonFile.singleInstance || manifestJsonFile.aspCoreBackendPort) { const mainInstance = app.requestSingleInstanceLock(); app.on('second-instance', (events, args = []) => { - args.forEach(parameter => { - const words = parameter.split('='); - if(words.length > 1) { - app.commandLine.appendSwitch(words[0].replace('--', ''), words[1]); - } else { - app.commandLine.appendSwitch(words[0].replace('--', '')); - } - }); + let socket = global['electronsocket']; - const windows = BrowserWindow.getAllWindows(); - if (windows.length) { - if (windows[0].isMinimized()) { - windows[0].restore(); - } - windows[0].focus(); + if (socket) { + socket.emit('app-activate-from-second-instance', args); } + + //args.forEach(parameter => { + // const words = parameter.split('='); + + // if(words.length > 1) { + // app.commandLine.appendSwitch(words[0].replace('--', ''), words[1]); + // } else { + // app.commandLine.appendSwitch(words[0].replace('--', '')); + // } + //}); + + //const windows = BrowserWindow.getAllWindows(); + //if (windows.length) { + // if (windows[0].isMinimized()) { + // windows[0].restore(); + // } + // windows[0].focus(); + //} }); if (!mainInstance) { @@ -79,6 +119,14 @@ if (manifestJsonFile.singleInstance || manifestJsonFile.aspCoreBackendPort) { } } +//Some flags need to be set before app is ready +if (manifestJsonFile.hasOwnProperty('cliFlags') && manifestJsonFile.cliFlags.length > 0) { + manifestJsonFile.cliFlags.forEach(flag => { + app.commandLine.appendSwitch(flag); + }); +} + + // If Backend is already running use default port -> This is for debugging and or restart electron AFTER dotnet app var dotnetOtherSide = false; @@ -130,7 +178,16 @@ app.on('ready', () => { app.on('quit', async (event, exitCode) => { await server.close(); - apiProcess.kill(); + + var detachedProcess = false; + + if (manifestJsonFile.hasOwnProperty('detachedProcess')) { + detachedProcess = manifestJsonFile.detachedProcess; + } + + if (!detachedProcess) { + apiProcess.kill(); + } }); function isSplashScreenEnabled() { @@ -145,9 +202,14 @@ function isSplashScreenEnabled() { function startSplashScreen() { let imageFile = path.join(currentBinPath, manifestJsonFile.splashscreen.imageFile); + + if (manifestJsonFile.splashscreen.imageFileDark && nativeTheme.shouldUseDarkColors) { + imageFile = path.join(currentBinPath, manifestJsonFile.splashscreen.imageFileDark); + } + imageSize(imageFile, (error, dimensions) => { if (error) { - console.log(`load splashscreen error:`); + console.log('load splashscreen error:'); console.error(error); throw new Error(error.message); @@ -165,13 +227,29 @@ function startSplashScreen() { alwaysOnTop: true, show: true }); - splashScreen.setIgnoreMouseEvents(true); + + if (manifestJsonFile.hasOwnProperty('splashscreen')) { + if (manifestJsonFile.splashscreen.hasOwnProperty('timeout')) { + var timeout = manifestJsonFile.splashscreen.timeout; + setTimeout((t) => { + if (splashScreen) { + splashScreen.hide(); + } + }, timeout); + } + } + + //Removed as we want to be able to drag the splash screen: splashScreen.setIgnoreMouseEvents(true); app.once('browser-window-created', () => { - splashScreen.destroy(); + if (splashScreen) { + splashScreen.hide(); + } + //We cannot destroy the window here as this triggers an electron freeze bug (https://github.com/electron/electron/issues/29050) }); const loadSplashscreenUrl = path.join(__dirname, 'splashscreen', 'index.html') + '?imgPath=' + imageFile; + splashScreen.loadURL('file://' + loadSplashscreenUrl); splashScreen.once('closed', () => { @@ -240,24 +318,29 @@ var getStartSignalrListener = function (port) { }, 2000); }); - if (appApi === undefined) appApi = require('./api/app')(connectionHubElectron, app); - if (browserWindows === undefined) browserWindows = require('./api/browserWindows')(connectionHubElectron, app); - if (commandLine === undefined) commandLine = require('./api/commandLine')(connectionHubElectron, app); - if (autoUpdater === undefined) autoUpdater = require('./api/autoUpdater')(connectionHubElectron); - if (ipc === undefined) ipc = require('./api/ipc')(connectionHubElectron); - if (menu === undefined) menu = require('./api/menu')(connectionHubElectron); - if (dialogApi === undefined) dialogApi = require('./api/dialog')(connectionHubElectron); - if (notification === undefined) notification = require('./api/notification')(connectionHubElectron); - if (tray === undefined) tray = require('./api/tray')(connectionHubElectron); - if (webContents === undefined) webContents = require('./api/webContents')(connectionHubElectron); - if (globalShortcut === undefined) globalShortcut = require('./api/globalShortcut')(connectionHubElectron); - if (shellApi === undefined) shellApi = require('./api/shell')(connectionHubElectron); - if (screen === undefined) screen = require('./api/screen')(connectionHubElectron); - if (clipboard === undefined) clipboard = require('./api/clipboard')(connectionHubElectron); - if (browserView === undefined) browserView = require('./api/browserView').browserViewApi(connectionHubElectron); - if (powerMonitor === undefined) powerMonitor = require('./api/powerMonitor')(connectionHubElectron); - if (nativeTheme === undefined) nativeTheme = require('./api/nativeTheme')(connectionHubElectron); - if (dock === undefined) dock = require('./api/dock')(connectionHubElectron); + //We only hook to events on app on the first initialization of each component + let firstTime = (connectionHubElectron == undefined); + + //console.log('.NET connected on socket ' + socket.id + ' on ' + new Date()); + appApi = require('./api/app')(connectionHubElectron, app, firstTime); + browserWindows = require('./api/browserWindows')(connectionHubElectron, app, firstTime); + commandLine = require('./api/commandLine')(connectionHubElectron, app); + autoUpdater = require('./api/autoUpdater')(connectionHubElectron, app); + ipc = require('./api/ipc')(connectionHubElectron); + menu = require('./api/menu')(connectionHubElectron); + dialogApi = require('./api/dialog')(connectionHubElectron); + notification = require('./api/notification')(connectionHubElectron); + tray = require('./api/tray')(connectionHubElectron); + webContents = require('./api/webContents')(connectionHubElectron); + globalShortcut = require('./api/globalShortcut')(connectionHubElectron); + shellApi = require('./api/shell')(connectionHubElectron); + screen = require('./api/screen')(connectionHubElectron); + desktopCapturer = require('./api/desktopCapturer')(connectionHubElectron); + clipboard = require('./api/clipboard')(connectionHubElectron); + browserView = require('./api/browserView').browserViewApi(connectionHubElectron); + powerMonitor = require('./api/powerMonitor')(connectionHubElectron); + nativeThemeApi = require('./api/nativeTheme')(connectionHubElectron); + dock = require('./api/dock')(connectionHubElectron); if (splashScreen && !splashScreen.isDestroyed()) { @@ -267,18 +350,25 @@ var getStartSignalrListener = function (port) { // prototype app['mainWindowURL'] = ""; app['mainWindow'] = null; + + connectionHubElectron.on('splashscreen-destroy', () => { + if (splashScreen) { + splashScreen.destroy(); + splashScreen = null; + } + }); - connectionHubElectron.on('register-app-open-file-event', (id) => { - global['electronsocket'] = connectionHubElectron; + connectionHubElectron.on('prepare-for-update', () => { prepareForUpdate(); }); + connectionHubElectron.on('register-app-open-file-event', (id) => { app.on('open-file', (event, file) => { event.preventDefault(); - global['electronsocket'].invoke('AppOpenFile', id, file); + connectionHubElectron.invoke('AppOpenFile', id, file); }); if (launchFile) { - global['electronsocket'].invoke('AppOpenFile', id, launchFile); + connectionHubElectron.invoke('AppOpenFile', id, launchFile); } }); @@ -288,13 +378,21 @@ var getStartSignalrListener = function (port) { app.on('open-url', (event, url) => { event.preventDefault(); - global['electronsocket'].invoke('app-open-url', id, url); + connectionHubElectron.invoke('app-open-url', id, url); }); if (launchUrl) { - global['electronsocket'].invoke('app-open-url', id, launchUrl); + connectionHubElectron.invoke('app-open-url', id, launchUrl); } }); + + connectionHubElectron.on('console-stdout', (data) => { + console.log(`stdout: ${data.toString()}`); + }); + + connectionHubElectron.on('console-stderr', (data) => { + console.log(`stderr: ${data.toString()}`); + }); try { const hostHookScriptFilePath = path.join(__dirname, 'ElectronHostHook', 'index.js'); @@ -330,9 +428,9 @@ function startAspCoreBackend(electronPort, skipBackendStart) { if (skipBackendStart){ return; } - console.log('ASP.NET Core Port: ' + aspCoreBackendPort); + console.log('.NET Core Port: ' + aspCoreBackendPort); loadURL = `http://127.0.0.1:${aspCoreBackendPort}`; - const parameters = [getEnvironmentParameter(), `/electronPort=${electronPort}`, `/electronWebPort=${aspCoreBackendPort}`]; + const parameters = [getEnvironmentParameter(), `/electronPort=${electronPort}`, `/electronWebPort=${aspCoreBackendPort}`, `/electronPID=${process.pid}`]; let binaryFile = manifestJsonFile.executable; const os = require('os'); @@ -340,13 +438,56 @@ function startAspCoreBackend(electronPort, skipBackendStart) { binaryFile = binaryFile + '.exe'; } + var detachedProcess = false; + var stdioopt = 'pipe'; + + if (manifestJsonFile.hasOwnProperty('detachedProcess')) { + detachedProcess = manifestJsonFile.detachedProcess; + if (detachedProcess) { + stdioopt = ['pipe', 'ignore', 'ignore']; + } + } + let binFilePath = path.join(currentBinPath, binaryFile); - var options = { cwd: currentBinPath }; - apiProcess = cProcess(binFilePath, parameters, options); - apiProcess.stdout.on('data', (data) => { - console.log(`stdout: ${data.toString()}`); + var options = { cwd: currentBinPath, detached: detachedProcess, stdio: stdioopt }; + + apiProcess = cProcess.spawn(binFilePath, parameters, options); + + if (!detachedProcess) { + apiProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data.toString()}`); + }); + + apiProcess.stderr.on('data', (data) => { + console.log(`stderr: ${data.toString()}`); + }); + } + + apiProcess.on('close', (code) => { + console.log(`.NET process exited with code ${code}`); + if (!ignoreApiProcessClosed) { + if (code != 0) { + console.log(`Will quit Electron, as exit code != 0 (got ${code})`); + } + app.exit(code); + } + else if (os.platform() === 'darwin') { + //There is a bug on the updater on macOS never quiting and starting the update process + //We give Squirrel.Mac enough time to access the update file, and then just force-exit here + setTimeout(() => app.exit(0), 30_000); + } }); + + + apiProcess.stdin.setEncoding = 'utf-8'; + apiProcess.stdin.write('Auth=' + auth + '\n'); + apiProcess.stdin.end(); + + if (detachedProcess) { + console.log('Detached from .NET process'); + apiProcess.unref(); + } } getStartSignalrConnections(electronPort); @@ -363,19 +504,59 @@ function startAspCoreBackendWithWatch(electronPort) { } function startBackend(aspCoreBackendPort) { - console.log('ASP.NET Core Watch Port: ' + aspCoreBackendPort); + console.log('.NET watch Port: ' + aspCoreBackendPort); loadURL = `http://127.0.0.1:${aspCoreBackendPort}`; - const parameters = ['watch', 'run', getEnvironmentParameter(), `/electronPort=${electronPort}`, `/electronWebPort=${aspCoreBackendPort}`]; + const parameters = ['watch', 'run', getEnvironmentParameter(), `/electronPort=${electronPort}`, `/electronWebPort=${aspCoreBackendPort}`, `/electronPID=${process.pid}`]; + + var detachedProcess = false; + var stdioopt = 'pipe'; + + if (manifestJsonFile.hasOwnProperty('detachedProcess')) { + detachedProcess = manifestJsonFile.detachedProcess; + if (detachedProcess) { + stdioopt = 'ignore'; + } + } - var options = { - cwd: currentBinPath, - env: process.env, - }; - apiProcess = cProcess('dotnet', parameters, options); + var options = { cwd: currentBinPath, env: process.env, detached: detachedProcess, stdio: stdioopt }; - apiProcess.stdout.on('data', (data) => { - console.log(`stdout: ${data.toString()}`); + apiProcess = cProcess.spawn('dotnet', parameters, options); + + if (!detachedProcess) { + apiProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data.toString()}`); + }); + + apiProcess.stderr.on('data', (data) => { + console.log(`stderr: ${data.toString()}`); + }); + } + + apiProcess.on('close', (code) => { + console.log(`.NET process exited with code ${code}`); + if (!ignoreApiProcessClosed) { + if (code != 0) { + console.log(`Will quit Electron, as exit code != 0 (got ${code})`); + } + console.log('Will quit Electron now'); + + app.exit(code); + } + else if (os.platform() === 'darwin') { + console.log('.NET process and Electron has a pending update, will force quit in 10s...'); + //There is a bug on the updater on macOS never quiting and starting the update process + //We give Squirrel.Mac enough time to access the update file, and then just force-exit here + setTimeout(() => app.exit(0), 10_000); + } + else { + console.log('.NET process and Electron has a pending update...'); + } }); + + if (detachedProcess) { + console.log('Detached from ASP.NET process'); + apiProcess.unref(); + } } } @@ -386,3 +567,84 @@ function getEnvironmentParameter() { return ''; } + + +//This code is derived from gh/sindresorhus/shell-path/, gh/sindresorhus/shell-env/, gh/sindresorhus/default-shell/, gh/chalk/ansi-regex, all under MIT license +function fixPath() { + if (process.platform === 'win32') { + return; + } + const shellFromEnv = shellEnvSync(); + + if (process.env.PATH) { + console.log("Started with PATH = " + process.env.PATH); + } + + if (shellFromEnv) { + process.env.PATH = shellFromEnv; + } else { + process.env.PATH = [ + './node_modules/.bin', + '/.nodebrew/current/bin', + '/usr/local/bin', + process.env.PATH, + ].join(':'); //macOS and Linux path separator is ':' + } + console.log("Using PATH = " + process.env.PATH); +} + +function shellEnvSync() { + const args = [ + '-ilc', + 'echo -n "_SHELL_ENV_DELIMITER_"; env; echo -n "_SHELL_ENV_DELIMITER_"; exit', + ]; + + const env = { + // Disables Zsh auto-update that can block the process. + DISABLE_AUTO_UPDATE: 'true', + }; + + let shell = process.env.SHELL || '/bin/sh'; + + if (process.platform === 'darwin') { + shell = process.env.SHELL || '/bin/zsh'; + } + + try { + let { stdout } = cProcess.spawnSync(shell, args, { env }); + if (Buffer.isBuffer(stdout)) { + stdout = stdout.toString(); + } + return parseEnv(stdout); + } catch (error) { + if (shell) { + throw error; + } else { + return process.env; + } + } +} + +function parseEnv(envString) { + const returnValue = {}; + + if (envString) { + envString = envString.split('_SHELL_ENV_DELIMITER_')[1]; + for (const line of envString.replace(ansiRegex(), '').split('\n').filter(line => Boolean(line))) { + const [key, ...values] = line.split('='); + returnValue[key.toUpperCase()] = values.join('='); + } + } + + return returnValue["PATH"]; + + + function ansiRegex() { + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' + ].join('|'); + + return new RegExp(pattern, 'g'); + } +} diff --git a/ElectronNET.Host/splashscreen/index.html b/ElectronNET.Host/splashscreen/index.html index ddd85e22..bafd72a4 100644 --- a/ElectronNET.Host/splashscreen/index.html +++ b/ElectronNET.Host/splashscreen/index.html @@ -10,9 +10,10 @@ splashscreen diff --git a/ElectronNET.Host/tsconfig.json b/ElectronNET.Host/tsconfig.json index ea3d493d..6454beb9 100644 --- a/ElectronNET.Host/tsconfig.json +++ b/ElectronNET.Host/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "module": "commonjs", - "target": "ES2019", + "target": "ES2020", "sourceMap": true, "skipLibCheck": true }, From b6cedc64194945c4e09dfdf222ecad90a95c9e2a Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Fri, 4 Mar 2022 16:04:45 +0100 Subject: [PATCH 12/15] Manually merge in ElectronNET.WebApp from @theolivenbaum --- .../AppSysInformationController.cs | 24 ++-- .../Controllers/MenusController.cs | 8 +- .../Views/DesktopCapturer/Index.cshtml | 116 +++++------------- ElectronNET.WebApp/electron.manifest.json | 2 +- 4 files changed, 50 insertions(+), 100 deletions(-) diff --git a/ElectronNET.WebApp/Controllers/AppSysInformationController.cs b/ElectronNET.WebApp/Controllers/AppSysInformationController.cs index f184e14c..b7a7bbc0 100644 --- a/ElectronNET.WebApp/Controllers/AppSysInformationController.cs +++ b/ElectronNET.WebApp/Controllers/AppSysInformationController.cs @@ -11,28 +11,34 @@ public IActionResult Index() { if(HybridSupport.IsElectronActive) { - Electron.IpcMain.On("app-info", async (args) => + Electron.IpcMain.OnWithId("app-info", async (info) => { string appPath = await Electron.App.GetAppPathAsync(); - var mainWindow = Electron.WindowManager.BrowserWindows.First(); - Electron.IpcMain.Send(mainWindow, "got-app-path", appPath); + if (Electron.WindowManager.TryGetBrowserWindows(info.browserId, out var window)) + { + Electron.IpcMain.Send(window, "got-app-path", appPath); + } }); - Electron.IpcMain.On("sys-info", async (args) => + Electron.IpcMain.OnWithId("sys-info", async (info) => { string homePath = await Electron.App.GetPathAsync(PathName.Home); - var mainWindow = Electron.WindowManager.BrowserWindows.First(); - Electron.IpcMain.Send(mainWindow, "got-sys-info", homePath); + if (Electron.WindowManager.TryGetBrowserWindows(info.browserId, out var window)) + { + Electron.IpcMain.Send(window, "got-sys-info", homePath); + } }); - Electron.IpcMain.On("screen-info", async (args) => + Electron.IpcMain.OnWithId("screen-info", async (info) => { var display = await Electron.Screen.GetPrimaryDisplayAsync(); - var mainWindow = Electron.WindowManager.BrowserWindows.First(); - Electron.IpcMain.Send(mainWindow, "got-screen-info", display.Size); + if (Electron.WindowManager.TryGetBrowserWindows(info.browserId, out var window)) + { + Electron.IpcMain.Send(window, "got-screen-info", display.Size); + } }); } diff --git a/ElectronNET.WebApp/Controllers/MenusController.cs b/ElectronNET.WebApp/Controllers/MenusController.cs index a279774e..5bb39b08 100644 --- a/ElectronNET.WebApp/Controllers/MenusController.cs +++ b/ElectronNET.WebApp/Controllers/MenusController.cs @@ -70,9 +70,11 @@ public IActionResult Index() { Label = "App Menu Demo", Click = async () => { - var options = new MessageBoxOptions("This demo is for the Menu section, showing how to create a clickable menu item in the application menu."); - options.Type = MessageBoxType.info; - options.Title = "Application Menu Demo"; + var options = new MessageBoxOptions("This demo is for the Menu section, showing how to create a clickable menu item in the application menu.") + { + Type = MessageBoxType.info, + Title = "Application Menu Demo" + }; await Electron.Dialog.ShowMessageBoxAsync(options); } } diff --git a/ElectronNET.WebApp/Views/DesktopCapturer/Index.cshtml b/ElectronNET.WebApp/Views/DesktopCapturer/Index.cshtml index 5e22c04d..ca7941be 100644 --- a/ElectronNET.WebApp/Views/DesktopCapturer/Index.cshtml +++ b/ElectronNET.WebApp/Views/DesktopCapturer/Index.cshtml @@ -22,104 +22,46 @@ +

This demo uses the desktopCapturer module to gather screens in use and select the entire screen and take a snapshot of what is visible.

Clicking the demo button will take a screenshot of your current screen and open it in your default viewer.

Renderer Process (JavaScript)
-
const electron = require('electron');
-const desktopCapturer = electron.desktopCapturer;
-const electronScreen = electron.screen;
-const shell = electron.shell;
-
-const fs = require('fs');
-const os = require('os');
-const path = require('path');
-
-const screenshot = document.getElementById('screen-shot');
-const screenshotMsg = document.getElementById('screenshot-path');
-
-screenshot.addEventListener('click', function (event) {
-    screenshotMsg.textContent = 'Gathering screens...';
-    const thumbSize = determineScreenShotSize();
-    let options = { types: ['screen'], thumbnailSize: thumbSize }
-
-    desktopCapturer.getSources(options, function (error, sources) {
-        if (error) return console.log(error);
-
-        sources.forEach(function (source) {
-            if (source.name === 'Entire screen' || source.name === 'Screen 1') {
-                const screenshotPath = path.join(os.tmpdir(), 'screenshot.png');
-
-                fs.writeFile(screenshotPath, source.thumbnail.toPng(), function (error) {
-                if (error) return console.log(error);
-                shell.openExternal('file://' + screenshotPath);
-                const message = `Saved screenshot to: ${screenshotPath}`;
-                screenshotMsg.textContent = message;
-                });
+          

+                  const screenshot = document.getElementById('screen-shot');
+    screenshot.addEventListener('click', function (event) {
+        const { desktopCapturer } = require('electron')
+
+        desktopCapturer.getSources({ types: ['screen'], thumbnailSize: {
+            width: window.screen.width,
+            height: window.screen.height
+        }}).then(async sources => {
+            for (const source of sources) {
+                document.getElementById('screenshot-image').src = source.thumbnail.toDataURL();
+                return;
             }
-        })
-    })
-})
-
-function determineScreenShotSize () {
-    const screenSize = electronScreen.getPrimaryDisplay().workAreaSize;
-    const maxDimension = Math.max(screenSize.width, screenSize.height);
-    return {
-        width: maxDimension * window.devicePixelRatio,
-        height: maxDimension * window.devicePixelRatio
-    }
+        });
+    });
 }
+ diff --git a/ElectronNET.WebApp/electron.manifest.json b/ElectronNET.WebApp/electron.manifest.json index 3053f9a0..11001eab 100644 --- a/ElectronNET.WebApp/electron.manifest.json +++ b/ElectronNET.WebApp/electron.manifest.json @@ -1,6 +1,6 @@ { "executable": "ElectronNET.WebApp", - "splashscreen": { + "splashscreen2": { "imageFile": "/wwwroot/assets/img/about@2x.png" }, "environment": "Production", From 6faa9fe0771a5dbece4ec870513f3d93afd3a1dd Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Fri, 4 Mar 2022 16:05:10 +0100 Subject: [PATCH 13/15] Recompile JS --- ElectronNET.Host/api/app.js | 43 ++- ElectronNET.Host/api/app.js.map | 2 +- ElectronNET.Host/api/autoUpdater.js | 25 +- ElectronNET.Host/api/autoUpdater.js.map | 2 +- ElectronNET.Host/api/browserWindows.js | 361 +++++++++++--------- ElectronNET.Host/api/browserWindows.js.map | 2 +- ElectronNET.Host/api/clipboard.js | 13 +- ElectronNET.Host/api/clipboard.js.map | 2 +- ElectronNET.Host/api/desktopCapturer.js | 21 ++ ElectronNET.Host/api/desktopCapturer.js.map | 1 + ElectronNET.Host/api/dialog.js | 1 + ElectronNET.Host/api/dialog.js.map | 2 +- ElectronNET.Host/api/dock.js | 4 +- ElectronNET.Host/api/dock.js.map | 2 +- ElectronNET.Host/api/globalShortcut.js | 3 +- ElectronNET.Host/api/globalShortcut.js.map | 2 +- ElectronNET.Host/api/ipc.js | 19 +- ElectronNET.Host/api/ipc.js.map | 2 +- ElectronNET.Host/api/menu.js | 8 +- ElectronNET.Host/api/menu.js.map | 2 +- ElectronNET.Host/api/tray.js | 37 +- ElectronNET.Host/api/tray.js.map | 2 +- ElectronNET.Host/api/webContents.js | 2 +- ElectronNET.Host/api/webContents.js.map | 2 +- 24 files changed, 351 insertions(+), 209 deletions(-) create mode 100644 ElectronNET.Host/api/desktopCapturer.js create mode 100644 ElectronNET.Host/api/desktopCapturer.js.map diff --git a/ElectronNET.Host/api/app.js b/ElectronNET.Host/api/app.js index e649feb8..227613cb 100644 --- a/ElectronNET.Host/api/app.js +++ b/ElectronNET.Host/api/app.js @@ -1,23 +1,30 @@ "use strict"; let isQuitWindowAllClosed = true; let appWindowAllClosedEventId; -module.exports = (socket, app) => { - // By default, quit when all windows are closed - app.on('window-all-closed', () => { - // On macOS it is common for applications and their menu bar - // to stay active until the user quits explicitly with Cmd + Q - if (process.platform !== 'darwin' && isQuitWindowAllClosed) { - socket.invoke('AppWindowAllClosed', 0); - app.quit(); - } - else if (appWindowAllClosedEventId) { - // If the user is on macOS - // - OR - - // If the user has indicated NOT to quit when all windows are closed, - // emit the event. - socket.invoke('AppWindowAllClosed', appWindowAllClosedEventId); - } - }); +module.exports = (socket, app, firstTime) => { + if (firstTime) { + // By default, quit when all windows are closed + app.on('window-all-closed', () => { + // On macOS it is common for applications and their menu bar + // to stay active until the user quits explicitly with Cmd + Q + if (process.platform !== 'darwin' && isQuitWindowAllClosed) { + socket.invoke('AppWindowAllClosed', 0); + app.quit(); + } + else if (appWindowAllClosedEventId) { + // If the user is on macOS + // - OR - + // If the user has indicated NOT to quit when all windows are closed, + // emit the event. + socket.invoke('AppWindowAllClosed', appWindowAllClosedEventId); + } + }); + app.on('activate', () => { + // On macOS it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + socket.invoke('AppWindowActivate'); + }); + } socket.on('quit-app-window-all-closed-event', (quit) => { isQuitWindowAllClosed = quit; }); @@ -151,7 +158,7 @@ module.exports = (socket, app) => { const success = app.requestSingleInstanceLock(); socket.invoke('SendClientResponseBool', guid, success); app.on('second-instance', (event, args = [], workingDirectory = '') => { - socket.invoke('SendClientResponseJArray', guid, [args, workingDirectory]); + socket.invoke('AppActivateFromSecondInstance', { args: args, workingDirectory: workingDirectory }); }); }); socket.on('appHasSingleInstanceLock', (guid) => { diff --git a/ElectronNET.Host/api/app.js.map b/ElectronNET.Host/api/app.js.map index 2a5ec6fb..4e6ef12e 100644 --- a/ElectronNET.Host/api/app.js.map +++ b/ElectronNET.Host/api/app.js.map @@ -1 +1 @@ -{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/autoUpdater.js b/ElectronNET.Host/api/autoUpdater.js index e87027e3..2dab8cc5 100644 --- a/ElectronNET.Host/api/autoUpdater.js +++ b/ElectronNET.Host/api/autoUpdater.js @@ -1,5 +1,6 @@ "use strict"; const electron_updater_1 = require("electron-updater"); +const electron_1 = require("electron"); module.exports = (socket, app) => { socket.on('register-autoUpdater-error-event', (id) => { electron_updater_1.autoUpdater.on('error', (error) => { @@ -98,7 +99,29 @@ module.exports = (socket, app) => { }); }); socket.on('autoUpdaterQuitAndInstall', async (isSilent, isForceRunAfter) => { - electron_updater_1.autoUpdater.quitAndInstall(isSilent, isForceRunAfter); + console.log('running autoUpdaterQuitAndInstall'); + app.removeAllListeners("window-all-closed"); + const windows = electron_1.BrowserWindow.getAllWindows(); + if (windows && windows.length) { + windows.forEach(w => { + try { + w.removeAllListeners('close'); + w.removeAllListeners('closed'); + w.destroy(); + } + catch { + //ignore, probably already destroyed + } + }); + } + //The call to quitAndInstall needs to happen after the windows + //get a chance to close and release resources, so it must be done on a timeout + setTimeout(() => { + console.log('running autoUpdater.quitAndInstall'); + console.log('isSilent:' + isSilent); + console.log('isForceRunAfter:' + isForceRunAfter); + electron_updater_1.autoUpdater.quitAndInstall(isSilent, isForceRunAfter); + }, 100); }); socket.on('autoUpdaterDownloadUpdate', async (guid) => { const downloadedPath = await electron_updater_1.autoUpdater.downloadUpdate(); diff --git a/ElectronNET.Host/api/autoUpdater.js.map b/ElectronNET.Host/api/autoUpdater.js.map index bcd64346..7df5a532 100644 --- a/ElectronNET.Host/api/autoUpdater.js.map +++ b/ElectronNET.Host/api/autoUpdater.js.map @@ -1 +1 @@ -{"version":3,"file":"autoUpdater.js","sourceRoot":"","sources":["autoUpdater.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"autoUpdater.js","sourceRoot":"","sources":["autoUpdater.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/browserWindows.js b/ElectronNET.Host/api/browserWindows.js index b29017e4..0c08f44c 100644 --- a/ElectronNET.Host/api/browserWindows.js +++ b/ElectronNET.Host/api/browserWindows.js @@ -7,183 +7,192 @@ let readyToShowWindowsIds = []; let window, lastOptions; let mainWindowURL; const proxyToCredentialsMap = (global['proxyToCredentialsMap'] = global['proxyToCredentialsMap'] || []); -module.exports = (socket, app) => { - app.on('login', (event, webContents, request, authInfo, callback) => { - if (authInfo.isProxy) { - let proxy = `${authInfo.host}:${authInfo.port}`; - if (proxy in proxyToCredentialsMap && proxyToCredentialsMap[proxy].split(':').length === 2) { - event.preventDefault(); - let user = proxyToCredentialsMap[proxy].split(':')[0]; - let pass = proxyToCredentialsMap[proxy].split(':')[1]; - callback(user, pass); +module.exports = (socket, app, firstTime) => { + if (firstTime) { + app.on('login', (event, webContents, request, authInfo, callback) => { + if (authInfo.isProxy) { + let proxy = `${authInfo.host}:${authInfo.port}`; + if (proxy in proxyToCredentialsMap && proxyToCredentialsMap[proxy].split(':').length === 2) { + event.preventDefault(); + let user = proxyToCredentialsMap[proxy].split(':')[0]; + let pass = proxyToCredentialsMap[proxy].split(':')[1]; + callback(user, pass); + } } - } - }); + }); + } socket.on('register-browserWindow-ready-to-show', (id) => { if (readyToShowWindowsIds.includes(id)) { readyToShowWindowsIds = readyToShowWindowsIds.filter(value => value !== id); socket.invoke('browserWindow-ready-to-show' + id); } - getWindowById(id).on('ready-to-show', () => { + getWindowById(id)?.on('ready-to-show', () => { readyToShowWindowsIds.push(id); socket.invoke('BrowserWindowReadyToShow', id); }); }); socket.on('register-browserWindow-page-title-updated', (id) => { - getWindowById(id).on('page-title-updated', (event, title) => { + getWindowById(id)?.on('page-title-updated', (event, title) => { socket.invoke('BrowserWindowPageTitleUpdated', id, title); }); }); socket.on('register-browserWindow-close', (id) => { - getWindowById(id).on('close', () => { + getWindowById(id)?.on('close', () => { socket.invoke('BrowserWindowClose', id); }); }); socket.on('register-browserWindow-closed', (id) => { - getWindowById(id).on('closed', () => { + getWindowById(id)?.on('closed', () => { console.log(id); socket.invoke('BrowserWindowClosed', id); }); }); socket.on('register-browserWindow-session-end', (id) => { - getWindowById(id).on('session-end', () => { + getWindowById(id)?.on('session-end', () => { socket.invoke('BrowserWindowSessionEnd', id); }); }); socket.on('register-browserWindow-unresponsive', (id) => { - getWindowById(id).on('unresponsive', () => { + getWindowById(id)?.on('unresponsive', () => { socket.invoke('BrowserWindowUnresponsive', id); }); }); socket.on('register-browserWindow-responsive', (id) => { - getWindowById(id).on('responsive', () => { + getWindowById(id)?.on('responsive', () => { socket.invoke('BrowserWindowResponsive', id); }); }); //Testing socket.on('register-browserWindow-blur', (id) => { - getWindowById(id).on('blur', () => { + getWindowById(id)?.on('blur', () => { console.log("BLUR"); socket.invoke('BrowserWindowBlur', id); }); }); socket.on('register-browserWindow-focus', (id) => { - getWindowById(id).on('focus', () => { + getWindowById(id)?.on('focus', () => { socket.invoke('BrowserWindowFocus', id); }); }); socket.on('register-browserWindow-show', (id) => { - getWindowById(id).on('show', () => { + getWindowById(id)?.on('show', () => { socket.invoke('BrowserWindowShow', id); }); }); socket.on('register-browserWindow-hide', (id) => { - getWindowById(id).on('hide', () => { + getWindowById(id)?.on('hide', () => { socket.invoke('BrowserWindowHide', id); }); }); socket.on('register-browserWindow-maximize', (id) => { - getWindowById(id).on('maximize', () => { + getWindowById(id)?.on('maximize', () => { socket.invoke('BrowserWindowMaximize', id); }); }); socket.on('register-browserWindow-unmaximize', (id) => { - getWindowById(id).on('unmaximize', () => { + getWindowById(id)?.on('unmaximize', () => { socket.invoke('BrowserWindowUnmaximize', id); }); }); socket.on('register-browserWindow-minimize', (id) => { - getWindowById(id).on('minimize', () => { + getWindowById(id)?.on('minimize', () => { socket.invoke('BrowserWindowMinimize', id); }); }); socket.on('register-browserWindow-restore', (id) => { - getWindowById(id).on('restore', () => { + getWindowById(id)?.on('restore', () => { socket.invoke('BrowserWindowRestore', id); }); }); socket.on('register-browserWindow-resize', (id) => { - getWindowById(id).on('resize', () => { + getWindowById(id)?.on('resize', () => { socket.invoke('BrowserWindowResize', id); }); }); socket.on('register-browserWindow-move', (id) => { - getWindowById(id).on('move', () => { + getWindowById(id)?.on('move', () => { socket.invoke('BrowserWindowMove', id); }); }); socket.on('register-browserWindow-moved', (id) => { - getWindowById(id).on('moved', () => { + getWindowById(id)?.on('moved', () => { socket.invoke('BrowserWindowMoved', id); }); }); socket.on('register-browserWindow-enter-full-screen', (id) => { - getWindowById(id).on('enter-full-screen', () => { + getWindowById(id)?.on('enter-full-screen', () => { socket.invoke('BrowserWindowEnterFullScreen', id); }); }); socket.on('register-browserWindow-leave-full-screen', (id) => { - getWindowById(id).on('leave-full-screen', () => { + getWindowById(id)?.on('leave-full-screen', () => { socket.invoke('BrowserWindowLeaveFullScreen', id); }); }); socket.on('register-browserWindow-enter-html-full-screen', (id) => { - getWindowById(id).on('enter-html-full-screen', () => { + getWindowById(id)?.on('enter-html-full-screen', () => { socket.invoke('BrowserWindowEnterHtmlFullScreen', id); }); }); socket.on('register-browserWindow-leave-html-full-screen', (id) => { - getWindowById(id).on('leave-html-full-screen', () => { + getWindowById(id)?.on('leave-html-full-screen', () => { socket.invoke('BrowserWindowLeaveHtmlFullScreen', id); }); }); socket.on('register-browserWindow-app-command', (id) => { - getWindowById(id).on('app-command', (event, command) => { + getWindowById(id)?.on('app-command', (event, command) => { socket.invoke('BrowserWindowAppCommand', id, command); }); }); socket.on('register-browserWindow-scroll-touch-begin', (id) => { - getWindowById(id).on('scroll-touch-begin', () => { + getWindowById(id)?.on('scroll-touch-begin', () => { socket.invoke('BrowserWindowScrollTouchBegin', id); }); }); socket.on('register-browserWindow-scroll-touch-end', (id) => { - getWindowById(id).on('scroll-touch-end', () => { + getWindowById(id)?.on('scroll-touch-end', () => { socket.invoke('BrowserWindowScrollTouchEnd', id); }); }); socket.on('register-browserWindow-scroll-touch-edge', (id) => { - getWindowById(id).on('scroll-touch-edge', () => { + getWindowById(id)?.on('scroll-touch-edge', () => { socket.invoke('BrowserWindowScrollTouchEdge', id); }); }); socket.on('register-browserWindow-swipe', (id) => { - getWindowById(id).on('swipe', (event, direction) => { + getWindowById(id)?.on('swipe', (event, direction) => { socket.invoke('BrowserWindowSwipe', id, direction); }); }); socket.on('register-browserWindow-sheet-begin', (id) => { - getWindowById(id).on('sheet-begin', () => { + getWindowById(id)?.on('sheet-begin', () => { socket.invoke('BrowserWindowSheetBegin', id); }); }); socket.on('register-browserWindow-sheet-end', (id) => { - getWindowById(id).on('sheet-end', () => { + getWindowById(id)?.on('sheet-end', () => { socket.invoke('BrowserWindowSheetEnd', id); }); }); socket.on('register-browserWindow-new-window-for-tab', (id) => { - getWindowById(id).on('new-window-for-tab', () => { + getWindowById(id)?.on('new-window-for-tab', () => { socket.invoke('BrowserWindowNewWindowForTab', id); }); }); socket.on('createBrowserWindow', (guid, options, loadUrl) => { if (options.webPreferences && !('nodeIntegration' in options.webPreferences)) { - options = { ...options, webPreferences: { ...options.webPreferences, nodeIntegration: true, contextIsolation: false } }; + options = { + ...options, + webPreferences: { ...options.webPreferences, nodeIntegration: true, contextIsolation: false } + }; } else if (!options.webPreferences) { options = { ...options, webPreferences: { nodeIntegration: true, contextIsolation: false } }; } + if (options.x && options.y && options.x == 0 && options.y == 0) { + delete options.x; + delete options.y; + } // we dont want to recreate the window when watch is ready. if (app.commandLine.hasSwitch('watch') && app['mainWindowURL'] === loadUrl) { window = app['mainWindow']; @@ -204,6 +213,14 @@ module.exports = (socket, app) => { proxyToCredentialsMap[options.proxy] = options.proxyCredentials; } window.on('ready-to-show', () => { + try { + window.id; + } + catch (error) { + if (error.message === 'Object has been destroyed') { + return; + } + } if (readyToShowWindowsIds.includes(window.id)) { readyToShowWindowsIds = readyToShowWindowsIds.filter(value => value !== window.id); } @@ -211,9 +228,8 @@ module.exports = (socket, app) => { readyToShowWindowsIds.push(window.id); } }); - lastOptions = options; window.on('closed', (sender) => { - for (let index = 0; index < windows.length; index++) { + again: for (let index = 0; index < windows.length; index++) { const windowItem = windows[index]; try { windowItem.id; @@ -221,21 +237,13 @@ module.exports = (socket, app) => { catch (error) { if (error.message === 'Object has been destroyed') { windows.splice(index, 1); - const ids = []; - windows.forEach(x => ids.push(x.id)); - console.log("------------------------------------"); - console.log(ids); - socket.invoke('SendClientResponseInt', ids); + break again; } } } - }); - app.on('activate', () => { - // On macOS it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (window === null && lastOptions) { - window = new electron_1.BrowserWindow(lastOptions); - } + const ids = []; + windows.forEach(x => ids.push(x.id)); + socket.invoke('BootstrapUpdateOpenIDsEvent', ids); }); if (loadUrl) { window.loadURL(loadUrl); @@ -254,236 +262,266 @@ module.exports = (socket, app) => { socket.invoke('SendClientResponseInt', guid, window.id); }); socket.on('browserWindowDestroy', (id) => { - getWindowById(id).destroy(); + getWindowById(id)?.destroy(); + }); + socket.on('browserWindowDestroyAll', (guid) => { + const windows = electron_1.BrowserWindow.getAllWindows(); + let count = 0; + if (windows.length) { + windows.forEach(w => { + try { + w.removeAllListeners('close'); + w.hide(); + w.destroy(); + count++; + } + catch { + //ignore, probably already destroyed + } + }); + } + socket.invoke('SendClientResponseInt', guid, count); }); socket.on('browserWindowClose', (id) => { - getWindowById(id).close(); + getWindowById(id)?.close(); }); socket.on('browserWindowFocus', (id) => { - getWindowById(id).focus(); + getWindowById(id)?.focus(); }); socket.on('browserWindowBlur', (id) => { - getWindowById(id).blur(); + getWindowById(id)?.blur(); }); socket.on('browserWindowIsFocused', (guid, id) => { - const isFocused = getWindowById(id).isFocused(); + const isFocused = getWindowById(id)?.isFocused() ?? null; socket.invoke('SendClientResponseBool', guid, isFocused); }); socket.on('browserWindowIsDestroyed', (guid, id) => { - const isDestroyed = getWindowById(id).isDestroyed(); - socket.invoke('SendClientResponseBool', guid, isDestroyed); + const w = getWindowById(id); + if (w) { + const isDestroyed = w.isDestroyed(); + socket.invoke('SendClientResponseBool', guid, isDestroyed); + } + else { + socket.invoke('SendClientResponseBool', guid, true); + } }); socket.on('browserWindowShow', (id) => { - getWindowById(id).show(); + getWindowById(id)?.show(); }); socket.on('browserWindowShowInactive', (id) => { - getWindowById(id).showInactive(); + getWindowById(id)?.showInactive(); }); socket.on('browserWindowHide', (id) => { - getWindowById(id).hide(); + getWindowById(id)?.hide(); }); socket.on('browserWindowIsVisible', (guid, id) => { - const isVisible = getWindowById(id).isVisible(); + const isVisible = getWindowById(id)?.isVisible() ?? null; socket.invoke('SendClientResponseBool', guid, isVisible); }); socket.on('browserWindowIsModal', (guid, id) => { - const isModal = getWindowById(id).isModal(); + const isModal = getWindowById(id)?.isModal() ?? null; socket.invoke('SendClientResponseBool', guid, isModal); }); socket.on('browserWindowMaximize', (id) => { - getWindowById(id).maximize(); + getWindowById(id)?.maximize(); }); socket.on('browserWindowUnmaximize', (id) => { - getWindowById(id).unmaximize(); + getWindowById(id)?.unmaximize(); }); socket.on('browserWindowIsMaximized', (guid, id) => { - const isMaximized = getWindowById(id).isMaximized(); + const isMaximized = getWindowById(id)?.isMaximized() ?? null; socket.invoke('SendClientResponseBool', guid, isMaximized); }); socket.on('browserWindowMinimize', (id) => { - getWindowById(id).minimize(); + getWindowById(id)?.minimize(); }); socket.on('browserWindowRestore', (id) => { - getWindowById(id).restore(); + getWindowById(id)?.restore(); }); socket.on('browserWindowIsMinimized', (guid, id) => { - const isMinimized = getWindowById(id).isMinimized(); + const isMinimized = getWindowById(id)?.isMinimized() ?? null; socket.invoke('SendClientResponseBool', guid, isMinimized); }); socket.on('browserWindowSetFullScreen', (id, fullscreen) => { - getWindowById(id).setFullScreen(fullscreen); + getWindowById(id)?.setFullScreen(fullscreen); + }); + socket.on('browserWindowSetBackgroundColor', (id, color) => { + getWindowById(id)?.setBackgroundColor(color); }); socket.on('browserWindowIsFullScreen', (guid, id) => { - const isFullScreen = getWindowById(id).isFullScreen(); + const isFullScreen = getWindowById(id)?.isFullScreen() ?? null; socket.invoke('SendClientResponseBool', guid, isFullScreen); }); socket.on('browserWindowSetAspectRatio', (id, aspectRatio, extraSize) => { - getWindowById(id).setAspectRatio(aspectRatio, extraSize); + getWindowById(id)?.setAspectRatio(aspectRatio, extraSize); }); socket.on('browserWindowPreviewFile', (id, path, displayname) => { - getWindowById(id).previewFile(path, displayname); + getWindowById(id)?.previewFile(path, displayname); }); socket.on('browserWindowCloseFilePreview', (id) => { - getWindowById(id).closeFilePreview(); + getWindowById(id)?.closeFilePreview(); }); socket.on('browserWindowSetBounds', (id, bounds, animate) => { - getWindowById(id).setBounds(bounds, animate); + getWindowById(id)?.setBounds(bounds, animate); }); socket.on('browserWindowGetBounds', (guid, id) => { - const rectangle = getWindowById(id).getBounds(); + const rectangle = getWindowById(id)?.getBounds() ?? null; socket.invoke('SendClientResponseJObject', guid, rectangle); }); socket.on('browserWindowSetContentBounds', (id, bounds, animate) => { - getWindowById(id).setContentBounds(bounds, animate); + getWindowById(id)?.setContentBounds(bounds, animate); }); socket.on('browserWindowGetContentBounds', (guid, id) => { - const rectangle = getWindowById(id).getContentBounds(); + const rectangle = getWindowById(id)?.getContentBounds() ?? null; socket.invoke('SendClientResponseBool', guid, rectangle); }); socket.on('browserWindowSetSize', (id, width, height, animate) => { - getWindowById(id).setSize(width, height, animate); + getWindowById(id)?.setSize(width, height, animate); }); socket.on('browserWindowGetSize', (guid, id) => { - const size = getWindowById(id).getSize(); + const size = getWindowById(id)?.getSize() ?? null; socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetContentSize', (id, width, height, animate) => { - getWindowById(id).setContentSize(width, height, animate); + getWindowById(id)?.setContentSize(width, height, animate); }); socket.on('browserWindowGetContentSize', (guid, id) => { - const size = getWindowById(id).getContentSize(); + const size = getWindowById(id)?.getContentSize() ?? null; socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetMinimumSize', (id, width, height) => { - getWindowById(id).setMinimumSize(width, height); + getWindowById(id)?.setMinimumSize(width, height); }); socket.on('browserWindowGetMinimumSize', (guid, id) => { - const size = getWindowById(id).getMinimumSize(); + const size = getWindowById(id)?.getMinimumSize() ?? null; socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetMaximumSize', (id, width, height) => { - getWindowById(id).setMaximumSize(width, height); + getWindowById(id)?.setMaximumSize(width, height); }); socket.on('browserWindowGetMaximumSize', (guid, id) => { - const size = getWindowById(id).getMaximumSize(); + const size = getWindowById(id)?.getMaximumSize() ?? null; socket.invoke('SendClientResponseJArray', guid, size); }); socket.on('browserWindowSetResizable', (id, resizable) => { - getWindowById(id).setResizable(resizable); + getWindowById(id)?.setResizable(resizable); }); socket.on('browserWindowIsResizable', (guid, id) => { - const resizable = getWindowById(id).isResizable(); + const resizable = getWindowById(id)?.isResizable() ?? null; socket.invoke('SendClientResponseBool', guid, resizable); }); socket.on('browserWindowSetMovable', (id, movable) => { - getWindowById(id).setMovable(movable); + getWindowById(id)?.setMovable(movable); }); socket.on('browserWindowIsMovable', (guid, id) => { - const movable = getWindowById(id).isMovable(); + const movable = getWindowById(id)?.isMovable() ?? null; socket.invoke('SendClientResponseBool', guid, movable); }); socket.on('browserWindowSetMinimizable', (id, minimizable) => { - getWindowById(id).setMinimizable(minimizable); + getWindowById(id)?.setMinimizable(minimizable); }); socket.on('browserWindowIsMinimizable', (guid, id) => { - const minimizable = getWindowById(id).isMinimizable(); + const minimizable = getWindowById(id)?.isMinimizable() ?? null; socket.invoke('SendClientResponseBool', guid, minimizable); }); socket.on('browserWindowSetMaximizable', (id, maximizable) => { - getWindowById(id).setMaximizable(maximizable); + getWindowById(id)?.setMaximizable(maximizable); }); socket.on('browserWindowIsMaximizable', (guid, id) => { - const maximizable = getWindowById(id).isMaximizable(); + const maximizable = getWindowById(id)?.isMaximizable() ?? null; socket.invoke('SendClientResponseBool', guid, maximizable); }); socket.on('browserWindowSetFullScreenable', (id, fullscreenable) => { - getWindowById(id).setFullScreenable(fullscreenable); + getWindowById(id)?.setFullScreenable(fullscreenable); }); socket.on('browserWindowIsFullScreenable', (guid, id) => { - const fullscreenable = getWindowById(id).isFullScreenable(); + const fullscreenable = getWindowById(id)?.isFullScreenable() ?? null; socket.invoke('SendClientResponseBool', guid, fullscreenable); }); socket.on('browserWindowSetClosable', (id, closable) => { - getWindowById(id).setClosable(closable); + getWindowById(id)?.setClosable(closable); }); socket.on('browserWindowIsClosable', (guid, id) => { - const closable = getWindowById(id).isClosable(); + const closable = getWindowById(id)?.isClosable() ?? null; socket.invoke('SendClientResponseBool', guid, closable); }); socket.on('browserWindowSetAlwaysOnTop', (id, flag, level, relativeLevel) => { - getWindowById(id).setAlwaysOnTop(flag, level, relativeLevel); + getWindowById(id)?.setAlwaysOnTop(flag, level, relativeLevel); }); socket.on('browserWindowIsAlwaysOnTop', (guid, id) => { - const isAlwaysOnTop = getWindowById(id).isAlwaysOnTop(); + const isAlwaysOnTop = getWindowById(id)?.isAlwaysOnTop() ?? null; socket.invoke('SendClientResponseBool', guid, isAlwaysOnTop); }); socket.on('browserWindowCenter', (id) => { - getWindowById(id).center(); + getWindowById(id)?.center(); }); socket.on('browserWindowSetPosition', (id, x, y, animate) => { - getWindowById(id).setPosition(x, y, animate); + getWindowById(id)?.setPosition(x, y, animate); }); socket.on('browserWindowGetPosition', (guid, id) => { - const position = getWindowById(id).getPosition(); + const position = getWindowById(id)?.getPosition() ?? null; socket.invoke('SendClientResponseJArray', guid, position); }); socket.on('browserWindowSetTitle', (id, title) => { - getWindowById(id).setTitle(title); + getWindowById(id)?.setTitle(title); }); socket.on('browserWindowGetTitle', (guid, id) => { - const title = getWindowById(id).getTitle(); + const title = getWindowById(id)?.getTitle() ?? null; socket.invoke('SendClientResponseString', guid, title); }); + socket.on('browserWindowSetTitle', (id, title) => { + getWindowById(id)?.setTitle(title); + }); socket.on('browserWindowSetSheetOffset', (id, offsetY, offsetX) => { if (offsetX) { - getWindowById(id).setSheetOffset(offsetY, offsetX); + getWindowById(id)?.setSheetOffset(offsetY, offsetX); } else { - getWindowById(id).setSheetOffset(offsetY); + getWindowById(id)?.setSheetOffset(offsetY); } }); socket.on('browserWindowFlashFrame', (id, flag) => { - getWindowById(id).flashFrame(flag); + getWindowById(id)?.flashFrame(flag); }); socket.on('browserWindowSetSkipTaskbar', (id, skip) => { - getWindowById(id).setSkipTaskbar(skip); + getWindowById(id)?.setSkipTaskbar(skip); }); socket.on('browserWindowSetKiosk', (id, flag) => { - getWindowById(id).setKiosk(flag); + getWindowById(id)?.setKiosk(flag); }); socket.on('browserWindowIsKiosk', (guid, id) => { - const isKiosk = getWindowById(id).isKiosk(); + const isKiosk = getWindowById(id)?.isKiosk() ?? null; socket.invoke('SendClientResponseBool', guid, isKiosk); }); socket.on('browserWindowGetNativeWindowHandle', (id) => { - const nativeWindowHandle = getWindowById(id).getNativeWindowHandle().readInt32LE(0).toString(16); + const nativeWindowHandle = getWindowById(id)?.getNativeWindowHandle()?.readInt32LE(0)?.toString(16) ?? null; socket.invoke('SendClientResponseString', nativeWindowHandle); }); socket.on('browserWindowSetRepresentedFilename', (id, filename) => { - getWindowById(id).setRepresentedFilename(filename); + getWindowById(id)?.setRepresentedFilename(filename); }); socket.on('browserWindowGetRepresentedFilename', (guid, id) => { - const pathname = getWindowById(id).getRepresentedFilename(); + const pathname = getWindowById(id)?.getRepresentedFilename() ?? null; socket.invoke('SendClientResponseString', guid, pathname); }); socket.on('browserWindowSetDocumentEdited', (id, edited) => { - getWindowById(id).setDocumentEdited(edited); + getWindowById(id)?.setDocumentEdited(edited); }); socket.on('browserWindowIsDocumentEdited', (guid, id) => { - const edited = getWindowById(id).isDocumentEdited(); + const edited = getWindowById(id)?.isDocumentEdited() ?? null; socket.invoke('SendClientResponseBool', guid, edited); }); socket.on('browserWindowFocusOnWebView', (id) => { - getWindowById(id).focusOnWebView(); + getWindowById(id)?.focusOnWebView(); }); socket.on('browserWindowBlurWebView', (id) => { - getWindowById(id).blurWebView(); + getWindowById(id)?.blurWebView(); }); socket.on('browserWindowLoadURL', (id, url, options) => { - getWindowById(id).loadURL(url, options); + getWindowById(id)?.loadURL(url, options); }); socket.on('browserWindowReload', (id) => { - getWindowById(id).reload(); + getWindowById(id)?.reload(); }); socket.on('browserWindowSetMenu', (id, menuItems) => { let menu = null; @@ -493,10 +531,10 @@ module.exports = (socket, app) => { socket.invoke('BrowserWindowMenuItemClicked', id, menuid); }); } - getWindowById(id).setMenu(menu); + getWindowById(id)?.setMenu(menu); }); socket.on('browserWindowRemoveMenu', (id) => { - getWindowById(id).removeMenu(); + getWindowById(id)?.removeMenu(); }); function addMenuItemClickConnector(menuItems, callback) { menuItems.forEach((item) => { @@ -504,21 +542,23 @@ module.exports = (socket, app) => { addMenuItemClickConnector(item.submenu.items, callback); } if ('id' in item && item.id) { - item.click = () => { callback(item.id); }; + item.click = () => { + callback(item.id); + }; } }); } socket.on('browserWindowSetProgressBar', (id, progress) => { - getWindowById(id).setProgressBar(progress); + getWindowById(id)?.setProgressBar(progress); }); socket.on('browserWindowSetProgressBar', (id, progress, options) => { - getWindowById(id).setProgressBar(progress, options); + getWindowById(id)?.setProgressBar(progress, options); }); socket.on('browserWindowSetHasShadow', (id, hasShadow) => { - getWindowById(id).setHasShadow(hasShadow); + getWindowById(id)?.setHasShadow(hasShadow); }); socket.on('browserWindowHasShadow', (guid, id) => { - const hasShadow = getWindowById(id).hasShadow(); + const hasShadow = getWindowById(id)?.hasShadow() ?? null; socket.invoke('SendClientResponseBool', guid, hasShadow); }); socket.on('browserWindowSetThumbarButtons', (id, thumbarButtons) => { @@ -529,61 +569,61 @@ module.exports = (socket, app) => { socket.invoke('BrowserWindowThumbbarButtonClicked', id, thumbarButton['id']); }; }); - const success = getWindowById(id).setThumbarButtons(thumbarButtons); + const success = getWindowById(id)?.setThumbarButtons(thumbarButtons) ?? null; socket.invoke('SendClientResponseBool', success); }); socket.on('browserWindowSetThumbnailClip', (id, rectangle) => { - getWindowById(id).setThumbnailClip(rectangle); + getWindowById(id)?.setThumbnailClip(rectangle); }); socket.on('browserWindowSetThumbnailToolTip', (id, toolTip) => { - getWindowById(id).setThumbnailToolTip(toolTip); + getWindowById(id)?.setThumbnailToolTip(toolTip); }); socket.on('browserWindowSetAppDetails', (id, options) => { - getWindowById(id).setAppDetails(options); + getWindowById(id)?.setAppDetails(options); }); socket.on('browserWindowShowDefinitionForSelection', (id) => { - getWindowById(id).showDefinitionForSelection(); + getWindowById(id)?.showDefinitionForSelection(); }); socket.on('browserWindowSetAutoHideMenuBar', (id, hide) => { - getWindowById(id).setAutoHideMenuBar(hide); + getWindowById(id)?.setAutoHideMenuBar(hide); }); socket.on('browserWindowIsMenuBarAutoHide', (guid, id) => { - const isMenuBarAutoHide = getWindowById(id).isMenuBarAutoHide(); + const isMenuBarAutoHide = getWindowById(id)?.isMenuBarAutoHide() ?? null; socket.invoke('SendClientResponseBool', guid, isMenuBarAutoHide); }); socket.on('browserWindowSetMenuBarVisibility', (id, visible) => { - getWindowById(id).setMenuBarVisibility(visible); + getWindowById(id)?.setMenuBarVisibility(visible); }); socket.on('browserWindowIsMenuBarVisible', (guid, id) => { - const isMenuBarVisible = getWindowById(id).isMenuBarVisible(); + const isMenuBarVisible = getWindowById(id)?.isMenuBarVisible() ?? null; socket.invoke('SendClientResponseBool', guid, isMenuBarVisible); }); socket.on('browserWindowSetVisibleOnAllWorkspaces', (id, visible) => { - getWindowById(id).setVisibleOnAllWorkspaces(visible); + getWindowById(id)?.setVisibleOnAllWorkspaces(visible); }); socket.on('browserWindowIsVisibleOnAllWorkspaces', (guid, id) => { - const isVisibleOnAllWorkspaces = getWindowById(id).isVisibleOnAllWorkspaces(); + const isVisibleOnAllWorkspaces = getWindowById(id)?.isVisibleOnAllWorkspaces() ?? null; socket.invoke('SendClientResponseBool', guid, isVisibleOnAllWorkspaces); }); socket.on('browserWindowSetIgnoreMouseEvents', (id, ignore) => { - getWindowById(id).setIgnoreMouseEvents(ignore); + getWindowById(id)?.setIgnoreMouseEvents(ignore); }); socket.on('browserWindowSetContentProtection', (id, enable) => { - getWindowById(id).setContentProtection(enable); + getWindowById(id)?.setContentProtection(enable); }); socket.on('browserWindowSetFocusable', (id, focusable) => { - getWindowById(id).setFocusable(focusable); + getWindowById(id)?.setFocusable(focusable); }); socket.on('browserWindowSetParentWindow', (id, parent) => { const browserWindow = electron_1.BrowserWindow.fromId(parent.id); - getWindowById(id).setParentWindow(browserWindow); + getWindowById(id)?.setParentWindow(browserWindow); }); socket.on('browserWindowGetParentWindow', (guid, id) => { - const browserWindow = getWindowById(id).getParentWindow(); + const browserWindow = getWindowById(id)?.getParentWindow() ?? null; socket.invoke('SendClientResponseInt', guid, browserWindow.id); }); socket.on('browserWindowGetChildWindows', (guid, id) => { - const browserWindows = getWindowById(id).getChildWindows(); + const browserWindows = getWindowById(id)?.getChildWindows() ?? null; const ids = []; browserWindows.forEach(x => { ids.push(x.id); @@ -591,21 +631,34 @@ module.exports = (socket, app) => { socket.invoke('SendClientResponseJArray', guid, ids); }); socket.on('browserWindowSetAutoHideCursor', (id, autoHide) => { - getWindowById(id).setAutoHideCursor(autoHide); + getWindowById(id)?.setAutoHideCursor(autoHide); }); socket.on('browserWindowSetVibrancy', (id, type) => { - getWindowById(id).setVibrancy(type); + getWindowById(id)?.setVibrancy(type); + }); + socket.on('browserWindowSetExcludedFromShownWindowsMenu', (id) => { + const w = getWindowById(id); + if (w) { + w.excludedFromShownWindowsMenu = true; + } }); socket.on('browserWindow-setBrowserView', (id, browserViewId) => { - getWindowById(id).setBrowserView((0, browserView_1.browserViewMediateService)(browserViewId)); + getWindowById(id)?.setBrowserView((0, browserView_1.browserViewMediateService)(browserViewId)); }); function getWindowById(id) { for (let index = 0; index < windows.length; index++) { const element = windows[index]; - if (element.id === id) { - return element; + try { + if (element.id === id) { + return element; + } + } + catch { + //Accessing .id might throw 'Object has been destroyed', so we ignore it here + //The "closed" event should clean this up } } + return null; } }; //# sourceMappingURL=browserWindows.js.map \ No newline at end of file diff --git a/ElectronNET.Host/api/browserWindows.js.map b/ElectronNET.Host/api/browserWindows.js.map index 1ff3d21d..56774e74 100644 --- a/ElectronNET.Host/api/browserWindows.js.map +++ b/ElectronNET.Host/api/browserWindows.js.map @@ -1 +1 @@ -{"version":3,"file":"browserWindows.js","sourceRoot":"","sources":["browserWindows.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browserWindows.js","sourceRoot":"","sources":["browserWindows.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/clipboard.js b/ElectronNET.Host/api/clipboard.js index 1bec9b26..358bb281 100644 --- a/ElectronNET.Host/api/clipboard.js +++ b/ElectronNET.Host/api/clipboard.js @@ -44,6 +44,9 @@ module.exports = (socket) => { socket.invoke('SendClientResponseJArray', guid, formats); }); socket.on('clipboard-write', (data, type) => { + if (data.hasOwnProperty("image")) { + data["image"] = deserializeImage(data["image"]); + } electron_1.clipboard.write(data, type); }); socket.on('clipboard-readImage', (guid, type) => { @@ -52,15 +55,19 @@ module.exports = (socket) => { }); socket.on('clipboard-writeImage', (data, type) => { const dataContent = JSON.parse(data); + const image = deserializeImage(dataContent); + electron_1.clipboard.writeImage(image, type); + }); + function deserializeImage(data) { const image = electron_1.nativeImage.createEmpty(); // tslint:disable-next-line: forin - for (const key in dataContent) { + for (const key in data) { const scaleFactor = key; const bytes = data[key]; const buffer = Buffer.from(bytes, 'base64'); image.addRepresentation({ scaleFactor: +scaleFactor, buffer: buffer }); } - electron_1.clipboard.writeImage(image, type); - }); + return image; + } }; //# sourceMappingURL=clipboard.js.map \ No newline at end of file diff --git a/ElectronNET.Host/api/clipboard.js.map b/ElectronNET.Host/api/clipboard.js.map index b00cf92e..fea7a1fa 100644 --- a/ElectronNET.Host/api/clipboard.js.map +++ b/ElectronNET.Host/api/clipboard.js.map @@ -1 +1 @@ -{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["clipboard.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["clipboard.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/desktopCapturer.js b/ElectronNET.Host/api/desktopCapturer.js new file mode 100644 index 00000000..ad650618 --- /dev/null +++ b/ElectronNET.Host/api/desktopCapturer.js @@ -0,0 +1,21 @@ +"use strict"; +const electron_1 = require("electron"); +let electronSocket; +; +module.exports = (socket) => { + socket.on('desktop-capturer-get-sources', (options) => { + electron_1.desktopCapturer.getSources(options).then(sources => { + const result = sources.map(src => { + return { + appIcon: src.appIcon, + name: src.name, + id: src.id, + display_id: src.display_id, + thumbnail: { 1: src.thumbnail.toPNG().toString('base64') } + }; + }); + socket.invoke('SendClientResponseJObject', result); + }); + }); +}; +//# sourceMappingURL=desktopCapturer.js.map \ No newline at end of file diff --git a/ElectronNET.Host/api/desktopCapturer.js.map b/ElectronNET.Host/api/desktopCapturer.js.map new file mode 100644 index 00000000..5c714bdd --- /dev/null +++ b/ElectronNET.Host/api/desktopCapturer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"desktopCapturer.js","sourceRoot":"","sources":["desktopCapturer.ts"],"names":[],"mappings":";AACA,uCAA2C;AAE3C,IAAI,cAAc,CAAC;AAqBjB,CAAC;AAnBH,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAC/B,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,OAAO,EAAE,EAAE;QAClD,0BAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAE/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC7B,OAAO;oBACH,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,SAAS,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;iBAC7D,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AAGP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/dialog.js b/ElectronNET.Host/api/dialog.js index 4260376d..ede43402 100644 --- a/ElectronNET.Host/api/dialog.js +++ b/ElectronNET.Host/api/dialog.js @@ -8,6 +8,7 @@ module.exports = (socket) => { socket.invoke('SendClientResponseJArray', guid, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); } else { + const id = guid || options; const messageBoxReturnValue = await electron_1.dialog.showMessageBox(browserWindow); socket.invoke('SendClientResponseJArray', guid, [messageBoxReturnValue.response, messageBoxReturnValue.checkboxChecked]); } diff --git a/ElectronNET.Host/api/dialog.js.map b/ElectronNET.Host/api/dialog.js.map index d1c331d8..78a50418 100644 --- a/ElectronNET.Host/api/dialog.js.map +++ b/ElectronNET.Host/api/dialog.js.map @@ -1 +1 @@ -{"version":3,"file":"dialog.js","sourceRoot":"","sources":["dialog.ts"],"names":[],"mappings":";AACA,uCAAiD;AAEjD,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAC/B,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,IAAI,IAAI,IAAI,aAAa,EAAE;YACvB,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAEtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SAChI;aAAM;YACH,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAErE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SAChI;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,qBAAqB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,qBAAqB,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACzC,iBAAM,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,iBAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrD,WAAW;QACX,4DAA4D;IACpE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"dialog.js","sourceRoot":"","sources":["dialog.ts"],"names":[],"mappings":";AACA,uCAAiD;AAEjD,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAC/B,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,IAAI,IAAI,IAAI,aAAa,EAAE;YACvB,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAEtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3E,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SAC5H;aAAM;YACH,MAAM,EAAE,GAAG,IAAI,IAAI,OAAO,CAAC;YAC3B,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAEzE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SAC5H;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,qBAAqB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,qBAAqB,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACzC,iBAAM,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,iBAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrD,WAAW;QACX,4DAA4D;IACpE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/dock.js b/ElectronNET.Host/api/dock.js index 00f664a6..babf4952 100644 --- a/ElectronNET.Host/api/dock.js +++ b/ElectronNET.Host/api/dock.js @@ -52,7 +52,9 @@ module.exports = (socket) => { addMenuItemClickConnector(item.submenu.items, callback); } if ('id' in item && item.id) { - item.click = () => { callback(item.id); }; + item.click = () => { + callback(item.id); + }; } }); } diff --git a/ElectronNET.Host/api/dock.js.map b/ElectronNET.Host/api/dock.js.map index 9b1c1a18..f562f947 100644 --- a/ElectronNET.Host/api/dock.js.map +++ b/ElectronNET.Host/api/dock.js.map @@ -1 +1 @@ -{"version":3,"file":"dock.js","sourceRoot":"","sources":["dock.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"dock.js","sourceRoot":"","sources":["dock.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/globalShortcut.js b/ElectronNET.Host/api/globalShortcut.js index 8fe4ff74..989dd5dd 100644 --- a/ElectronNET.Host/api/globalShortcut.js +++ b/ElectronNET.Host/api/globalShortcut.js @@ -17,7 +17,8 @@ module.exports = (socket) => { try { electron_1.globalShortcut.unregisterAll(); } - catch (error) { } + catch (error) { + } }); }; //# sourceMappingURL=globalShortcut.js.map \ No newline at end of file diff --git a/ElectronNET.Host/api/globalShortcut.js.map b/ElectronNET.Host/api/globalShortcut.js.map index 153b1518..6bbdc61e 100644 --- a/ElectronNET.Host/api/globalShortcut.js.map +++ b/ElectronNET.Host/api/globalShortcut.js.map @@ -1 +1 @@ -{"version":3,"file":"globalShortcut.js","sourceRoot":"","sources":["globalShortcut.ts"],"names":[],"mappings":";AACA,uCAA0C;AAE1C,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAC/B,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,yBAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE;QAC3D,MAAM,YAAY,GAAG,yBAAc,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE9D,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,WAAW,EAAE,EAAE;QACnD,yBAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC3C,IAAI;YACA,yBAAc,CAAC,aAAa,EAAE,CAAC;SAClC;QAAC,OAAO,KAAK,EAAE,GAAG;IACvB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"globalShortcut.js","sourceRoot":"","sources":["globalShortcut.ts"],"names":[],"mappings":";AACA,uCAA0C;AAE1C,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAC/B,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,yBAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE;QAC3D,MAAM,YAAY,GAAG,yBAAc,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE9D,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,WAAW,EAAE,EAAE;QACnD,yBAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC3C,IAAI;YACA,yBAAc,CAAC,aAAa,EAAE,CAAC;SAClC;QAAC,OAAO,KAAK,EAAE;SACf;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/ipc.js b/ElectronNET.Host/api/ipc.js index 39bc57cb..2c409954 100644 --- a/ElectronNET.Host/api/ipc.js +++ b/ElectronNET.Host/api/ipc.js @@ -3,7 +3,21 @@ const electron_1 = require("electron"); module.exports = (socket) => { socket.on('registerIpcMainChannel', (channel) => { electron_1.ipcMain.on(channel, (event, args) => { - socket.invoke("IpcOnChannel", channel, [event.preventDefault(), args]); + event.preventDefault(); + socket.invoke("IpcOnChannel", channel, [args]); + event.returnValue = null; + }); + }); + socket.on('registerIpcMainChannelWithId', (channel) => { + electron_1.ipcMain.on(channel, (event, args) => { + event.preventDefault(); + let wcId = event.sender.id; + let wc = electron_1.webContents.fromId(wcId); + let bw = electron_1.BrowserWindow.fromWebContents(wc); + if (bw) { + socket.invoke("IpcMainChannelWithId", channel, { id: bw.id, wcId: wcId, args: [args] }); + } + event.returnValue = null; }); }); socket.on('registerSyncIpcMainChannel', (channel) => { @@ -13,12 +27,15 @@ module.exports = (socket) => { socket.on(channel + 'Sync', (result) => { event.returnValue = result; }); + event.preventDefault(); socket.invoke("IpcOnChannel", channel, [event.preventDefault(), args]); }); }); socket.on('registerOnceIpcMainChannel', (guid, channel) => { electron_1.ipcMain.once(channel, (event, args) => { + event.preventDefault(); socket.invoke("SendClientResponseJArray", guid, [event.preventDefault(), args]); + event.returnValue = null; }); }); socket.on('removeAllListenersIpcMainChannel', (channel) => { diff --git a/ElectronNET.Host/api/ipc.js.map b/ElectronNET.Host/api/ipc.js.map index f5a6f4e3..2890b616 100644 --- a/ElectronNET.Host/api/ipc.js.map +++ b/ElectronNET.Host/api/ipc.js.map @@ -1 +1 @@ -{"version":3,"file":"ipc.js","sourceRoot":"","sources":["ipc.ts"],"names":[],"mappings":";AACA,uCAA+D;AAE/D,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAE/B,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE;QAC5C,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QAChD,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,wBAAwB;YACxB,yCAAyC;YACzC,MAAM,CAAC,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACnC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAC,IAAI,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,YAAY,GAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAkB,CAAC;QAC7G,IAAI,IAAI,GAAgB,IAAI,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC9B,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM;aACT;SACJ;QAED,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC3C;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"ipc.js","sourceRoot":"","sources":["ipc.ts"],"names":[],"mappings":";AACA,uCAA0E;AAE1E,iBAAS,CAAC,MAAqB,EAAE,EAAE;IAE/B,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE;QAC5C,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/C,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,OAAO,EAAE,EAAE;QAClD,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,IAAI,EAAE,GAAG,sBAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACjC,IAAI,EAAE,GAAG,wBAAa,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,EAAE,EAAE;gBACJ,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,OAAO,EAAE,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC;aACzF;YACD,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QAChD,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,wBAAwB;YACxB,yCAAyC;YACzC,MAAM,CAAC,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACnC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAC,IAAI,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/E,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,YAAY,GAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAkB,CAAC;QAC7G,IAAI,IAAI,GAAgB,IAAI,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC9B,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM;aACT;SACJ;QAED,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC3C;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/menu.js b/ElectronNET.Host/api/menu.js index 63310110..41ea7997 100644 --- a/ElectronNET.Host/api/menu.js +++ b/ElectronNET.Host/api/menu.js @@ -25,7 +25,9 @@ module.exports = (socket) => { addContextMenuItemClickConnector(item.submenu.items, browserWindowId, callback); } if ('id' in item && item.id) { - item.click = () => { callback(item.id, browserWindowId); }; + item.click = () => { + callback(item.id, browserWindowId); + }; } }); } @@ -50,7 +52,9 @@ module.exports = (socket) => { addMenuItemClickConnector(item.submenu.items, callback); } if ('id' in item && item.id) { - item.click = () => { callback(item.id); }; + item.click = () => { + callback(item.id); + }; } }); } diff --git a/ElectronNET.Host/api/menu.js.map b/ElectronNET.Host/api/menu.js.map index f6130afb..2f09718e 100644 --- a/ElectronNET.Host/api/menu.js.map +++ b/ElectronNET.Host/api/menu.js.map @@ -1 +1 @@ -{"version":3,"file":"menu.js","sourceRoot":"","sources":["menu.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"menu.js","sourceRoot":"","sources":["menu.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/tray.js b/ElectronNET.Host/api/tray.js index ccc2e7fa..a8ab0eeb 100644 --- a/ElectronNET.Host/api/tray.js +++ b/ElectronNET.Host/api/tray.js @@ -3,42 +3,45 @@ const electron_1 = require("electron"); let tray = (global['$tray'] = global['tray'] || { value: null }); module.exports = (socket) => { socket.on('register-tray-click', (id) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.on('click', (event, bounds) => { socket.invoke('TrayOnClick', id, [event.__proto__, bounds]); }); } }); socket.on('register-tray-right-click', (id) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.on('right-click', (event, bounds) => { socket.invoke('TrayOnRightClick', id, [event.__proto__, bounds]); }); } }); socket.on('register-tray-double-click', (id) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.on('double-click', (event, bounds) => { - socket.invoke('TrayOnDoubleClick', id, [event.__proto__, bounds]); + socket.invoke('TrayOnDoubleClick', id, { + eventArgs: event.__proto__, + bounds: bounds + }); }); } }); socket.on('register-tray-balloon-show', (id) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.on('balloon-show', () => { socket.invoke('TrayOnBalloonShow', id); }); } }); socket.on('register-tray-balloon-click', (id) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.on('balloon-click', () => { socket.invoke('TrayOnBalloonClick', id); }); } }); socket.on('register-tray-balloon-closed', (id) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.on('balloon-closed', () => { socket.invoke('TrayOnBalloonClosed', id); }); @@ -56,33 +59,33 @@ module.exports = (socket) => { } }); socket.on('tray-destroy', () => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.destroy(); } }); socket.on('tray-setImage', (image) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.setImage(image); } }); socket.on('tray-setPressedImage', (image) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { const img = electron_1.nativeImage.createFromPath(image); tray.value.setPressedImage(img); } }); socket.on('tray-setToolTip', (toolTip) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.setToolTip(toolTip); } }); socket.on('tray-setTitle', (title) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.setTitle(title); } }); socket.on('tray-displayBalloon', (options) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.displayBalloon(options); } }); @@ -93,7 +96,7 @@ module.exports = (socket) => { } }); socket.on('register-tray-on-event', (eventName, listenerName) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.on(eventName, (...args) => { if (args.length > 1) { socket.invoke(listenerName, args[1]); @@ -105,7 +108,7 @@ module.exports = (socket) => { } }); socket.on('register-tray-once-event', (eventName, listenerName) => { - if (tray.value) { + if (tray.value && !tray.value.isDestroyed()) { tray.value.once(eventName, (...args) => { if (args.length > 1) { socket.invoke(listenerName, args[1]); @@ -122,7 +125,9 @@ module.exports = (socket) => { addMenuItemClickConnector(item.submenu.items, callback); } if ('id' in item && item.id) { - item.click = () => { callback(item.id); }; + item.click = () => { + callback(item.id); + }; } }); } diff --git a/ElectronNET.Host/api/tray.js.map b/ElectronNET.Host/api/tray.js.map index 1ad47300..07819486 100644 --- a/ElectronNET.Host/api/tray.js.map +++ b/ElectronNET.Host/api/tray.js.map @@ -1 +1 @@ -{"version":3,"file":"tray.js","sourceRoot":"","sources":["tray.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tray.js","sourceRoot":"","sources":["tray.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ElectronNET.Host/api/webContents.js b/ElectronNET.Host/api/webContents.js index 2858ce48..db18c595 100644 --- a/ElectronNET.Host/api/webContents.js +++ b/ElectronNET.Host/api/webContents.js @@ -206,7 +206,7 @@ module.exports = (socket) => { }); socket.on('webContents-session-removeExtension', (id, name) => { const browserWindow = getWindowById(id); - socket.invoke('webContents-getUrl' + id, browserWindow.webContents.getURL()); + browserWindow.webContents.session.removeExtension(name); }); socket.on('webContents-session-loadExtension', async (guid, id, path, allowFileAccess = false) => { const browserWindow = getWindowById(id); diff --git a/ElectronNET.Host/api/webContents.js.map b/ElectronNET.Host/api/webContents.js.map index a2912800..b41f3829 100644 --- a/ElectronNET.Host/api/webContents.js.map +++ b/ElectronNET.Host/api/webContents.js.map @@ -1 +1 @@ -{"version":3,"file":"webContents.js","sourceRoot":"","sources":["webContents.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"webContents.js","sourceRoot":"","sources":["webContents.ts"],"names":[],"mappings":"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"} \ No newline at end of file From 9f03a694102aa1609fc3075472717917e9f51735 Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Fri, 4 Mar 2022 16:12:27 +0100 Subject: [PATCH 14/15] MIgrate over to net6.0 --- ElectronNET.API/ElectronNET.API.csproj | 5 ++--- ElectronNET.CLI/ElectronNET.CLI.csproj | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/ElectronNET.API/ElectronNET.API.csproj b/ElectronNET.API/ElectronNET.API.csproj index 48b4fd11..af793494 100644 --- a/ElectronNET.API/ElectronNET.API.csproj +++ b/ElectronNET.API/ElectronNET.API.csproj @@ -1,12 +1,11 @@  - net5.0 + net6.0 true ..\artifacts ElectronNET.API - Gregor Biswanger, Robert Muehsig - Gregor Biswanger, Robert Muehsig, Rafael Oliveira + Gregor Biswanger, Robert Muehsig, Rafael Oliveira, Thiemo Borger Electron.NET MIT diff --git a/ElectronNET.CLI/ElectronNET.CLI.csproj b/ElectronNET.CLI/ElectronNET.CLI.csproj index 0c0cd84e..924ee599 100644 --- a/ElectronNET.CLI/ElectronNET.CLI.csproj +++ b/ElectronNET.CLI/ElectronNET.CLI.csproj @@ -3,7 +3,7 @@ Exe - net5.0 + net6.0 dotnet-electronize electronize @@ -13,8 +13,7 @@ ElectronNET.CLI 99.0.0.0 - Gregor Biswanger, Robert Muehsig - Gregor Biswanger, Robert Muehsig, Rafael Oliveira + Gregor Biswanger, Robert Muehsig, Rafael Oliveira, Thiemo Borger Electron.NET From 84eef777339dce9a7ddc901cefa70cf6a299f634 Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Fri, 4 Mar 2022 19:32:11 +0100 Subject: [PATCH 15/15] Split HubElectron into partials --- ElectronNET.API/Electron.cs | 15 + .../Extensions/SignalrSerializeHelper.cs | 148 ++-- ElectronNET.API/Hubs/App.cs | 74 ++ ElectronNET.API/Hubs/AutoUpdater.cs | 43 ++ ElectronNET.API/Hubs/BrowserWindow.cs | 216 ++++++ ElectronNET.API/Hubs/Common.cs | 127 ++++ ElectronNET.API/Hubs/Cookies.cs | 19 + ElectronNET.API/Hubs/Dock.cs | 19 + ElectronNET.API/Hubs/GlobalShortcut.cs | 20 + ElectronNET.API/Hubs/HostHook.cs | 22 + ElectronNET.API/Hubs/HubElectron.cs | 713 ------------------ ElectronNET.API/Hubs/IpcMain.cs | 40 + ElectronNET.API/Hubs/Menu.cs | 29 + ElectronNET.API/Hubs/NativeTheme.cs | 17 + ElectronNET.API/Hubs/Notifications.cs | 40 + ElectronNET.API/Hubs/PowerMonitor.cs | 47 ++ ElectronNET.API/Hubs/Screen.cs | 31 + ElectronNET.API/Hubs/Tray.cs | 55 ++ ElectronNET.API/Hubs/WebContents.cs | 24 + ElectronNET.API/Hubs/WindowManager.cs | 17 + ElectronNET.API/IpcMain.cs | 13 +- ElectronNET.API/Models/SignalrResponse.cs | 24 + ElectronNET.API/WindowManager.cs | 2 +- 23 files changed, 961 insertions(+), 794 deletions(-) create mode 100644 ElectronNET.API/Hubs/App.cs create mode 100644 ElectronNET.API/Hubs/AutoUpdater.cs create mode 100644 ElectronNET.API/Hubs/BrowserWindow.cs create mode 100644 ElectronNET.API/Hubs/Common.cs create mode 100644 ElectronNET.API/Hubs/Cookies.cs create mode 100644 ElectronNET.API/Hubs/Dock.cs create mode 100644 ElectronNET.API/Hubs/GlobalShortcut.cs create mode 100644 ElectronNET.API/Hubs/HostHook.cs delete mode 100644 ElectronNET.API/Hubs/HubElectron.cs create mode 100644 ElectronNET.API/Hubs/IpcMain.cs create mode 100644 ElectronNET.API/Hubs/Menu.cs create mode 100644 ElectronNET.API/Hubs/NativeTheme.cs create mode 100644 ElectronNET.API/Hubs/Notifications.cs create mode 100644 ElectronNET.API/Hubs/PowerMonitor.cs create mode 100644 ElectronNET.API/Hubs/Screen.cs create mode 100644 ElectronNET.API/Hubs/Tray.cs create mode 100644 ElectronNET.API/Hubs/WebContents.cs create mode 100644 ElectronNET.API/Hubs/WindowManager.cs create mode 100644 ElectronNET.API/Models/SignalrResponse.cs diff --git a/ElectronNET.API/Electron.cs b/ElectronNET.API/Electron.cs index 60087eef..8e066c9c 100644 --- a/ElectronNET.API/Electron.cs +++ b/ElectronNET.API/Electron.cs @@ -1,9 +1,14 @@ using ElectronNET.API.Hubs; +using ElectronNET.API.Models; using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Newtonsoft.Json.Linq; using System; +using System.Collections.Concurrent; +using System.Collections.ObjectModel; using System.Runtime.Versioning; +using System.Threading.Tasks; namespace ElectronNET.API { @@ -12,6 +17,16 @@ namespace ElectronNET.API ///
public static class Electron { + + public static readonly ObservableCollection SignalrObservedJArray = new ObservableCollection(); + public static readonly ObservableCollection SignalrObservedJObject = new ObservableCollection(); + + public static readonly ConcurrentDictionary> ClientResponsesString = new ConcurrentDictionary>(); + public static readonly ConcurrentDictionary> ClientResponsesInt = new ConcurrentDictionary>(); + public static readonly ConcurrentDictionary> ClientResponsesBool = new ConcurrentDictionary>(); + public static readonly ConcurrentDictionary> ClientResponsesJObject = new ConcurrentDictionary>(); + public static readonly ConcurrentDictionary> ClientResponsesJArray = new ConcurrentDictionary>(); + /// /// Communicate asynchronously from the main process to renderer processes. /// diff --git a/ElectronNET.API/Extensions/SignalrSerializeHelper.cs b/ElectronNET.API/Extensions/SignalrSerializeHelper.cs index 21317c9b..8b78602a 100644 --- a/ElectronNET.API/Extensions/SignalrSerializeHelper.cs +++ b/ElectronNET.API/Extensions/SignalrSerializeHelper.cs @@ -15,7 +15,7 @@ public static async Task GetSignalrResultString(string signalrCommand) { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesString.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString()); string result; @@ -33,7 +33,7 @@ public static async Task GetSignalrResultString(string signalrCommand) } finally { - HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); } return result; @@ -43,7 +43,7 @@ public static async Task GetSignalrResultString(string signalrCommand, i { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesString.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); string result; @@ -61,7 +61,7 @@ public static async Task GetSignalrResultString(string signalrCommand, i } finally { - HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); } return result; @@ -71,7 +71,7 @@ public static async Task GetSignalrResultString(string signalrCommand, s { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesString.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); string result; @@ -89,7 +89,7 @@ public static async Task GetSignalrResultString(string signalrCommand, s } finally { - HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); } return result; @@ -99,7 +99,7 @@ public static async Task GetSignalrResultString(string signalrCommand, i { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesString.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2, parameter3); string result; @@ -117,7 +117,7 @@ public static async Task GetSignalrResultString(string signalrCommand, i } finally { - HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); } return result; @@ -127,7 +127,7 @@ public static async Task GetSignalrResultString(string signalrCommand, J { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesString.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); string result; @@ -145,7 +145,7 @@ public static async Task GetSignalrResultString(string signalrCommand, J } finally { - HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); } return result; @@ -155,7 +155,7 @@ public static async Task GetSignalrResultString(string signalrCommand, s { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesString.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); string result; @@ -173,7 +173,7 @@ public static async Task GetSignalrResultString(string signalrCommand, s } finally { - HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); } return result; @@ -183,7 +183,7 @@ public static async Task GetSignalrResultString(string signalrCommand, i { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesString.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); string result; @@ -201,7 +201,7 @@ public static async Task GetSignalrResultString(string signalrCommand, i } finally { - HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); } return result; @@ -211,7 +211,7 @@ public static async Task GetSignalrResultString(string signalrCommand, J { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesString.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); string result; @@ -229,7 +229,7 @@ public static async Task GetSignalrResultString(string signalrCommand, J } finally { - HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); } return result; @@ -240,7 +240,7 @@ public static async Task GetSignalrResultString(string signalrCommand, J { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesString.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesString.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); string result; @@ -258,7 +258,7 @@ public static async Task GetSignalrResultString(string signalrCommand, J } finally { - HubElectron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesString.TryRemove(guid, out taskCompletionSource); } return result; @@ -268,7 +268,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, strin { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); bool result; @@ -286,7 +286,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, strin } finally { - HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); } return result; @@ -296,7 +296,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, int p { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); bool result; @@ -314,7 +314,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, int p } finally { - HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); } return result; @@ -324,7 +324,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, int p { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2, parameter3); bool result; @@ -342,7 +342,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, int p } finally { - HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); } return result; @@ -352,7 +352,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, strin { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2, parameter3); bool result; @@ -370,7 +370,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, strin } finally { - HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); } return result; @@ -380,7 +380,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, int p { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); bool result; @@ -398,7 +398,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, int p } finally { - HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); } return result; @@ -408,7 +408,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, int p { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); bool result; @@ -426,7 +426,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, int p } finally { - HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); } return result; @@ -437,7 +437,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, strin { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), first, parameter1, parameter2); bool result; @@ -455,7 +455,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, strin } finally { - HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); } return result; @@ -465,7 +465,7 @@ public static async Task GetSignalrResultBool(string signalrCommand) { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString()); bool result; @@ -483,7 +483,7 @@ public static async Task GetSignalrResultBool(string signalrCommand) } finally { - HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); } return result; @@ -493,7 +493,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, int p { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); bool result; @@ -511,7 +511,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, int p } finally { - HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); } return result; @@ -521,7 +521,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, JArra { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); bool result; @@ -539,7 +539,7 @@ public static async Task GetSignalrResultBool(string signalrCommand, JArra } finally { - HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); } return result; @@ -549,7 +549,7 @@ public static async Task GetSignalrResultBoolParamater(string signalrComma { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesBool.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); bool result; @@ -567,7 +567,7 @@ public static async Task GetSignalrResultBoolParamater(string signalrComma } finally { - HubElectron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesBool.TryRemove(guid, out taskCompletionSource); } return result; @@ -577,7 +577,7 @@ public static async Task GetSignalrResultJObject(string signalrCommand, { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); JObject result; @@ -595,7 +595,7 @@ public static async Task GetSignalrResultJObject(string signalrCommand, } finally { - HubElectron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); } return result; @@ -605,7 +605,7 @@ public static async Task GetSignalrResultJObject(string signalrCommand, { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); JObject result; @@ -623,7 +623,7 @@ public static async Task GetSignalrResultJObject(string signalrCommand, } finally { - HubElectron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); } return result; @@ -633,7 +633,7 @@ public static async Task GetSignalrResultJObject(string signalrCommand, { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2, parameter3); JObject result; @@ -651,7 +651,7 @@ public static async Task GetSignalrResultJObject(string signalrCommand, } finally { - HubElectron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); } return result; @@ -662,7 +662,7 @@ public static async Task GetSignalrResultJObject(string signalrCommand) { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString()); JObject result; @@ -680,7 +680,7 @@ public static async Task GetSignalrResultJObject(string signalrCommand) } finally { - HubElectron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); } return result; @@ -690,7 +690,7 @@ public static async Task GetSignalrResultJObject(string signalrCommand, { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesJObject.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); JObject result; @@ -708,7 +708,7 @@ public static async Task GetSignalrResultJObject(string signalrCommand, } finally { - HubElectron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesJObject.TryRemove(guid, out taskCompletionSource); } return result; @@ -718,7 +718,7 @@ public static async Task GetSignalrResultJArray(string signalrCommand) { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString()); JArray result; @@ -736,7 +736,7 @@ public static async Task GetSignalrResultJArray(string signalrCommand) } finally { - HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); } return result; @@ -746,7 +746,7 @@ public static async Task GetSignalrResultJArrayNoTimeout(string signalrC { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); JArray result; @@ -757,7 +757,7 @@ public static async Task GetSignalrResultJArrayNoTimeout(string signalrC } finally { - HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); } return result; @@ -767,7 +767,7 @@ public static async Task GetSignalrResultJArray(string signalrCommand, J { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); JArray result; @@ -785,7 +785,7 @@ public static async Task GetSignalrResultJArray(string signalrCommand, J } finally { - HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); } return result; @@ -795,7 +795,7 @@ public static async Task GetSignalrResultJArray(string signalrCommand, i { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); JArray result; @@ -813,7 +813,7 @@ public static async Task GetSignalrResultJArray(string signalrCommand, i } finally { - HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); } return result; @@ -823,7 +823,7 @@ public static async Task GetSignalrResultJArray(string signalrCommand, i { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); JArray result; @@ -841,7 +841,7 @@ public static async Task GetSignalrResultJArray(string signalrCommand, i } finally { - HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); } return result; @@ -851,7 +851,7 @@ public static async Task GetSignalrResultJArray(string signalrCommand, i { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); JArray result; @@ -869,7 +869,7 @@ public static async Task GetSignalrResultJArray(string signalrCommand, i } finally { - HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); } return result; @@ -879,7 +879,7 @@ public static async Task GetSignalrResultJArray(string signalrCommand, J { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesJArray.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); JArray result; @@ -897,7 +897,7 @@ public static async Task GetSignalrResultJArray(string signalrCommand, J } finally { - HubElectron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesJArray.TryRemove(guid, out taskCompletionSource); } return result; @@ -907,7 +907,7 @@ public static async Task GetSignalrResultInt(string signalrCommand) { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString()); int result; @@ -925,7 +925,7 @@ public static async Task GetSignalrResultInt(string signalrCommand) } finally { - HubElectron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); } return result; @@ -935,7 +935,7 @@ public static async Task GetSignalrResultInt(string signalrCommand, int par { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); int result; @@ -953,7 +953,7 @@ public static async Task GetSignalrResultInt(string signalrCommand, int par } finally { - HubElectron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); } return result; @@ -963,7 +963,7 @@ public static async Task GetSignalrResultInt(string signalrCommand, string { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); int result; @@ -981,7 +981,7 @@ public static async Task GetSignalrResultInt(string signalrCommand, string } finally { - HubElectron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); } return result; @@ -991,7 +991,7 @@ public static async Task GetSignalrResultInt(string signalrCommand, JObject { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1); int result; @@ -1009,7 +1009,7 @@ public static async Task GetSignalrResultInt(string signalrCommand, JObject } finally { - HubElectron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); } return result; @@ -1019,7 +1019,7 @@ public static async Task GetSignalrResultInt(string signalrCommand, JObject { var taskCompletionSource = new TaskCompletionSource(); var guid = Guid.NewGuid(); - HubElectron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); await Electron.SignalrElectron.Clients.All.SendAsync(signalrCommand, guid.ToString(), parameter1, parameter2); int result; @@ -1037,7 +1037,7 @@ public static async Task GetSignalrResultInt(string signalrCommand, JObject } finally { - HubElectron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); + Electron.ClientResponsesInt.TryRemove(guid, out taskCompletionSource); } return result; diff --git a/ElectronNET.API/Hubs/App.cs b/ElectronNET.API/Hubs/App.cs new file mode 100644 index 00000000..cc1d679b --- /dev/null +++ b/ElectronNET.API/Hubs/App.cs @@ -0,0 +1,74 @@ +using Microsoft.AspNetCore.SignalR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void AppWindowActivate() + { + Electron.App.TriggerOnActivate(); + } + + public void AppActivateFromSecondInstance(string[] args) + { + Electron.App.TriggerOnAppActivateFromSecondInstance(args); + } + + public void AppWindowAllClosed(int id) + { + // We invoke this hub always because we dont know if it's started independent from electron + // If the main app quits id = 0, else we get the event id from electron (appWindowAllClosedEventId) + Electron.App.TriggerOnWindowAllClosed(); + } + + public void AppBeforeQuit(int id) + { + Electron.App.TriggerOnBeforeQuit(new QuitEventArgs()); + } + + public void AppWillQuit(int id) + { + Electron.App.TriggerOnWillQuit(new QuitEventArgs()); + } + + public void AppBrowserWindowBlur(int id) + { + Electron.App.TriggerOnBrowserWindowBlur(); + } + + public void AppBrowserWindowFocus(int id) + { + Electron.App.TriggerOnBrowserWindowFocus(); + } + + public async Task AppBrowserWindowCreated(int id) + { + Electron.App.TriggerOnBrowserWindowCreated(); + } + + public void AppWebContentsCreated(int id) + { + Electron.App.TriggerOnWebContentsCreated(); + } + + public void AppAccessibilitySupportChanged(int id, bool state) + { + Electron.App.TriggerOnAccessibilitySupportChanged(state); + } + + public void AppOpenFile(int id, string file) + { + Electron.App.TriggerOnOpenFile(file); + } + + public void AppOpenUrl(int id, string url) + { + Electron.App.TriggerOnOpenUrl(url); + } + } +} diff --git a/ElectronNET.API/Hubs/AutoUpdater.cs b/ElectronNET.API/Hubs/AutoUpdater.cs new file mode 100644 index 00000000..2b9cb12c --- /dev/null +++ b/ElectronNET.API/Hubs/AutoUpdater.cs @@ -0,0 +1,43 @@ +using Microsoft.AspNetCore.SignalR; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void AutoUpdaterOnError(int id, string error) + { + Electron.AutoUpdater.TriggerOnError(error); + } + + public void AutoUpdaterOnCheckingForUpdate(int id) + { + Electron.AutoUpdater.TriggerOnCheckingForUpdate(); + } + + public void AutoUpdaterOnUpdateAvailable(int id, JObject jobject) + { + Electron.AutoUpdater.TriggerOnUpdateAvailable(jobject); + } + + public void AutoUpdaterOnUpdateNotAvailable(int id, JObject jobject) + { + Electron.AutoUpdater.TriggerOnUpdateNotAvailable(jobject); + } + + public void AutoUpdaterOnDownloadProgress(int id, JObject jobject) + { + Electron.AutoUpdater.TriggerOnUpdateNotAvailable(jobject); + } + + public void AutoUpdaterOnUpdateDownloaded(int id, JObject jobject) + { + Electron.AutoUpdater.TriggerOnUpdateNotAvailable(jobject); + } + } +} diff --git a/ElectronNET.API/Hubs/BrowserWindow.cs b/ElectronNET.API/Hubs/BrowserWindow.cs new file mode 100644 index 00000000..d25184c1 --- /dev/null +++ b/ElectronNET.API/Hubs/BrowserWindow.cs @@ -0,0 +1,216 @@ +using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void BrowserWindowReadyToShow(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnReadyToShow(); + } + + public void BrowserWindowPageTitleUpdated(int id, string title) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnPageTitleUpdated(title); + } + + public void BrowserWindowClose(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnClose(); + } + + public void BrowserWindowsClosed(JArray ids) + { + foreach (var id in ids) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == (int)id).FirstOrDefault(); + window.TriggerOnClosed(); + } + } + + public void BrowserWindowClosed(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnClosed(); + } + + public void BrowserWindowSessionEnd(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnSessionEnd(); + } + + public void BrowserWindowUnresponsive(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnUnresponsive(); + } + + public void BrowserWindowResponsive(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnResponsive(); + } + + public void BrowserWindowBlur(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnBlur(); + } + + public void BrowserWindowFocus(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnFocus(); + } + + public void BrowserWindowShow(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnShow(); + } + + public void BrowserWindowHide(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnHide(); + } + + public void BrowserWindowMaximize(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnMaximize(); + } + + public void BrowserWindowUnmaximize(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnUnmaximize(); + } + + public void BrowserWindowMinimize(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnMinimize(); + } + + public void BrowserWindowRestore(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnRestore(); + } + + public void BrowserWindowResize(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnResize(); + } + + public void BrowserWindowMove(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnMove(); + } + + public void BrowserWindowMoved(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnMoved(); + } + + public void BrowserWindowEnterFullScreen(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnEnterFullScreen(); + } + + public void BrowserWindowLeaveFullScreen(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnLeaveFullScreen(); + } + + public void BrowserWindowEnterHtmlFullScreen(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnEnterHtmlFullScreen(); + } + + public void BrowserWindowLeaveHtmlFullScreen(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnLeaveHtmlFullScreen(); + } + + public void BrowserWindowAppCommand(int id, string command) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnAppCommand(command); + } + + public void BrowserWindowScrollTouchBegin(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnScrollTouchBegin(); + } + + public void BrowserWindowScrollTouchEnd(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnScrollTouchEnd(); + } + + public void BrowserWindowScrollTouchEdge(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnScrollTouchEdge(); + } + + public void BrowserWindowSwipe(int id, string direction) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnSwipe(direction); + } + + public void BrowserWindowSheetBegin(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnSheetBegin(); + } + + public void BrowserWindowSheetEnd(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnSheetEnd(); + } + + public void BrowserWindowNewWindowForTab(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnNewWindowForTab(); + } + + public void BrowserWindowMenuItemClicked(int id, string menuid) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.TriggerOnMenuItemClicked(menuid); + } + + public void BrowserWindowThumbbarButtonClicked(int id, string thumbarButtonId) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + ThumbarButton thumbarButton = window.ThumbarButtons.Where(x => x.Id == thumbarButtonId).FirstOrDefault(); + thumbarButton?.Click(); + } + } +} diff --git a/ElectronNET.API/Hubs/Common.cs b/ElectronNET.API/Hubs/Common.cs new file mode 100644 index 00000000..7bb92a1c --- /dev/null +++ b/ElectronNET.API/Hubs/Common.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Threading.Tasks; +using ElectronNET.API.Entities; +using ElectronNET.API.Models; +using Microsoft.AspNetCore.SignalR; +using Microsoft.Extensions.DependencyInjection; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + + public async Task SendMessage(string user) + { + await Clients.All.SendAsync("ReceiveMessage", user); + } + + public void SendClientResponseString(string guidString, string response) + { + TaskCompletionSource tcs; + Guid guid = new Guid(guidString); + + if (Electron.ClientResponsesString.TryGetValue(guid, out tcs)) + { + // Trigger the task continuation + tcs.TrySetResult(response); + //tcs.SetResult(response); + + } + else + { + // Client response for something that isn't being tracked, might be an error + //Test Only + throw new Exception("Unexpected Response"); + } + } + + public void SendClientResponseBool(string guidString, bool response) + { + TaskCompletionSource tcs; + Guid guid = new Guid(guidString); + + if (Electron.ClientResponsesBool.TryGetValue(guid, out tcs)) + { + // Trigger the task continuation + tcs.TrySetResult(response); + } + else + { + // Client response for something that isn't being tracked, might be an error + //Test Only + throw new Exception("Unexpected Response"); + } + } + + public void SendClientResponseJObject(string guidString, JObject response) + { + TaskCompletionSource tcs; + Guid guid = new Guid(guidString); + + if (Electron.ClientResponsesJObject.TryGetValue(guid, out tcs)) + { + // Trigger the task continuation + tcs.TrySetResult(response); + } + else + { + // Client response for something that isn't being tracked, might be an error + //Test Only + throw new Exception("Unexpected Response"); + } + } + + public void SendClientResponseInt(string guidString, int response) + { + //Type type = ((ObjectHandle)response).Unwrap().GetType(); + TaskCompletionSource tcs; + Guid guid = new Guid(guidString); + + if (Electron.ClientResponsesInt.TryGetValue(guid, out tcs)) + { + // Trigger the task continuation + tcs.TrySetResult(response); + } + else + { + // Client response for something that isn't being tracked, might be an error + //Test Only + throw new Exception("Unexpected Response"); + } + } + + public void SendClientResponseJArray(string guidString, JArray response) + { + TaskCompletionSource tcs; + Guid guid = new Guid(guidString); + + if (Electron.ClientResponsesJArray.TryGetValue(guid, out tcs)) + { + tcs.TrySetResult(response); + } + else + { + throw new Exception("Unexpected Response"); + } + } + + public override async Task OnConnectedAsync() + { + Electron.ElectronConnected = true; + await base.OnConnectedAsync(); + + ElectronClients.ClientsList newClient = new ElectronClients.ClientsList(); + newClient.ConnectionId = Context.ConnectionId; + newClient.ElectronClient = true; + ElectronClients.ElectronConnections.Clients.Add(newClient); + } + } +} diff --git a/ElectronNET.API/Hubs/Cookies.cs b/ElectronNET.API/Hubs/Cookies.cs new file mode 100644 index 00000000..124bd953 --- /dev/null +++ b/ElectronNET.API/Hubs/Cookies.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.SignalR; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void CookiesOnChanged(int id, JArray jarray) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.WebContents.Session.Cookies.TriggerOnChanged(jarray); + } + } +} diff --git a/ElectronNET.API/Hubs/Dock.cs b/ElectronNET.API/Hubs/Dock.cs new file mode 100644 index 00000000..32742246 --- /dev/null +++ b/ElectronNET.API/Hubs/Dock.cs @@ -0,0 +1,19 @@ +using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void DockMenuItemClicked(string id) + { + MenuItem menuItem = Dock.Instance.MenuItems.Where(x => x.Id == id).FirstOrDefault(); + menuItem?.Click(); + } + } +} diff --git a/ElectronNET.API/Hubs/GlobalShortcut.cs b/ElectronNET.API/Hubs/GlobalShortcut.cs new file mode 100644 index 00000000..e551fbb7 --- /dev/null +++ b/ElectronNET.API/Hubs/GlobalShortcut.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.SignalR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void GlobalShortcutPressed(string id) + { + if (GlobalShortcut.Instance._shortcuts.ContainsKey(id.ToString())) + { + GlobalShortcut.Instance._shortcuts.Where(x => x.Key == id).FirstOrDefault().Value(); + } + } + } +} diff --git a/ElectronNET.API/Hubs/HostHook.cs b/ElectronNET.API/Hubs/HostHook.cs new file mode 100644 index 00000000..e87d7284 --- /dev/null +++ b/ElectronNET.API/Hubs/HostHook.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.SignalR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void HostHookResult(string socketEventName, params dynamic[] arguments) + { + + } + + public void HostHookError(string socketEventName, params dynamic[] arguments) + { + + } + } +} diff --git a/ElectronNET.API/Hubs/HubElectron.cs b/ElectronNET.API/Hubs/HubElectron.cs deleted file mode 100644 index 6c753fbd..00000000 --- a/ElectronNET.API/Hubs/HubElectron.cs +++ /dev/null @@ -1,713 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Text; -using System.Text.Json; -using System.Threading.Tasks; -using ElectronNET.API.Entities; -using ElectronNET.API.Models; -using Microsoft.AspNetCore.SignalR; -using Microsoft.Extensions.DependencyInjection; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace ElectronNET.API.Hubs -{ - - public class HubElectron : Hub - { - public class SignalrResponse - { - public string Channel { get; set; } = null; - public JArray Value { get; set; } = null; - } - - public class SignalrResponseJObject - { - public string Channel { get; set; } = null; - public JObject Value { get; set; } = null; - } - - public class ArgsAndIds - { - public int id { get; set; } - public int wcId { get; set; } - public object[] args { get; set; } - } - - public async Task SendMessage(string user) - { - await Clients.All.SendAsync("ReceiveMessage", user); - } - - public static readonly ObservableCollection SignalrObservedJArray = new ObservableCollection(); - public static readonly ObservableCollection SignalrObservedJObject = new ObservableCollection(); - - public static readonly ConcurrentDictionary> ClientResponsesString = new ConcurrentDictionary>(); - public static readonly ConcurrentDictionary> ClientResponsesInt = new ConcurrentDictionary>(); - public static readonly ConcurrentDictionary> ClientResponsesBool = new ConcurrentDictionary>(); - public static readonly ConcurrentDictionary> ClientResponsesJObject = new ConcurrentDictionary>(); - public static readonly ConcurrentDictionary> ClientResponsesJArray = new ConcurrentDictionary>(); - - public void SendClientResponseString(string guidString, string response) - { - TaskCompletionSource tcs; - Guid guid = new Guid(guidString); - - if (ClientResponsesString.TryGetValue(guid, out tcs)) - { - // Trigger the task continuation - tcs.TrySetResult(response); - //tcs.SetResult(response); - - } - else - { - // Client response for something that isn't being tracked, might be an error - //Test Only - throw new Exception("Unexpected Response"); - } - } - - public void SendClientResponseBool(string guidString, bool response) - { - TaskCompletionSource tcs; - Guid guid = new Guid(guidString); - - if (ClientResponsesBool.TryGetValue(guid, out tcs)) - { - // Trigger the task continuation - tcs.TrySetResult(response); - } - else - { - // Client response for something that isn't being tracked, might be an error - //Test Only - throw new Exception("Unexpected Response"); - } - } - - public void SendClientResponseJObject(string guidString, JObject response) - { - TaskCompletionSource tcs; - Guid guid = new Guid(guidString); - - if (ClientResponsesJObject.TryGetValue(guid, out tcs)) - { - // Trigger the task continuation - tcs.TrySetResult(response); - } - else - { - // Client response for something that isn't being tracked, might be an error - //Test Only - throw new Exception("Unexpected Response"); - } - } - - public void SendClientResponseInt(string guidString, int response) - { - //Type type = ((ObjectHandle)response).Unwrap().GetType(); - TaskCompletionSource tcs; - Guid guid = new Guid(guidString); - - if (ClientResponsesInt.TryGetValue(guid, out tcs)) - { - // Trigger the task continuation - tcs.TrySetResult(response); - } - else - { - // Client response for something that isn't being tracked, might be an error - //Test Only - throw new Exception("Unexpected Response"); - } - } - - - public void SendClientResponseJArray(string guidString, JArray response) - { - TaskCompletionSource tcs; - Guid guid = new Guid(guidString); - - if (ClientResponsesJArray.TryGetValue(guid, out tcs)) - { - tcs.TrySetResult(response); - } - else - { - throw new Exception("Unexpected Response"); - } - } - - #region App - - public void AppWindowActivate() - { - Electron.App.TriggerOnActivate(); - } - - public void AppActivateFromSecondInstance(string[] args) - { - Electron.App.TriggerOnAppActivateFromSecondInstance(args); - } - - public void AppWindowAllClosed(int id) - { - // We invoke this hub always because we dont know if it's started independent from electron - // If the main app quits id = 0, else we get the event id from electron (appWindowAllClosedEventId) - Electron.App.TriggerOnWindowAllClosed(); - } - - public void AppBeforeQuit(int id) - { - Electron.App.TriggerOnBeforeQuit(new QuitEventArgs()); - } - - public void AppWillQuit(int id) - { - Electron.App.TriggerOnWillQuit(new QuitEventArgs()); - } - - public void AppBrowserWindowBlur(int id) - { - Electron.App.TriggerOnBrowserWindowBlur(); - } - - public void AppBrowserWindowFocus(int id) - { - Electron.App.TriggerOnBrowserWindowFocus(); - } - - public async Task AppBrowserWindowCreated(int id) - { - Electron.App.TriggerOnBrowserWindowCreated(); - } - - public void AppWebContentsCreated(int id) - { - Electron.App.TriggerOnWebContentsCreated(); - } - - public void AppAccessibilitySupportChanged(int id, bool state) - { - Electron.App.TriggerOnAccessibilitySupportChanged(state); - } - - public void AppOpenFile(int id, string file) - { - Electron.App.TriggerOnOpenFile(file); - } - - public void AppOpenUrl(int id, string url) - { - Electron.App.TriggerOnOpenUrl(url); - } - #endregion - - #region AutoUpdater - - public void AutoUpdaterOnError(int id, string error) - { - Electron.AutoUpdater.TriggerOnError(error); - } - - public void AutoUpdaterOnCheckingForUpdate(int id) - { - Electron.AutoUpdater.TriggerOnCheckingForUpdate(); - } - - public void AutoUpdaterOnUpdateAvailable(int id, JObject jobject) - { - Electron.AutoUpdater.TriggerOnUpdateAvailable(jobject); - } - - public void AutoUpdaterOnUpdateNotAvailable(int id, JObject jobject) - { - Electron.AutoUpdater.TriggerOnUpdateNotAvailable(jobject); - } - - public void AutoUpdaterOnDownloadProgress(int id, JObject jobject) - { - Electron.AutoUpdater.TriggerOnUpdateNotAvailable(jobject); - } - - public void AutoUpdaterOnUpdateDownloaded(int id, JObject jobject) - { - Electron.AutoUpdater.TriggerOnUpdateNotAvailable(jobject); - } - - #endregion - - #region BrowserWindow - - public void BrowserWindowReadyToShow(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnReadyToShow(); - } - - public void BrowserWindowPageTitleUpdated(int id, string title) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnPageTitleUpdated(title); - } - - public void BrowserWindowClose(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnClose(); - } - - public void BrowserWindowsClosed(JArray ids) - { - foreach (var id in ids) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == (int)id).FirstOrDefault(); - window.TriggerOnClosed(); - } - } - - public void BrowserWindowClosed(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnClosed(); - } - - public void BrowserWindowSessionEnd(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnSessionEnd(); - } - - public void BrowserWindowUnresponsive(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnUnresponsive(); - } - - public void BrowserWindowResponsive(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnResponsive(); - } - - public void BrowserWindowBlur(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnBlur(); - } - - public void BrowserWindowFocus(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnFocus(); - } - - public void BrowserWindowShow(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnShow(); - } - - public void BrowserWindowHide(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnHide(); - } - - public void BrowserWindowMaximize(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnMaximize(); - } - - public void BrowserWindowUnmaximize(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnUnmaximize(); - } - - public void BrowserWindowMinimize(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnMinimize(); - } - - public void BrowserWindowRestore(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnRestore(); - } - - public void BrowserWindowResize(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnResize(); - } - - public void BrowserWindowMove(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnMove(); - } - - public void BrowserWindowMoved(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnMoved(); - } - - public void BrowserWindowEnterFullScreen(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnEnterFullScreen(); - } - - public void BrowserWindowLeaveFullScreen(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnLeaveFullScreen(); - } - - public void BrowserWindowEnterHtmlFullScreen(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnEnterHtmlFullScreen(); - } - - public void BrowserWindowLeaveHtmlFullScreen(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnLeaveHtmlFullScreen(); - } - - public void BrowserWindowAppCommand(int id, string command) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnAppCommand(command); - } - - public void BrowserWindowScrollTouchBegin(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnScrollTouchBegin(); - } - - public void BrowserWindowScrollTouchEnd(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnScrollTouchEnd(); - } - - public void BrowserWindowScrollTouchEdge(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnScrollTouchEdge(); - } - - public void BrowserWindowSwipe(int id, string direction) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnSwipe(direction); - } - - public void BrowserWindowSheetBegin(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnSheetBegin(); - } - - public void BrowserWindowSheetEnd(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnSheetEnd(); - } - - public void BrowserWindowNewWindowForTab(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnNewWindowForTab(); - } - - public void BrowserWindowMenuItemClicked(int id, string menuid) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.TriggerOnMenuItemClicked(menuid); - } - - public void BrowserWindowThumbbarButtonClicked(int id, string thumbarButtonId) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - ThumbarButton thumbarButton = window.ThumbarButtons.Where(x => x.Id == thumbarButtonId).FirstOrDefault(); - thumbarButton?.Click(); - } - - #endregion - - #region Cookies - public void CookiesOnChanged(int id, JArray jarray) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.WebContents.Session.Cookies.TriggerOnChanged(jarray); - } - #endregion - - #region Dock - public void DockMenuItemClicked(string id) - { - MenuItem menuItem = Dock.Instance.MenuItems.Where(x => x.Id == id).FirstOrDefault(); - menuItem?.Click(); - } - #endregion - - #region GlobalShortcut - public void GlobalShortcutPressed(string id) - { - if (GlobalShortcut.Instance._shortcuts.ContainsKey(id.ToString())) - { - GlobalShortcut.Instance._shortcuts.Where(x => x.Key == id).FirstOrDefault().Value(); - } - } - #endregion - - #region HostHook - public void HostHookResult(string socketEventName, params dynamic[] arguments) - { - - } - - public void HostHookError(string socketEventName, params dynamic[] arguments) - { - - } - #endregion - - #region Menu - public void MenuMenuItemClicked(string id) - { - MenuItem menuItem = Menu.Instance.GetMenuItem(id.ToString()); - menuItem.Click?.Invoke(); - } - - public void MenuContextMenuItemClicked(string id, JArray results) - { - var itemId = ((JArray)results).First.ToString(); - var browserWindowId = (int)((JArray)results).Last; - - MenuItem menuItem = Menu.Instance.ContextMenuItems[browserWindowId].Where(x => x.Id == itemId).FirstOrDefault(); - menuItem.Click?.Invoke(); - } - #endregion - - #region NativeTheme - public void NativeThemeOnChanged(string id) - { - NativeTheme.Instance.TriggerOnUpdated(); - } - #endregion - - #region Notifications - public void NotificationEventOnShow(string id) - { - Notification.Instance.NotificationOptions.Single(x => x.ShowID == id.ToString()).OnShow(); - } - - public void NotificationEventOnClick(string id) - { - Notification.Instance.NotificationOptions.Single(x => x.ShowID == id.ToString()).OnClick(); - } - - public void NotificationEventOnClose(string id) - { - Notification.Instance.NotificationOptions.Single(x => x.ShowID == id.ToString()).OnClose(); - } - - public void NotificationEventOnReply(string id, JArray args) - { - var arguments = ((JArray)args).ToObject(); - Notification.Instance.NotificationOptions.Single(x => x.ReplyID == arguments[0].ToString()).OnReply(arguments[1].ToString()); - } - - public void NotificationEventOnAction(string id, JArray args) - { - var arguments = ((JArray)args).ToObject(); - Notification.Instance.NotificationOptions.Single(x => x.ReplyID == arguments[0].ToString()).OnAction(arguments[1].ToString()); - } - #endregion - - #region PowerMonitor - - public void PowerMonitorOnLockScreen() - { - Electron.PowerMonitor.TriggerOnLockScreen(); - } - - public void PowerMonitorOnUnLockScreen() - { - Electron.PowerMonitor.TriggerOnUnLockScreen(); - } - - - public void PowerMonitorOnSuspend() - { - Electron.PowerMonitor.TriggerOnSuspend(); - } - - public void PowerMonitorOnResume() - { - Electron.PowerMonitor.TriggerOnResume(); - } - - public void PowerMonitorOnAC() - { - Electron.PowerMonitor.TriggerOnAC(); - } - - public void PowerMonitorOnBattery() - { - Electron.PowerMonitor.TriggerOnBattery(); - } - - public void PowerMonitorOnShutdown() - { - Electron.PowerMonitor.TriggerOnShutdown(); - } - - #endregion - - #region IpcMain - - public void IpcOnChannel(string channel, JArray args) - { - foreach (var item in HubElectron.SignalrObservedJArray.Where(x => x.Channel == channel).ToList()) - { - HubElectron.SignalrObservedJArray.Remove(item); - } - - SignalrResponse signalrResponse = new SignalrResponse(); - signalrResponse.Channel = channel; - signalrResponse.Value = args; - HubElectron.SignalrObservedJArray.Add(signalrResponse); - } - - public void IpcMainChannelWithId(string channel, JObject args) - { - foreach (var item in HubElectron.SignalrObservedJObject.Where(x => x.Channel == channel).ToList()) - { - HubElectron.SignalrObservedJObject.Remove(item); - } - - SignalrResponseJObject signalrResponse = new SignalrResponseJObject(); - signalrResponse.Channel = channel; - signalrResponse.Value = args; - HubElectron.SignalrObservedJObject.Add(signalrResponse); - } - - #endregion - - #region Screen - - public void ScreenOnDisplayAdded(string id, JObject display) - { - Electron.Screen.TriggerOnDisplayAdded(display.ToObject()); - } - - public void ScreenOnDisplayRemoved(string id, JObject display) - { - Electron.Screen.TriggerOnDisplayRemoved(display.ToObject()); - } - - public void ScreenOnDisplayMetricsChanged(string id, JArray args) - { - var display = ((JArray)args).First.ToObject(); - var metrics = ((JArray)args).Last.ToObject(); - Electron.Screen.TriggerOnDisplayMetricsChanged(display, metrics); - } - - #endregion - - #region Tray - public void TrayOnClick(string id, JArray jarray) - { - var args = ((JArray)jarray).ToObject(); - var trayClickEventArgs = ((JObject)args[0]).ToObject(); - var bounds = ((JObject)args[1]).ToObject(); - Tray.Instance.TriggerOnClick(trayClickEventArgs, bounds); - } - - public void TrayOnRightClick(string id, JArray jarray) - { - var args = ((JArray)jarray).ToObject(); - var trayClickEventArgs = ((JObject)args[0]).ToObject(); - var bounds = ((JObject)args[1]).ToObject(); - Tray.Instance.TriggerOnRightClick(trayClickEventArgs, bounds); - } - - public void TrayOnDoubleClick(string id, JArray jarray) - { - var args = ((JArray)jarray).ToObject(); - var trayClickEventArgs = ((JObject)args[0]).ToObject(); - var bounds = ((JObject)args[1]).ToObject(); - Tray.Instance.TriggerOnRightClick(trayClickEventArgs, bounds); - } - - public void TrayOnBalloonShow(string id) - { - Tray.Instance.TriggerOnBalloonShow(); - } - - public void TrayOnBalloonClick(string id) - { - Tray.Instance.TriggerOnBalloonClick(); - } - - public void TrayOnBalloonClosed(string id) - { - Tray.Instance.TriggerOnBalloonClosed(); - } - - public void TrayOnMenuItemClicked(string id) - { - MenuItem menuItem = Tray.Instance.MenuItems.Where(x => x.Id == id).FirstOrDefault(); - menuItem?.Click(); - } - #endregion - - #region WebContents - public void WebContentOnCrashed(int id, bool crashed) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.WebContents.TriggerOnCrashed(crashed); - } - - public void WebContentOnDidFinishLoad(int id) - { - var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); - window.WebContents.TriggerOnDidFinishLoad(); - } - #endregion - - #region WindowManager - public void BootstrapUpdateOpenIDsEvent(int[] id) - { - WindowManager.Instance.TriggerOnBootstrapUpdateOpenIDsEvent(id); - } - #endregion - - - public override async Task OnConnectedAsync() - { - Electron.ElectronConnected = true; - await base.OnConnectedAsync(); - - ElectronClients.ClientsList newClient = new ElectronClients.ClientsList(); - newClient.ConnectionId = Context.ConnectionId; - newClient.ElectronClient = true; - ElectronClients.ElectronConnections.Clients.Add(newClient); - } - - } -} diff --git a/ElectronNET.API/Hubs/IpcMain.cs b/ElectronNET.API/Hubs/IpcMain.cs new file mode 100644 index 00000000..c360fd75 --- /dev/null +++ b/ElectronNET.API/Hubs/IpcMain.cs @@ -0,0 +1,40 @@ +using ElectronNET.API.Models; +using Microsoft.AspNetCore.SignalR; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void IpcOnChannel(string channel, JArray args) + { + foreach (var item in Electron.SignalrObservedJArray.Where(x => x.Channel == channel).ToList()) + { + Electron.SignalrObservedJArray.Remove(item); + } + + SignalrResponse signalrResponse = new SignalrResponse(); + signalrResponse.Channel = channel; + signalrResponse.Value = args; + Electron.SignalrObservedJArray.Add(signalrResponse); + } + + public void IpcMainChannelWithId(string channel, JObject args) + { + foreach (var item in Electron.SignalrObservedJObject.Where(x => x.Channel == channel).ToList()) + { + Electron.SignalrObservedJObject.Remove(item); + } + + SignalrResponseJObject signalrResponse = new SignalrResponseJObject(); + signalrResponse.Channel = channel; + signalrResponse.Value = args; + Electron.SignalrObservedJObject.Add(signalrResponse); + } + } +} diff --git a/ElectronNET.API/Hubs/Menu.cs b/ElectronNET.API/Hubs/Menu.cs new file mode 100644 index 00000000..b28f19df --- /dev/null +++ b/ElectronNET.API/Hubs/Menu.cs @@ -0,0 +1,29 @@ +using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void MenuMenuItemClicked(string id) + { + MenuItem menuItem = Menu.Instance.GetMenuItem(id.ToString()); + menuItem.Click?.Invoke(); + } + + public void MenuContextMenuItemClicked(string id, JArray results) + { + var itemId = ((JArray)results).First.ToString(); + var browserWindowId = (int)((JArray)results).Last; + + MenuItem menuItem = Menu.Instance.ContextMenuItems[browserWindowId].Where(x => x.Id == itemId).FirstOrDefault(); + menuItem.Click?.Invoke(); + } + } +} diff --git a/ElectronNET.API/Hubs/NativeTheme.cs b/ElectronNET.API/Hubs/NativeTheme.cs new file mode 100644 index 00000000..70f88f10 --- /dev/null +++ b/ElectronNET.API/Hubs/NativeTheme.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.SignalR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void NativeThemeOnChanged(string id) + { + NativeTheme.Instance.TriggerOnUpdated(); + } + } +} diff --git a/ElectronNET.API/Hubs/Notifications.cs b/ElectronNET.API/Hubs/Notifications.cs new file mode 100644 index 00000000..97ad1d03 --- /dev/null +++ b/ElectronNET.API/Hubs/Notifications.cs @@ -0,0 +1,40 @@ +using Microsoft.AspNetCore.SignalR; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void NotificationEventOnShow(string id) + { + Notification.Instance.NotificationOptions.Single(x => x.ShowID == id.ToString()).OnShow(); + } + + public void NotificationEventOnClick(string id) + { + Notification.Instance.NotificationOptions.Single(x => x.ShowID == id.ToString()).OnClick(); + } + + public void NotificationEventOnClose(string id) + { + Notification.Instance.NotificationOptions.Single(x => x.ShowID == id.ToString()).OnClose(); + } + + public void NotificationEventOnReply(string id, JArray args) + { + var arguments = ((JArray)args).ToObject(); + Notification.Instance.NotificationOptions.Single(x => x.ReplyID == arguments[0].ToString()).OnReply(arguments[1].ToString()); + } + + public void NotificationEventOnAction(string id, JArray args) + { + var arguments = ((JArray)args).ToObject(); + Notification.Instance.NotificationOptions.Single(x => x.ReplyID == arguments[0].ToString()).OnAction(arguments[1].ToString()); + } + } +} diff --git a/ElectronNET.API/Hubs/PowerMonitor.cs b/ElectronNET.API/Hubs/PowerMonitor.cs new file mode 100644 index 00000000..d213652f --- /dev/null +++ b/ElectronNET.API/Hubs/PowerMonitor.cs @@ -0,0 +1,47 @@ +using Microsoft.AspNetCore.SignalR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void PowerMonitorOnLockScreen() + { + Electron.PowerMonitor.TriggerOnLockScreen(); + } + + public void PowerMonitorOnUnLockScreen() + { + Electron.PowerMonitor.TriggerOnUnLockScreen(); + } + + public void PowerMonitorOnSuspend() + { + Electron.PowerMonitor.TriggerOnSuspend(); + } + + public void PowerMonitorOnResume() + { + Electron.PowerMonitor.TriggerOnResume(); + } + + public void PowerMonitorOnAC() + { + Electron.PowerMonitor.TriggerOnAC(); + } + + public void PowerMonitorOnBattery() + { + Electron.PowerMonitor.TriggerOnBattery(); + } + + public void PowerMonitorOnShutdown() + { + Electron.PowerMonitor.TriggerOnShutdown(); + } + } +} diff --git a/ElectronNET.API/Hubs/Screen.cs b/ElectronNET.API/Hubs/Screen.cs new file mode 100644 index 00000000..951b66a5 --- /dev/null +++ b/ElectronNET.API/Hubs/Screen.cs @@ -0,0 +1,31 @@ +using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void ScreenOnDisplayAdded(string id, JObject display) + { + Electron.Screen.TriggerOnDisplayAdded(display.ToObject()); + } + + public void ScreenOnDisplayRemoved(string id, JObject display) + { + Electron.Screen.TriggerOnDisplayRemoved(display.ToObject()); + } + + public void ScreenOnDisplayMetricsChanged(string id, JArray args) + { + var display = ((JArray)args).First.ToObject(); + var metrics = ((JArray)args).Last.ToObject(); + Electron.Screen.TriggerOnDisplayMetricsChanged(display, metrics); + } + } +} diff --git a/ElectronNET.API/Hubs/Tray.cs b/ElectronNET.API/Hubs/Tray.cs new file mode 100644 index 00000000..6b8526cb --- /dev/null +++ b/ElectronNET.API/Hubs/Tray.cs @@ -0,0 +1,55 @@ +using ElectronNET.API.Entities; +using Microsoft.AspNetCore.SignalR; +using Newtonsoft.Json.Linq; +using System.Linq; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void TrayOnClick(string id, JArray jarray) + { + var args = ((JArray)jarray).ToObject(); + var trayClickEventArgs = ((JObject)args[0]).ToObject(); + var bounds = ((JObject)args[1]).ToObject(); + Tray.Instance.TriggerOnClick(trayClickEventArgs, bounds); + } + + public void TrayOnRightClick(string id, JArray jarray) + { + var args = ((JArray)jarray).ToObject(); + var trayClickEventArgs = ((JObject)args[0]).ToObject(); + var bounds = ((JObject)args[1]).ToObject(); + Tray.Instance.TriggerOnRightClick(trayClickEventArgs, bounds); + } + + public void TrayOnDoubleClick(string id, JArray jarray) + { + var args = ((JArray)jarray).ToObject(); + var trayClickEventArgs = ((JObject)args[0]).ToObject(); + var bounds = ((JObject)args[1]).ToObject(); + Tray.Instance.TriggerOnRightClick(trayClickEventArgs, bounds); + } + + public void TrayOnBalloonShow(string id) + { + Tray.Instance.TriggerOnBalloonShow(); + } + + public void TrayOnBalloonClick(string id) + { + Tray.Instance.TriggerOnBalloonClick(); + } + + public void TrayOnBalloonClosed(string id) + { + Tray.Instance.TriggerOnBalloonClosed(); + } + + public void TrayOnMenuItemClicked(string id) + { + MenuItem menuItem = Tray.Instance.MenuItems.Where(x => x.Id == id).FirstOrDefault(); + menuItem?.Click(); + } + } +} diff --git a/ElectronNET.API/Hubs/WebContents.cs b/ElectronNET.API/Hubs/WebContents.cs new file mode 100644 index 00000000..ac770953 --- /dev/null +++ b/ElectronNET.API/Hubs/WebContents.cs @@ -0,0 +1,24 @@ +using Microsoft.AspNetCore.SignalR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void WebContentOnCrashed(int id, bool crashed) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.WebContents.TriggerOnCrashed(crashed); + } + + public void WebContentOnDidFinishLoad(int id) + { + var window = Electron.WindowManager.BrowserWindows.Where(o => o.Id == id).FirstOrDefault(); + window.WebContents.TriggerOnDidFinishLoad(); + } + } +} diff --git a/ElectronNET.API/Hubs/WindowManager.cs b/ElectronNET.API/Hubs/WindowManager.cs new file mode 100644 index 00000000..900aa9f7 --- /dev/null +++ b/ElectronNET.API/Hubs/WindowManager.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.SignalR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Hubs +{ + public partial class HubElectron : Hub + { + public void BootstrapUpdateOpenIDsEvent(int[] id) + { + WindowManager.Instance.TriggerOnBootstrapUpdateOpenIDsEvent(id); + } + } +} diff --git a/ElectronNET.API/IpcMain.cs b/ElectronNET.API/IpcMain.cs index 0e2c6082..0fa3b30e 100644 --- a/ElectronNET.API/IpcMain.cs +++ b/ElectronNET.API/IpcMain.cs @@ -1,4 +1,5 @@ using ElectronNET.API.Hubs; +using ElectronNET.API.Models; using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -53,13 +54,13 @@ public async void On(string channel, Action listener) { await Electron.SignalrElectron.Clients.All.SendAsync("registerIpcMainChannel", channel); - Observable.FromEventPattern(HubElectron.SignalrObservedJArray, "CollectionChanged") + Observable.FromEventPattern(Electron.SignalrObservedJArray, "CollectionChanged") .ObserveOn(RxApp.MainThreadScheduler) .SubscribeOn(RxApp.TaskpoolScheduler) .Subscribe(x => { if (x.EventArgs.NewItems != null) { - foreach (HubElectron.SignalrResponse entry in x.EventArgs.NewItems) + foreach (SignalrResponse entry in x.EventArgs.NewItems) { if (entry.Channel == channel && entry.Value != null) { @@ -90,13 +91,13 @@ public async void OnWithId(string channel, Action<(int browserId, int webContent { await Electron.SignalrElectron.Clients.All.SendAsync("registerIpcMainChannelWithId", channel); - Observable.FromEventPattern(HubElectron.SignalrObservedJObject, "CollectionChanged") + Observable.FromEventPattern(Electron.SignalrObservedJObject, "CollectionChanged") .ObserveOn(RxApp.MainThreadScheduler) .SubscribeOn(RxApp.TaskpoolScheduler) .Subscribe(x => { if (x.EventArgs.NewItems != null) { - foreach (HubElectron.SignalrResponseJObject entry in x.EventArgs.NewItems) + foreach (SignalrResponseJObject entry in x.EventArgs.NewItems) { //ArgsAndIds signalrResponse = ((JObject)args).ToObject(); if (entry.Channel == channel && entry.Value != null) @@ -159,13 +160,13 @@ public async void OnSync(string channel, Func listener) { await Electron.SignalrElectron.Clients.All.SendAsync("registerSyncIpcMainChannel", channel); - Observable.FromEventPattern(HubElectron.SignalrObservedJArray, "CollectionChanged") + Observable.FromEventPattern(Electron.SignalrObservedJArray, "CollectionChanged") .ObserveOn(RxApp.MainThreadScheduler) .SubscribeOn(RxApp.TaskpoolScheduler) .Subscribe(x => { if (x.EventArgs.NewItems != null) { - foreach (HubElectron.SignalrResponse entry in x.EventArgs.NewItems) + foreach (SignalrResponse entry in x.EventArgs.NewItems) { if (entry.Channel == channel && entry.Value != null) { diff --git a/ElectronNET.API/Models/SignalrResponse.cs b/ElectronNET.API/Models/SignalrResponse.cs new file mode 100644 index 00000000..b9c0bbb7 --- /dev/null +++ b/ElectronNET.API/Models/SignalrResponse.cs @@ -0,0 +1,24 @@ +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronNET.API.Models +{ + public class SignalrResponse + { + public string Channel { get; set; } = null; + public JArray Value { get; set; } = null; + } + + public class SignalrResponseJObject + { + public string Channel { get; set; } = null; + public JObject Value { get; set; } = null; + } + +} diff --git a/ElectronNET.API/WindowManager.cs b/ElectronNET.API/WindowManager.cs index 7620a477..cc40c003 100644 --- a/ElectronNET.API/WindowManager.cs +++ b/ElectronNET.API/WindowManager.cs @@ -119,7 +119,7 @@ public async Task CreateWindowAsync(BrowserWindowOptions options, var guid = Guid.NewGuid(); var taskCompletionSource = new TaskCompletionSource(); - HubElectron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); + Electron.ClientResponsesInt.TryAdd(guid, taskCompletionSource); int browserWindowId;