From d8062aae001949eed40af608e53658d5cb185233 Mon Sep 17 00:00:00 2001 From: Denny09310 Date: Mon, 10 Nov 2025 10:40:19 +0100 Subject: [PATCH 1/3] fix: scale factor can be a double --- src/ElectronNET.API/API/Entities/Display.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ElectronNET.API/API/Entities/Display.cs b/src/ElectronNET.API/API/Entities/Display.cs index d574099c..ba2d8a79 100644 --- a/src/ElectronNET.API/API/Entities/Display.cs +++ b/src/ElectronNET.API/API/Entities/Display.cs @@ -61,7 +61,7 @@ public class Display /// /// Output device's pixel scale factor. /// - public int ScaleFactor { get; set; } + public double ScaleFactor { get; set; } /// /// Can be available, unavailable, unknown. From adc1e81743ebd9d51425fab7aa1ff74890079b9e Mon Sep 17 00:00:00 2001 From: Denny09310 Date: Mon, 10 Nov 2025 10:40:51 +0100 Subject: [PATCH 2/3] fix: simplified add/remove of socket listener through usage of "Once" --- src/ElectronNET.API/API/ApiBase.cs | 4 +- src/ElectronNET.API/API/App.cs | 71 ++------- src/ElectronNET.API/API/AutoUpdater.cs | 132 +++++------------ src/ElectronNET.API/API/BrowserView.cs | 11 +- src/ElectronNET.API/API/BrowserWindow.cs | 11 +- src/ElectronNET.API/API/Clipboard.cs | 80 +++------- src/ElectronNET.API/API/CommandLine.cs | 30 ++-- src/ElectronNET.API/API/Dialog.cs | 51 +++---- src/ElectronNET.API/API/Dock.cs | 52 ++----- src/ElectronNET.API/API/GlobalShortcut.cs | 12 +- src/ElectronNET.API/API/HostHook.cs | 19 +-- src/ElectronNET.API/API/IpcMain.cs | 8 +- src/ElectronNET.API/API/NativeTheme.cs | 44 ++---- src/ElectronNET.API/API/Notification.cs | 13 +- src/ElectronNET.API/API/Process.cs | 132 ++++++----------- src/ElectronNET.API/API/Screen.cs | 66 +++------ src/ElectronNET.API/API/Session.cs | 154 ++++++-------------- src/ElectronNET.API/API/Shell.cs | 62 +++----- src/ElectronNET.API/API/Tray.cs | 12 +- src/ElectronNET.API/API/WebContents.cs | 70 +++------ src/ElectronNET.API/API/WebRequest.cs | 2 +- src/ElectronNET.API/API/WindowManager.cs | 22 ++- src/ElectronNET.API/Common/ProcessRunner.cs | 2 +- 23 files changed, 310 insertions(+), 750 deletions(-) diff --git a/src/ElectronNET.API/API/ApiBase.cs b/src/ElectronNET.API/API/ApiBase.cs index 83adcfb6..1019d7b7 100644 --- a/src/ElectronNET.API/API/ApiBase.cs +++ b/src/ElectronNET.API/API/ApiBase.cs @@ -152,10 +152,8 @@ public PropertyGetter(ApiBase apiBase, string callerName, int timeoutMs) var messageName = apiBase.propertyMessageNames.GetOrAdd(callerName, s => apiBase.objectName + s.StripAsync()); - BridgeConnector.Socket.On(eventName, (result) => + BridgeConnector.Socket.Once(eventName, (result) => { - BridgeConnector.Socket.Off(eventName); - lock (this) { try diff --git a/src/ElectronNET.API/API/App.cs b/src/ElectronNET.API/API/App.cs index 7a9a6652..7749c414 100644 --- a/src/ElectronNET.API/API/App.cs +++ b/src/ElectronNET.API/API/App.cs @@ -547,13 +547,7 @@ public async Task GetPathAsync(PathName pathName, CancellationToken canc var taskCompletionSource = new TaskCompletionSource(); using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) { - BridgeConnector.Socket.On("appGetPathCompleted", (path) => - { - BridgeConnector.Socket.Off("appGetPathCompleted"); - - taskCompletionSource.SetResult(path); - }); - + BridgeConnector.Socket.Once("appGetPathCompleted", taskCompletionSource.SetResult); BridgeConnector.Socket.Emit("appGetPath", pathName.GetDescription()); return await taskCompletionSource.Task @@ -716,12 +710,7 @@ public async Task SetAsDefaultProtocolClientAsync(string protocol, string var taskCompletionSource = new TaskCompletionSource(); using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) { - BridgeConnector.Socket.On("appSetAsDefaultProtocolClientCompleted", (success) => - { - BridgeConnector.Socket.Off("appSetAsDefaultProtocolClientCompleted"); - taskCompletionSource.SetResult(success); - }); - + BridgeConnector.Socket.Once("appSetAsDefaultProtocolClientCompleted", taskCompletionSource.SetResult); BridgeConnector.Socket.Emit("appSetAsDefaultProtocolClient", protocol, path, args); return await taskCompletionSource.Task @@ -770,12 +759,7 @@ public async Task RemoveAsDefaultProtocolClientAsync(string protocol, stri var taskCompletionSource = new TaskCompletionSource(); using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) { - BridgeConnector.Socket.On("appRemoveAsDefaultProtocolClientCompleted", (success) => - { - BridgeConnector.Socket.Off("appRemoveAsDefaultProtocolClientCompleted"); - taskCompletionSource.SetResult(success); - }); - + BridgeConnector.Socket.Once("appRemoveAsDefaultProtocolClientCompleted", taskCompletionSource.SetResult); BridgeConnector.Socket.Emit("appRemoveAsDefaultProtocolClient", protocol, path, args); return await taskCompletionSource.Task @@ -842,12 +826,7 @@ public async Task IsDefaultProtocolClientAsync(string protocol, string pat var taskCompletionSource = new TaskCompletionSource(); using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) { - BridgeConnector.Socket.On("appIsDefaultProtocolClientCompleted", (success) => - { - BridgeConnector.Socket.Off("appIsDefaultProtocolClientCompleted"); - taskCompletionSource.SetResult(success); - }); - + BridgeConnector.Socket.Once("appIsDefaultProtocolClientCompleted", taskCompletionSource.SetResult); BridgeConnector.Socket.Emit("appIsDefaultProtocolClient", protocol, path, args); return await taskCompletionSource.Task @@ -870,12 +849,7 @@ public async Task SetUserTasksAsync(UserTask[] userTasks, CancellationToke var taskCompletionSource = new TaskCompletionSource(); using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) { - BridgeConnector.Socket.On("appSetUserTasksCompleted", (success) => - { - BridgeConnector.Socket.Off("appSetUserTasksCompleted"); - taskCompletionSource.SetResult(success); - }); - + BridgeConnector.Socket.Once("appSetUserTasksCompleted", taskCompletionSource.SetResult); BridgeConnector.Socket.Emit("appSetUserTasks", userTasks); return await taskCompletionSource.Task @@ -943,11 +917,7 @@ public async Task RequestSingleInstanceLockAsync(Action var taskCompletionSource = new TaskCompletionSource(); using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) { - BridgeConnector.Socket.On("appRequestSingleInstanceLockCompleted", (success) => - { - BridgeConnector.Socket.Off("appRequestSingleInstanceLockCompleted"); - taskCompletionSource.SetResult(success); - }); + BridgeConnector.Socket.Once("appRequestSingleInstanceLockCompleted", taskCompletionSource.SetResult); BridgeConnector.Socket.Off("secondInstance"); BridgeConnector.Socket.On("secondInstance", (result) => @@ -1069,12 +1039,7 @@ public async Task ImportCertificateAsync(ImportCertificateOptions options, var taskCompletionSource = new TaskCompletionSource(); using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) { - BridgeConnector.Socket.On("appImportCertificateCompleted", (result) => - { - BridgeConnector.Socket.Off("appImportCertificateCompleted"); - taskCompletionSource.SetResult(result); - }); - + BridgeConnector.Socket.Once("appImportCertificateCompleted", taskCompletionSource.SetResult); BridgeConnector.Socket.Emit("appImportCertificate", options); return await taskCompletionSource.Task @@ -1125,12 +1090,7 @@ public async Task SetBadgeCountAsync(int count, CancellationToken cancella var taskCompletionSource = new TaskCompletionSource(); using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) { - BridgeConnector.Socket.On("appSetBadgeCountCompleted", (success) => - { - BridgeConnector.Socket.Off("appSetBadgeCountCompleted"); - taskCompletionSource.SetResult(success); - }); - + BridgeConnector.Socket.Once("appSetBadgeCountCompleted", taskCompletionSource.SetResult); BridgeConnector.Socket.Emit("appSetBadgeCount", count); return await taskCompletionSource.Task @@ -1185,11 +1145,7 @@ public async Task GetLoginItemSettingsAsync(LoginItemSettings var taskCompletionSource = new TaskCompletionSource(); using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) { - BridgeConnector.Socket.On("appGetLoginItemSettingsCompleted", (result) => - { - BridgeConnector.Socket.Off("appGetLoginItemSettingsCompleted"); - taskCompletionSource.SetResult(result); - }); + BridgeConnector.Socket.Once("appGetLoginItemSettingsCompleted", taskCompletionSource.SetResult); if (options == null) { @@ -1304,13 +1260,8 @@ public Task UserAgentFallbackAsync return Task.Run(() => { var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("appGetUserAgentFallbackCompleted", (result) => - { - BridgeConnector.Socket.Off("appGetUserAgentFallbackCompleted"); - taskCompletionSource.SetResult(result); - }); - + + BridgeConnector.Socket.Once("appGetUserAgentFallbackCompleted", taskCompletionSource.SetResult); BridgeConnector.Socket.Emit("appGetUserAgentFallback"); return taskCompletionSource.Task; diff --git a/src/ElectronNET.API/API/AutoUpdater.cs b/src/ElectronNET.API/API/AutoUpdater.cs index d525c9af..e7cad59f 100644 --- a/src/ElectronNET.API/API/AutoUpdater.cs +++ b/src/ElectronNET.API/API/AutoUpdater.cs @@ -24,17 +24,12 @@ 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(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("autoUpdater-autoDownload-get-reply", tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdater-autoDownload-get"); - return taskCompletionSource.Task; + return tcs.Task; }).Result; } set @@ -54,17 +49,12 @@ 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(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("autoUpdater-autoInstallOnAppQuit-get-reply", tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdater-autoInstallOnAppQuit-get"); - return taskCompletionSource.Task; + return tcs.Task; }).Result; } set @@ -85,17 +75,12 @@ 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(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("autoUpdater-allowPrerelease-get-reply", tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdater-allowPrerelease-get"); - return taskCompletionSource.Task; + return tcs.Task; }).Result; } set @@ -114,17 +99,12 @@ 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(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("autoUpdater-fullChangelog-get-reply", tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdater-fullChangelog-get"); - return taskCompletionSource.Task; + return tcs.Task; }).Result; } set @@ -144,17 +124,12 @@ 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(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("autoUpdater-allowDowngrade-get-reply", tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdater-allowDowngrade-get"); - return taskCompletionSource.Task; + return tcs.Task; }).Result; } set @@ -172,17 +147,12 @@ 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); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("autoUpdater-updateConfigPath-get-reply", tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdater-updateConfigPath-get"); - return taskCompletionSource.Task; + return tcs.Task; }).Result; } } @@ -196,16 +166,12 @@ public Task CurrentVersionAsync { return Task.Run(() => { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); - BridgeConnector.Socket.On("autoUpdater-currentVersion-get-reply", (result) => - { - BridgeConnector.Socket.Off("autoUpdater-currentVersion-get-reply"); - taskCompletionSource.SetResult(result); - }); + BridgeConnector.Socket.On("autoUpdater-currentVersion-get-reply", tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdater-currentVersion-get"); - return taskCompletionSource.Task; + return tcs.Task; }); } } @@ -233,16 +199,12 @@ public Task ChannelAsync { return Task.Run(() => { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); - BridgeConnector.Socket.On("autoUpdater-channel-get-reply", (result) => - { - BridgeConnector.Socket.Off("autoUpdater-channel-get-reply"); - taskCompletionSource.SetResult(result); - }); + BridgeConnector.Socket.On("autoUpdater-channel-get-reply", tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdater-channel-get"); - return taskCompletionSource.Task; + return tcs.Task; }); } } @@ -257,14 +219,12 @@ public Task> RequestHeadersAsync { return Task.Run(() => { - var taskCompletionSource = new TaskCompletionSource>(); - BridgeConnector.Socket.On>("autoUpdater-requestHeaders-get-reply", (result) => - { - BridgeConnector.Socket.Off("autoUpdater-requestHeaders-get-reply"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource>(); + + BridgeConnector.Socket.On>("autoUpdater-requestHeaders-get-reply", tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdater-requestHeaders-get"); - return taskCompletionSource.Task; + + return tcs.Task; }); } } @@ -382,11 +342,10 @@ public Task CheckForUpdatesAsync() var taskCompletionSource = new TaskCompletionSource(); string guid = Guid.NewGuid().ToString(); - BridgeConnector.Socket.On("autoUpdaterCheckForUpdatesComplete" + guid, (result) => + BridgeConnector.Socket.Once("autoUpdaterCheckForUpdatesComplete" + guid, (result) => { try { - BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesComplete" + guid); BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesError" + guid); taskCompletionSource.SetResult(result); } @@ -395,10 +354,9 @@ public Task CheckForUpdatesAsync() taskCompletionSource.SetException(ex); } }); - BridgeConnector.Socket.On("autoUpdaterCheckForUpdatesError" + guid, (result) => + BridgeConnector.Socket.Once("autoUpdaterCheckForUpdatesError" + guid, (result) => { BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesComplete" + guid); - BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesError" + guid); string message = "An error occurred in CheckForUpdatesAsync"; if (!string.IsNullOrEmpty(result)) message = result; taskCompletionSource.SetException(new Exception(message)); @@ -420,11 +378,10 @@ public Task CheckForUpdatesAndNotifyAsync() var taskCompletionSource = new TaskCompletionSource(); string guid = Guid.NewGuid().ToString(); - BridgeConnector.Socket.On("autoUpdaterCheckForUpdatesAndNotifyComplete" + guid, (result) => + BridgeConnector.Socket.Once("autoUpdaterCheckForUpdatesAndNotifyComplete" + guid, (result) => { try { - BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesAndNotifyComplete" + guid); BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesAndNotifyError" + guid); taskCompletionSource.SetResult(result); } @@ -433,10 +390,9 @@ public Task CheckForUpdatesAndNotifyAsync() taskCompletionSource.SetException(ex); } }); - BridgeConnector.Socket.On("autoUpdaterCheckForUpdatesAndNotifyError" + guid, (result) => + BridgeConnector.Socket.Once("autoUpdaterCheckForUpdatesAndNotifyError" + guid, (result) => { BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesAndNotifyComplete" + guid); - BridgeConnector.Socket.Off("autoUpdaterCheckForUpdatesAndNotifyError" + guid); string message = "An error occurred in autoUpdaterCheckForUpdatesAndNotify"; if (!string.IsNullOrEmpty(result)) message = result; taskCompletionSource.SetException(new Exception(message)); @@ -467,18 +423,13 @@ public void QuitAndInstall(bool isSilent = false, bool isForceRunAfter = false) /// Path to downloaded file. public Task DownloadUpdateAsync() { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); string guid = Guid.NewGuid().ToString(); - BridgeConnector.Socket.On("autoUpdaterDownloadUpdateComplete" + guid, (downloadedPath) => - { - BridgeConnector.Socket.Off("autoUpdaterDownloadUpdateComplete" + guid); - taskCompletionSource.SetResult(downloadedPath); - }); - + BridgeConnector.Socket.Once("autoUpdaterDownloadUpdateComplete" + guid, tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdaterDownloadUpdate", guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -487,18 +438,13 @@ public Task DownloadUpdateAsync() /// Feed URL. public Task GetFeedURLAsync() { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); string guid = Guid.NewGuid().ToString(); - BridgeConnector.Socket.On("autoUpdaterGetFeedURLComplete" + guid, (downloadedPath) => - { - BridgeConnector.Socket.Off("autoUpdaterGetFeedURLComplete" + guid); - taskCompletionSource.SetResult(downloadedPath); - }); - + BridgeConnector.Socket.On("autoUpdaterGetFeedURLComplete" + guid, tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdaterGetFeedURL", guid); - return taskCompletionSource.Task; + return tcs.Task; } diff --git a/src/ElectronNET.API/API/BrowserView.cs b/src/ElectronNET.API/API/BrowserView.cs index 2a4aa0cc..131221e8 100644 --- a/src/ElectronNET.API/API/BrowserView.cs +++ b/src/ElectronNET.API/API/BrowserView.cs @@ -30,20 +30,15 @@ public Rectangle Bounds { get { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); Task.Run(() => { - BridgeConnector.Socket.On("browserView-getBounds-reply", (result) => - { - BridgeConnector.Socket.Off("browserView-getBounds-reply"); - taskCompletionSource.SetResult(result); - }); - + BridgeConnector.Socket.Once("browserView-getBounds-reply", tcs.SetResult); BridgeConnector.Socket.Emit("browserView-getBounds", Id); }); - return taskCompletionSource.Task.GetAwaiter().GetResult(); + return tcs.Task.GetAwaiter().GetResult(); } set { diff --git a/src/ElectronNET.API/API/BrowserWindow.cs b/src/ElectronNET.API/API/BrowserWindow.cs index 454ab8c0..5bd6217b 100644 --- a/src/ElectronNET.API/API/BrowserWindow.cs +++ b/src/ElectronNET.API/API/BrowserWindow.cs @@ -1008,14 +1008,9 @@ public IReadOnlyCollection ThumbarButtons /// Whether the buttons were added successfully. public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); - BridgeConnector.Socket.On("browserWindowSetThumbarButtons-completed", (success) => - { - BridgeConnector.Socket.Off("browserWindowSetThumbarButtons-completed"); - - taskCompletionSource.SetResult(success); - }); + BridgeConnector.Socket.Once("browserWindowSetThumbarButtons-completed", tcs.SetResult); thumbarButtons.AddThumbarButtonsId(); BridgeConnector.Socket.Emit("browserWindowSetThumbarButtons", Id, thumbarButtons); @@ -1029,7 +1024,7 @@ public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) thumbarButton?.Click(); }); - return taskCompletionSource.Task; + return tcs.Task; } /// diff --git a/src/ElectronNET.API/API/Clipboard.cs b/src/ElectronNET.API/API/Clipboard.cs index b487adb6..15c66daa 100644 --- a/src/ElectronNET.API/API/Clipboard.cs +++ b/src/ElectronNET.API/API/Clipboard.cs @@ -43,18 +43,12 @@ internal static Clipboard Instance /// The content in the clipboard as plain text. public Task ReadTextAsync(string type = "") { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-readText-Completed", (text) => - { - BridgeConnector.Socket.Off("clipboard-readText-Completed"); - - taskCompletionSource.SetResult(text); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("clipboard-readText-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("clipboard-readText", type); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -74,18 +68,12 @@ public void WriteText(string text, string type = "") /// public Task ReadHTMLAsync(string type = "") { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-readHTML-Completed", (text) => - { - BridgeConnector.Socket.Off("clipboard-readHTML-Completed"); - - taskCompletionSource.SetResult(text); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("clipboard-readHTML-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("clipboard-readHTML", type); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -105,18 +93,12 @@ public void WriteHTML(string markup, string type = "") /// public Task ReadRTFAsync(string type = "") { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-readRTF-Completed", (text) => - { - BridgeConnector.Socket.Off("clipboard-readRTF-Completed"); - - taskCompletionSource.SetResult(text); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("clipboard-readRTF-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("clipboard-readRTF", type); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -137,17 +119,12 @@ public void WriteRTF(string text, string type = "") /// public Task ReadBookmarkAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-readBookmark-Completed", (result) => - { - BridgeConnector.Socket.Off("clipboard-readBookmark-Completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("clipboard-readBookmark-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("clipboard-readBookmark"); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -173,17 +150,12 @@ public void WriteBookmark(string title, string url, string type = "") /// public Task ReadFindTextAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-readFindText-Completed", (text) => - { - BridgeConnector.Socket.Off("clipboard-readFindText-Completed"); - taskCompletionSource.SetResult(text); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("clipboard-readFindText-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("clipboard-readFindText"); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -212,17 +184,12 @@ public void Clear(string type = "") /// public Task AvailableFormatsAsync(string type = "") { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-availableFormats-Completed", (formats) => - { - BridgeConnector.Socket.Off("clipboard-availableFormats-Completed"); - taskCompletionSource.SetResult(formats); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("clipboard-availableFormats-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("clipboard-availableFormats", type); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -242,17 +209,12 @@ public void Write(Data data, string type = "") /// public Task ReadImageAsync(string type = "") { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("clipboard-readImage-Completed", (result) => - { - BridgeConnector.Socket.Off("clipboard-readImage-Completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("clipboard-readImage-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("clipboard-readImage", type); - return taskCompletionSource.Task; + return tcs.Task; } /// diff --git a/src/ElectronNET.API/API/CommandLine.cs b/src/ElectronNET.API/API/CommandLine.cs index d3e1b7e1..94a7ef39 100644 --- a/src/ElectronNET.API/API/CommandLine.cs +++ b/src/ElectronNET.API/API/CommandLine.cs @@ -69,22 +69,17 @@ public void AppendArgument(string value) /// A command-line switch /// /// Whether the command-line switch is present. - public async Task HasSwitchAsync(string switchName, CancellationToken cancellationToken = default(CancellationToken)) + public async Task HasSwitchAsync(string switchName, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) + var tcs = new TaskCompletionSource(); + using (cancellationToken.Register(() => tcs.TrySetCanceled())) { - BridgeConnector.Socket.On("appCommandLineHasSwitchCompleted", (result) => - { - BridgeConnector.Socket.Off("appCommandLineHasSwitchCompleted"); - taskCompletionSource.SetResult(result); - }); - + BridgeConnector.Socket.Once("appCommandLineHasSwitchCompleted", tcs.SetResult); BridgeConnector.Socket.Emit("appCommandLineHasSwitch", switchName); - return await taskCompletionSource.Task.ConfigureAwait(false); + return await tcs.Task.ConfigureAwait(false); } } @@ -97,22 +92,17 @@ public void AppendArgument(string value) /// /// Note: When the switch is not present or has no value, it returns empty string. /// - public async Task GetSwitchValueAsync(string switchName, CancellationToken cancellationToken = default(CancellationToken)) + public async Task GetSwitchValueAsync(string switchName, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) + var tcs = new TaskCompletionSource(); + using (cancellationToken.Register(() => tcs.TrySetCanceled())) { - BridgeConnector.Socket.On("appCommandLineGetSwitchValueCompleted", (result) => - { - BridgeConnector.Socket.Off("appCommandLineGetSwitchValueCompleted"); - taskCompletionSource.SetResult(result); - }); - + BridgeConnector.Socket.Once("appCommandLineGetSwitchValueCompleted", tcs.SetResult); BridgeConnector.Socket.Emit("appCommandLineGetSwitchValue", switchName); - return await taskCompletionSource.Task.ConfigureAwait(false); + return await tcs.Task.ConfigureAwait(false); } } } diff --git a/src/ElectronNET.API/API/Dialog.cs b/src/ElectronNET.API/API/Dialog.cs index a824c097..2ce4d9be 100644 --- a/src/ElectronNET.API/API/Dialog.cs +++ b/src/ElectronNET.API/API/Dialog.cs @@ -47,21 +47,16 @@ internal static Dialog Instance /// An array of file paths chosen by the user public Task ShowOpenDialogAsync(BrowserWindow browserWindow, OpenDialogOptions options) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); var guid = Guid.NewGuid().ToString(); - BridgeConnector.Socket.On("showOpenDialogComplete" + guid, (filePaths) => - { - BridgeConnector.Socket.Off("showOpenDialogComplete" + guid); - taskCompletionSource.SetResult(filePaths); - }); - - - BridgeConnector.Socket.Emit("showOpenDialog", - browserWindow, - options, guid); + BridgeConnector.Socket.Once("showOpenDialogComplete" + guid, tcs.SetResult); + BridgeConnector.Socket.Emit("showOpenDialog", + browserWindow, + options, + guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -72,21 +67,16 @@ public Task ShowOpenDialogAsync(BrowserWindow browserWindow, OpenDialo /// 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) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); var guid = Guid.NewGuid().ToString(); - BridgeConnector.Socket.On("showSaveDialogComplete" + guid, (filename) => - { - BridgeConnector.Socket.Off("showSaveDialogComplete" + guid); - taskCompletionSource.SetResult(filename); - }); - + BridgeConnector.Socket.Once("showSaveDialogComplete" + guid, tcs.SetResult); BridgeConnector.Socket.Emit("showSaveDialog", browserWindow, options, guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -140,13 +130,11 @@ public async Task ShowMessageBoxAsync(BrowserWindow browserWin /// The API call will be asynchronous and the result will be passed via MessageBoxResult. public Task ShowMessageBoxAsync(BrowserWindow browserWindow, MessageBoxOptions messageBoxOptions) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); var guid = Guid.NewGuid().ToString(); - BridgeConnector.Socket.On("showMessageBoxComplete" + guid, (args) => + BridgeConnector.Socket.Once("showMessageBoxComplete" + guid, (args) => { - BridgeConnector.Socket.Off("showMessageBoxComplete" + guid); - // args is [response:int, checkboxChecked:boolean] var arr = args.EnumerateArray(); var e = arr.GetEnumerator(); @@ -155,7 +143,7 @@ public Task ShowMessageBoxAsync(BrowserWindow browserWindow, M e.MoveNext(); var checkbox = e.Current.GetBoolean(); - taskCompletionSource.SetResult(new MessageBoxResult + tcs.SetResult(new MessageBoxResult { Response = response, CheckboxChecked = checkbox @@ -174,7 +162,7 @@ public Task ShowMessageBoxAsync(BrowserWindow browserWindow, M guid); } - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -214,21 +202,16 @@ public Task ShowCertificateTrustDialogAsync(CertificateTrustDialogOptions option /// public Task ShowCertificateTrustDialogAsync(BrowserWindow browserWindow, CertificateTrustDialogOptions options) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); string guid = Guid.NewGuid().ToString(); - BridgeConnector.Socket.On("showCertificateTrustDialogComplete" + guid, () => - { - BridgeConnector.Socket.Off("showCertificateTrustDialogComplete" + guid); - taskCompletionSource.SetResult(null); - }); - + BridgeConnector.Socket.Once("showCertificateTrustDialogComplete" + guid, () => tcs.SetResult(null)); BridgeConnector.Socket.Emit("showCertificateTrustDialog", browserWindow, options, guid); - return taskCompletionSource.Task; + return tcs.Task; } diff --git a/src/ElectronNET.API/API/Dock.cs b/src/ElectronNET.API/API/Dock.cs index 1e6fc6f8..0a84b27d 100644 --- a/src/ElectronNET.API/API/Dock.cs +++ b/src/ElectronNET.API/API/Dock.cs @@ -53,18 +53,13 @@ public async Task BounceAsync(DockBounceType type, CancellationToken cancel { cancellationToken.ThrowIfCancellationRequested(); - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) + var tcs = new TaskCompletionSource(); + using (cancellationToken.Register(() => tcs.TrySetCanceled())) { - BridgeConnector.Socket.On("dock-bounce-completed", (id) => - { - BridgeConnector.Socket.Off("dock-bounce-completed"); - taskCompletionSource.SetResult(id); - }); - + BridgeConnector.Socket.Once("dock-bounce-completed", tcs.SetResult); BridgeConnector.Socket.Emit("dock-bounce", type.GetDescription()); - return await taskCompletionSource.Task + return await tcs.Task .ConfigureAwait(false); } } @@ -105,18 +100,13 @@ public async Task GetBadgeAsync(CancellationToken cancellationToken = de { cancellationToken.ThrowIfCancellationRequested(); - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) + var tcs = new TaskCompletionSource(); + using (cancellationToken.Register(() => tcs.TrySetCanceled())) { - BridgeConnector.Socket.On("dock-getBadge-completed", (text) => - { - BridgeConnector.Socket.Off("dock-getBadge-completed"); - taskCompletionSource.SetResult(text); - }); - + BridgeConnector.Socket.Once("dock-getBadge-completed", tcs.SetResult); BridgeConnector.Socket.Emit("dock-getBadge"); - return await taskCompletionSource.Task + return await tcs.Task .ConfigureAwait(false); } } @@ -147,18 +137,13 @@ public async Task IsVisibleAsync(CancellationToken cancellationToken = def { cancellationToken.ThrowIfCancellationRequested(); - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) + var tcs = new TaskCompletionSource(); + using (cancellationToken.Register(() => tcs.TrySetCanceled())) { - BridgeConnector.Socket.On("dock-isVisible-completed", (isVisible) => - { - BridgeConnector.Socket.Off("dock-isVisible-completed"); - taskCompletionSource.SetResult(isVisible); - }); - + BridgeConnector.Socket.Once("dock-isVisible-completed", tcs.SetResult); BridgeConnector.Socket.Emit("dock-isVisible"); - return await taskCompletionSource.Task + return await tcs.Task .ConfigureAwait(false); } } @@ -204,18 +189,13 @@ public async Task GetMenu(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) + var tcs = new TaskCompletionSource(); + using (cancellationToken.Register(() => tcs.TrySetCanceled())) { - BridgeConnector.Socket.On("dock-getMenu-completed", (menu) => - { - BridgeConnector.Socket.Off("dock-getMenu-completed"); - taskCompletionSource.SetResult(menu); - }); - + BridgeConnector.Socket.Once("dock-getMenu-completed", tcs.SetResult); BridgeConnector.Socket.Emit("dock-getMenu"); - return await taskCompletionSource.Task + return await tcs.Task .ConfigureAwait(false); } } diff --git a/src/ElectronNET.API/API/GlobalShortcut.cs b/src/ElectronNET.API/API/GlobalShortcut.cs index 47c6b2b4..9786fe6c 100644 --- a/src/ElectronNET.API/API/GlobalShortcut.cs +++ b/src/ElectronNET.API/API/GlobalShortcut.cs @@ -73,18 +73,12 @@ public void Register(string accelerator, Action function) /// Whether this application has registered accelerator. public Task IsRegisteredAsync(string accelerator) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("globalShortcut-isRegisteredCompleted", (isRegistered) => - { - BridgeConnector.Socket.Off("globalShortcut-isRegisteredCompleted"); - - taskCompletionSource.SetResult(isRegistered); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("globalShortcut-isRegisteredCompleted", tcs.SetResult); BridgeConnector.Socket.Emit("globalShortcut-isRegistered", accelerator); - return taskCompletionSource.Task; + return tcs.Task; } /// diff --git a/src/ElectronNET.API/API/HostHook.cs b/src/ElectronNET.API/API/HostHook.cs index 28916360..634f7603 100644 --- a/src/ElectronNET.API/API/HostHook.cs +++ b/src/ElectronNET.API/API/HostHook.cs @@ -48,9 +48,8 @@ internal static HostHook Instance /// Optional parameters. public void Call(string socketEventName, params dynamic[] arguments) { - BridgeConnector.Socket.On(socketEventName + "Error" + oneCallguid, (result) => + BridgeConnector.Socket.Once(socketEventName + "Error" + oneCallguid, (result) => { - BridgeConnector.Socket.Off(socketEventName + "Error" + oneCallguid); Electron.Dialog.ShowErrorBox("Host Hook Exception", result); }); @@ -66,20 +65,18 @@ public void Call(string socketEventName, params dynamic[] arguments) /// public Task CallAsync(string socketEventName, params dynamic[] arguments) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); string guid = Guid.NewGuid().ToString(); - BridgeConnector.Socket.On(socketEventName + "Error" + guid, (result) => + BridgeConnector.Socket.Once(socketEventName + "Error" + guid, (result) => { - BridgeConnector.Socket.Off(socketEventName + "Error" + guid); Electron.Dialog.ShowErrorBox("Host Hook Exception", result); - taskCompletionSource.SetException(new Exception($"Host Hook Exception {result}")); + tcs.SetException(new Exception($"Host Hook Exception {result}")); }); - BridgeConnector.Socket.On(socketEventName + "Complete" + guid, (result) => + BridgeConnector.Socket.Once(socketEventName + "Complete" + guid, (result) => { BridgeConnector.Socket.Off(socketEventName + "Error" + guid); - BridgeConnector.Socket.Off(socketEventName + "Complete" + guid); T data = default; try @@ -88,15 +85,15 @@ public Task CallAsync(string socketEventName, params dynamic[] arguments) } catch (Exception exception) { - taskCompletionSource.SetException(exception); + tcs.SetException(exception); } - taskCompletionSource.SetResult(data); + tcs.SetResult(data); }); BridgeConnector.Socket.Emit(socketEventName, arguments, guid); - return taskCompletionSource.Task; + return tcs.Task; } diff --git a/src/ElectronNET.API/API/IpcMain.cs b/src/ElectronNET.API/API/IpcMain.cs index ff3aa6fb..21c25922 100644 --- a/src/ElectronNET.API/API/IpcMain.cs +++ b/src/ElectronNET.API/API/IpcMain.cs @@ -48,7 +48,7 @@ public async Task On(string channel, Action listener) { await BridgeConnector.Socket.Emit("registerIpcMainChannel", channel).ConfigureAwait(false); BridgeConnector.Socket.Off(channel); - BridgeConnector.Socket.On(channel, (args) => + BridgeConnector.Socket.On(channel, (args) => { List objectArray = FormatArguments(args); @@ -63,7 +63,7 @@ public async Task On(string channel, Action listener) }); } - private static List FormatArguments(System.Text.Json.JsonElement args) + private static List FormatArguments(JsonElement args) { var objectArray = args.Deserialize(ElectronJson.Options).ToList(); objectArray.RemoveAll(item => item is null); @@ -82,7 +82,7 @@ private static List FormatArguments(System.Text.Json.JsonElement args) public void OnSync(string channel, Func listener) { BridgeConnector.Socket.Emit("registerSyncIpcMainChannel", channel); - BridgeConnector.Socket.On(channel, (args) => + BridgeConnector.Socket.On(channel, (args) => { List objectArray = FormatArguments(args); object parameter; @@ -109,7 +109,7 @@ public void OnSync(string channel, Func listener) public void Once(string channel, Action listener) { BridgeConnector.Socket.Emit("registerOnceIpcMainChannel", channel); - BridgeConnector.Socket.Once(channel, (args) => + BridgeConnector.Socket.Once(channel, (args) => { List objectArray = FormatArguments(args); diff --git a/src/ElectronNET.API/API/NativeTheme.cs b/src/ElectronNET.API/API/NativeTheme.cs index 0e85ba05..daec8135 100644 --- a/src/ElectronNET.API/API/NativeTheme.cs +++ b/src/ElectronNET.API/API/NativeTheme.cs @@ -107,17 +107,12 @@ public void SetThemeSource(ThemeSourceMode themeSourceMode) /// public Task GetThemeSourceAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("nativeTheme-themeSource-getCompleted", (themeSource) => - { - BridgeConnector.Socket.Off("nativeTheme-themeSource-getCompleted"); - taskCompletionSource.SetResult(themeSource); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("nativeTheme-themeSource-getCompleted", tcs.SetResult); BridgeConnector.Socket.Emit("nativeTheme-themeSource-get"); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -127,17 +122,12 @@ public Task GetThemeSourceAsync() /// public Task ShouldUseDarkColorsAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("nativeTheme-shouldUseDarkColors-completed", (shouldUseDarkColors) => - { - BridgeConnector.Socket.Off("nativeTheme-shouldUseDarkColors-completed"); - taskCompletionSource.SetResult(shouldUseDarkColors); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("nativeTheme-shouldUseDarkColors-completed", tcs.SetResult); BridgeConnector.Socket.Emit("nativeTheme-shouldUseDarkColors"); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -146,17 +136,12 @@ public Task ShouldUseDarkColorsAsync() /// public Task ShouldUseHighContrastColorsAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("nativeTheme-shouldUseHighContrastColors-completed", (shouldUseHighContrastColors) => - { - BridgeConnector.Socket.Off("nativeTheme-shouldUseHighContrastColors-completed"); - taskCompletionSource.SetResult(shouldUseHighContrastColors); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("nativeTheme-shouldUseHighContrastColors-completed", tcs.SetResult); BridgeConnector.Socket.Emit("nativeTheme-shouldUseHighContrastColors"); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -165,17 +150,12 @@ public Task ShouldUseHighContrastColorsAsync() /// public Task ShouldUseInvertedColorSchemeAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("nativeTheme-shouldUseInvertedColorScheme-completed", (shouldUseInvertedColorScheme) => - { - BridgeConnector.Socket.Off("nativeTheme-shouldUseInvertedColorScheme-completed"); - taskCompletionSource.SetResult(shouldUseInvertedColorScheme); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("nativeTheme-shouldUseInvertedColorScheme-completed", tcs.SetResult); BridgeConnector.Socket.Emit("nativeTheme-shouldUseInvertedColorScheme"); - return taskCompletionSource.Task; + return tcs.Task; } /// diff --git a/src/ElectronNET.API/API/Notification.cs b/src/ElectronNET.API/API/Notification.cs index ab000d76..d1ae2b83 100644 --- a/src/ElectronNET.API/API/Notification.cs +++ b/src/ElectronNET.API/API/Notification.cs @@ -62,7 +62,7 @@ private static void GenerateIDsForDefinedActions(NotificationOptions notificatio isActionDefined = true; BridgeConnector.Socket.Off("NotificationEventShow"); - BridgeConnector.Socket.On("NotificationEventShow", (id) => { _notificationOptions.Single(x => x.ShowID == id).OnShow(); }); + BridgeConnector.Socket.Once("NotificationEventShow", (id) => { _notificationOptions.Single(x => x.ShowID == id).OnShow(); }); } if (notificationOptions.OnClick != null) @@ -119,17 +119,12 @@ private static void GenerateIDsForDefinedActions(NotificationOptions notificatio /// public Task IsSupportedAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("notificationIsSupportedComplete", (isSupported) => - { - BridgeConnector.Socket.Off("notificationIsSupportedComplete"); - taskCompletionSource.SetResult(isSupported); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("notificationIsSupportedComplete", tcs.SetResult); BridgeConnector.Socket.Emit("notificationIsSupported"); - return taskCompletionSource.Task; + return tcs.Task; } diff --git a/src/ElectronNET.API/API/Process.cs b/src/ElectronNET.API/API/Process.cs index ac32da94..be2e46a8 100644 --- a/src/ElectronNET.API/API/Process.cs +++ b/src/ElectronNET.API/API/Process.cs @@ -46,16 +46,12 @@ public Task ExecPathAsync { get { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("process-execPath-Completed", (result) => - { - BridgeConnector.Socket.Off("process-execPath-Completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("process-execPath-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("process-execPath"); - return taskCompletionSource.Task; + + return tcs.Task; } } @@ -70,16 +66,12 @@ public Task ArgvAsync { get { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("process-argv-Completed", (result) => - { - BridgeConnector.Socket.Off("process-argv-Completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("process-argv-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("process-argv"); - return taskCompletionSource.Task; + + return tcs.Task; } } @@ -91,16 +83,12 @@ public Task TypeAsync { get { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("process-type-Completed", (result) => - { - BridgeConnector.Socket.Off("process-type-Completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("process-type-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("process-type"); - return taskCompletionSource.Task; + + return tcs.Task; } } @@ -113,16 +101,12 @@ public Task VersionsAsync { get { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("process-versions-Completed", (result) => - { - BridgeConnector.Socket.Off("process-versions-Completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("process-versions-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("process-versions"); - return taskCompletionSource.Task; + + return tcs.Task; } } @@ -135,16 +119,12 @@ public Task DefaultAppAsync { get { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("process-defaultApp-Completed", (result) => - { - BridgeConnector.Socket.Off("process-defaultApp-Completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("process-defaultApp-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("process-defaultApp"); - return taskCompletionSource.Task; + + return tcs.Task; } } @@ -156,16 +136,12 @@ public Task IsMainFrameAsync { get { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("process-isMainFrame-Completed", (result) => - { - BridgeConnector.Socket.Off("process-isMainFrame-Completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("process-isMainFrame-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("process-isMainFrame"); - return taskCompletionSource.Task; + + return tcs.Task; } } @@ -176,16 +152,12 @@ public Task ResourcesPathAsync { get { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("process-resourcesPath-Completed", (result) => - { - BridgeConnector.Socket.Off("process-resourcesPath-Completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("process-resourcesPath-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("process-resourcesPath"); - return taskCompletionSource.Task; + + return tcs.Task; } } @@ -197,16 +169,12 @@ public Task UpTimeAsync { get { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("process-uptime-Completed", (result) => - { - BridgeConnector.Socket.Off("process-uptime-Completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("process-uptime-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("process-uptime"); - return taskCompletionSource.Task; + + return tcs.Task; } } @@ -217,16 +185,12 @@ public Task PidAsync { get { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("process-pid-Completed", (result) => - { - BridgeConnector.Socket.Off("process-pid-Completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("process-pid-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("process-pid"); - return taskCompletionSource.Task; + + return tcs.Task; } } @@ -238,16 +202,12 @@ public Task ArchAsync { get { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("process-arch-Completed", (result) => - { - BridgeConnector.Socket.Off("process-arch-Completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("process-arch-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("process-arch"); - return taskCompletionSource.Task; + + return tcs.Task; } } @@ -258,16 +218,12 @@ public Task PlatformAsync { get { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("process-platform-Completed", (result) => - { - BridgeConnector.Socket.Off("process-platform-Completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("process-platform-Completed", tcs.SetResult); BridgeConnector.Socket.Emit("process-platform"); - return taskCompletionSource.Task; + + return tcs.Task; } } } diff --git a/src/ElectronNET.API/API/Screen.cs b/src/ElectronNET.API/API/Screen.cs index 77f26a60..03fd5762 100644 --- a/src/ElectronNET.API/API/Screen.cs +++ b/src/ElectronNET.API/API/Screen.cs @@ -79,17 +79,12 @@ internal static Screen Instance /// public Task GetCursorScreenPointAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("screen-getCursorScreenPointCompleted", (point) => - { - BridgeConnector.Socket.Off("screen-getCursorScreenPointCompleted"); - taskCompletionSource.SetResult(point); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("screen-getCursorScreenPointCompleted", tcs.SetResult); BridgeConnector.Socket.Emit("screen-getCursorScreenPoint"); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -98,17 +93,12 @@ public Task GetCursorScreenPointAsync() /// The height of the menu bar in pixels. public Task GetMenuBarHeightAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("screen-getMenuBarHeightCompleted", (height) => - { - BridgeConnector.Socket.Off("screen-getMenuBarHeightCompleted"); - taskCompletionSource.SetResult(height); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("screen-getMenuBarHeightCompleted", tcs.SetResult); BridgeConnector.Socket.Emit("screen-getMenuBarHeight"); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -117,17 +107,12 @@ public Task GetMenuBarHeightAsync() /// public Task GetPrimaryDisplayAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("screen-getPrimaryDisplayCompleted", (display) => - { - BridgeConnector.Socket.Off("screen-getPrimaryDisplayCompleted"); - taskCompletionSource.SetResult(display); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("screen-getPrimaryDisplayCompleted", tcs.SetResult); BridgeConnector.Socket.Emit("screen-getPrimaryDisplay"); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -136,17 +121,12 @@ public Task GetPrimaryDisplayAsync() /// An array of displays that are currently available. public Task GetAllDisplaysAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("screen-getAllDisplaysCompleted", (displays) => - { - BridgeConnector.Socket.Off("screen-getAllDisplaysCompleted"); - taskCompletionSource.SetResult(displays); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("screen-getAllDisplaysCompleted", tcs.SetResult); BridgeConnector.Socket.Emit("screen-getAllDisplays"); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -155,17 +135,12 @@ public Task GetAllDisplaysAsync() /// The display nearest the specified point. public Task GetDisplayNearestPointAsync(Point point) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("screen-getDisplayNearestPointCompleted", (display) => - { - BridgeConnector.Socket.Off("screen-getDisplayNearestPointCompleted"); - taskCompletionSource.SetResult(display); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("screen-getDisplayNearestPointCompleted", tcs.SetResult); BridgeConnector.Socket.Emit("screen-getDisplayNearestPoint", point); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -175,17 +150,12 @@ public Task GetDisplayNearestPointAsync(Point point) /// The display that most closely intersects the provided bounds. public Task GetDisplayMatchingAsync(Rectangle rectangle) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("screen-getDisplayMatching", (display) => - { - BridgeConnector.Socket.Off("screen-getDisplayMatching"); - taskCompletionSource.SetResult(display); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("screen-getDisplayMatching", tcs.SetResult); BridgeConnector.Socket.Emit("screen-getDisplayMatching", rectangle); - return taskCompletionSource.Task; + return tcs.Task; } diff --git a/src/ElectronNET.API/API/Session.cs b/src/ElectronNET.API/API/Session.cs index f1fb3bee..8f66fadd 100644 --- a/src/ElectronNET.API/API/Session.cs +++ b/src/ElectronNET.API/API/Session.cs @@ -49,18 +49,13 @@ public void AllowNTLMCredentialsForDomains(string domains) /// public Task ClearAuthCacheAsync(RemovePassword options) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = 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.Once("webContents-session-clearAuthCache-completed" + guid, () => tcs.SetResult(null)); BridgeConnector.Socket.Emit("webContents-session-clearAuthCache", Id, options, guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -68,18 +63,13 @@ public Task ClearAuthCacheAsync(RemovePassword options) /// public Task ClearAuthCacheAsync() { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = 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.Once("webContents-session-clearAuthCache-completed" + guid, () => tcs.SetResult(null)); BridgeConnector.Socket.Emit("webContents-session-clearAuthCache", Id, guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -88,18 +78,13 @@ public Task ClearAuthCacheAsync() /// public Task ClearCacheAsync() { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = 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.Once("webContents-session-clearCache-completed" + guid, () => tcs.SetResult(null)); BridgeConnector.Socket.Emit("webContents-session-clearCache", Id, guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -108,18 +93,13 @@ public Task ClearCacheAsync() /// public Task ClearHostResolverCacheAsync() { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = 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.Once("webContents-session-clearHostResolverCache-completed" + guid, () => tcs.SetResult(null)); BridgeConnector.Socket.Emit("webContents-session-clearHostResolverCache", Id, guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -128,18 +108,13 @@ public Task ClearHostResolverCacheAsync() /// public Task ClearStorageDataAsync() { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = 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.Once("webContents-session-clearStorageData-completed" + guid, () => tcs.SetResult(null)); BridgeConnector.Socket.Emit("webContents-session-clearStorageData", Id, guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -149,18 +124,13 @@ public Task ClearStorageDataAsync() /// public Task ClearStorageDataAsync(ClearStorageDataOptions options) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = 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.Once("webContents-session-clearStorageData-options-completed" + guid, () => tcs.SetResult(null)); BridgeConnector.Socket.Emit("webContents-session-clearStorageData-options", Id, options, guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -209,18 +179,13 @@ public void FlushStorageData() /// public Task GetBlobDataAsync(string identifier) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); string guid = Guid.NewGuid().ToString(); - BridgeConnector.Socket.On("webContents-session-getBlobData-completed" + guid, (result) => - { - BridgeConnector.Socket.Off("webContents-session-getBlobData-completed" + guid); - taskCompletionSource.SetResult(result); - }); - + BridgeConnector.Socket.Once("webContents-session-getBlobData-completed" + guid, tcs.SetResult); BridgeConnector.Socket.Emit("webContents-session-getBlobData", Id, identifier, guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -229,18 +194,13 @@ public Task GetBlobDataAsync(string identifier) /// Callback is invoked with the session's current cache size. public Task GetCacheSizeAsync() { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = 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(size); - }); - + BridgeConnector.Socket.Once("webContents-session-getCacheSize-completed" + guid, tcs.SetResult); BridgeConnector.Socket.Emit("webContents-session-getCacheSize", Id, guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -249,18 +209,13 @@ public Task GetCacheSizeAsync() /// public Task GetPreloadsAsync() { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); string guid = Guid.NewGuid().ToString(); - BridgeConnector.Socket.On("webContents-session-getPreloads-completed" + guid, (result) => - { - BridgeConnector.Socket.Off("webContents-session-getPreloads-completed" + guid); - taskCompletionSource.SetResult(result); - }); - + BridgeConnector.Socket.Once("webContents-session-getPreloads-completed" + guid, tcs.SetResult); BridgeConnector.Socket.Emit("webContents-session-getPreloads", Id, guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -269,18 +224,13 @@ public Task GetPreloadsAsync() /// public Task GetUserAgent() { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = 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); - }); - + BridgeConnector.Socket.Once("webContents-session-getUserAgent-completed" + guid, tcs.SetResult); BridgeConnector.Socket.Emit("webContents-session-getUserAgent", Id, guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -291,18 +241,13 @@ public Task GetUserAgent() /// public Task ResolveProxyAsync(string url) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = 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); - }); - + BridgeConnector.Socket.Once("webContents-session-resolveProxy-completed" + guid, tcs.SetResult); BridgeConnector.Socket.Emit("webContents-session-resolveProxy", Id, url, guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -333,18 +278,13 @@ public void SetPreloads(string[] preloads) /// public Task SetProxyAsync(ProxyConfig config) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = 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.Once("webContents-session-setProxy-completed" + guid, () => tcs.SetResult(null)); BridgeConnector.Socket.Emit("webContents-session-setProxy", Id, config, guid); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -381,17 +321,12 @@ public void SetUserAgent(string userAgent, string acceptLanguages) /// public Task GetAllExtensionsAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("webContents-session-getAllExtensions-completed", (extensionslist) => - { - BridgeConnector.Socket.Off("webContents-session-getAllExtensions-completed"); - taskCompletionSource.SetResult(extensionslist); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("webContents-session-getAllExtensions-completed", tcs.SetResult); BridgeConnector.Socket.Emit("webContents-session-getAllExtensions", Id); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -433,17 +368,12 @@ public void RemoveExtension(string name) /// public 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(extension); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("webContents-session-loadExtension-completed", tcs.SetResult); BridgeConnector.Socket.Emit("webContents-session-loadExtension", Id, path, allowFileAccess); - return taskCompletionSource.Task; + return tcs.Task; } diff --git a/src/ElectronNET.API/API/Shell.cs b/src/ElectronNET.API/API/Shell.cs index e99625d5..14bfcbcb 100644 --- a/src/ElectronNET.API/API/Shell.cs +++ b/src/ElectronNET.API/API/Shell.cs @@ -43,13 +43,13 @@ internal static Shell Instance /// The full path to the directory / file. public Task ShowItemInFolderAsync(string fullPath) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("shell-showItemInFolderCompleted", () => { BridgeConnector.Socket.Off("shell-showItemInFolderCompleted"); }); + var tcs = new TaskCompletionSource(); + // Is this really useful? + BridgeConnector.Socket.Once("shell-showItemInFolderCompleted", () => { }); BridgeConnector.Socket.Emit("shell-showItemInFolder", fullPath); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -59,17 +59,12 @@ public Task ShowItemInFolderAsync(string fullPath) /// The error message corresponding to the failure if a failure occurred, otherwise . public Task OpenPathAsync(string path) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("shell-openPathCompleted", (errorMessage) => - { - BridgeConnector.Socket.Off("shell-openPathCompleted"); - taskCompletionSource.SetResult(errorMessage); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("shell-openPathCompleted", tcs.SetResult); BridgeConnector.Socket.Emit("shell-openPath", path); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -92,13 +87,9 @@ public Task OpenExternalAsync(string url) /// The error message corresponding to the failure if a failure occurred, otherwise . public Task OpenExternalAsync(string url, OpenExternalOptions options) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); - BridgeConnector.Socket.On("shell-openExternalCompleted", (error) => - { - BridgeConnector.Socket.Off("shell-openExternalCompleted"); - taskCompletionSource.SetResult(error); - }); + BridgeConnector.Socket.Once("shell-openExternalCompleted", tcs.SetResult); if (options == null) { @@ -109,7 +100,7 @@ public Task OpenExternalAsync(string url, OpenExternalOptions options) BridgeConnector.Socket.Emit("shell-openExternal", url, options); } - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -119,17 +110,12 @@ public Task OpenExternalAsync(string url, OpenExternalOptions options) /// Whether the item was successfully moved to the trash. public Task TrashItemAsync(string fullPath) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("shell-trashItem-completed", (success) => - { - BridgeConnector.Socket.Off("shell-trashItem-completed"); - taskCompletionSource.SetResult(success); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("shell-trashItem-completed", tcs.SetResult); BridgeConnector.Socket.Emit("shell-trashItem", fullPath); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -149,17 +135,12 @@ public void Beep() /// Whether the shortcut was created successfully. public 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(success); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("shell-writeShortcutLinkCompleted", tcs.SetResult); BridgeConnector.Socket.Emit("shell-writeShortcutLink", shortcutPath, operation.GetDescription(), options); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -170,17 +151,12 @@ public Task WriteShortcutLinkAsync(string shortcutPath, ShortcutLinkOperat /// of the shortcut. public Task ReadShortcutLinkAsync(string shortcutPath) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("shell-readShortcutLinkCompleted", (shortcutDetails) => - { - BridgeConnector.Socket.Off("shell-readShortcutLinkCompleted"); - taskCompletionSource.SetResult(shortcutDetails); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("shell-readShortcutLinkCompleted", tcs.SetResult); BridgeConnector.Socket.Emit("shell-readShortcutLink", shortcutPath); - return taskCompletionSource.Task; + return tcs.Task; } diff --git a/src/ElectronNET.API/API/Tray.cs b/src/ElectronNET.API/API/Tray.cs index 8f4f2aed..bc3b49e6 100644 --- a/src/ElectronNET.API/API/Tray.cs +++ b/src/ElectronNET.API/API/Tray.cs @@ -218,18 +218,12 @@ public async Task DisplayBalloon(DisplayBalloonOptions options) /// public async Task IsDestroyedAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("tray-isDestroyedCompleted", (isDestroyed) => - { - BridgeConnector.Socket.Off("tray-isDestroyedCompleted"); - - taskCompletionSource.SetResult(isDestroyed); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("tray-isDestroyedCompleted", tcs.SetResult); await BridgeConnector.Socket.Emit("tray-isDestroyed").ConfigureAwait(false); - return await taskCompletionSource.Task.ConfigureAwait(false); + return await tcs.Task.ConfigureAwait(false); } diff --git a/src/ElectronNET.API/API/WebContents.cs b/src/ElectronNET.API/API/WebContents.cs index 0a2fdfa7..28a8430e 100644 --- a/src/ElectronNET.API/API/WebContents.cs +++ b/src/ElectronNET.API/API/WebContents.cs @@ -158,17 +158,12 @@ public void OpenDevTools(OpenDevToolsOptions openDevToolsOptions) /// printers public Task GetPrintersAsync() { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("webContents-getPrinters-completed", (printers) => - { - BridgeConnector.Socket.Off("webContents-getPrinters-completed"); - taskCompletionSource.SetResult(printers); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("webContents-getPrinters-completed", tcs.SetResult); BridgeConnector.Socket.Emit("webContents-getPrinters", Id); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -178,13 +173,9 @@ public Task GetPrintersAsync() /// success public Task PrintAsync(PrintOptions options = null) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); - BridgeConnector.Socket.On("webContents-print-completed", (success) => - { - BridgeConnector.Socket.Off("webContents-print-completed"); - taskCompletionSource.SetResult(success); - }); + BridgeConnector.Socket.Once("webContents-print-completed", tcs.SetResult); if (options == null) { @@ -195,7 +186,7 @@ public Task PrintAsync(PrintOptions options = null) BridgeConnector.Socket.Emit("webContents-print", Id, options); } - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -209,13 +200,9 @@ public Task PrintAsync(PrintOptions options = null) /// success public Task PrintToPDFAsync(string path, PrintToPDFOptions options = null) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); - BridgeConnector.Socket.On("webContents-printToPDF-completed", (success) => - { - BridgeConnector.Socket.Off("webContents-printToPDF-completed"); - taskCompletionSource.SetResult(success); - }); + BridgeConnector.Socket.Once("webContents-printToPDF-completed", tcs.SetResult); if (options == null) { @@ -226,7 +213,7 @@ public Task PrintToPDFAsync(string path, PrintToPDFOptions options = null) BridgeConnector.Socket.Emit("webContents-printToPDF", Id, options, path); } - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -247,17 +234,12 @@ public Task PrintToPDFAsync(string path, PrintToPDFOptions options = null) /// public Task ExecuteJavaScriptAsync(string code, bool userGesture = false) { - var taskCompletionSource = new TaskCompletionSource(); - - BridgeConnector.Socket.On("webContents-executeJavaScript-completed", (result) => - { - BridgeConnector.Socket.Off("webContents-executeJavaScript-completed"); - taskCompletionSource.SetResult(result); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("webContents-executeJavaScript-completed", tcs.SetResult); BridgeConnector.Socket.Emit("webContents-executeJavaScript", Id, code, userGesture); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -267,18 +249,12 @@ public Task ExecuteJavaScriptAsync(string code, bool userGesture = false) /// URL of the loaded page public Task GetUrl() { - var taskCompletionSource = new TaskCompletionSource(); - - var eventString = "webContents-getUrl" + Id; - BridgeConnector.Socket.On(eventString, (url) => - { - BridgeConnector.Socket.Off(eventString); - taskCompletionSource.SetResult(url); - }); + var tcs = new TaskCompletionSource(); + BridgeConnector.Socket.Once("webContents-getUrl", tcs.SetResult); BridgeConnector.Socket.Emit("webContents-getUrl", Id); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -313,24 +289,22 @@ public Task LoadURLAsync(string url) /// public Task LoadURLAsync(string url, LoadURLOptions options) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); - BridgeConnector.Socket.On("webContents-loadURL-complete" + Id, () => + BridgeConnector.Socket.Once("webContents-loadURL-complete" + Id, () => { - BridgeConnector.Socket.Off("webContents-loadURL-complete" + Id); BridgeConnector.Socket.Off("webContents-loadURL-error" + Id); - taskCompletionSource.SetResult(null); + tcs.SetResult(null); }); - BridgeConnector.Socket.On("webContents-loadURL-error" + Id, (error) => + BridgeConnector.Socket.Once("webContents-loadURL-error" + Id, (error) => { - BridgeConnector.Socket.Off("webContents-loadURL-error" + Id); - taskCompletionSource.SetException(new InvalidOperationException(error)); + tcs.SetException(new InvalidOperationException(error)); }); BridgeConnector.Socket.Emit("webContents-loadURL", Id, url, options); - return taskCompletionSource.Task; + return tcs.Task; } /// @@ -344,6 +318,4 @@ public void InsertCSS(bool isBrowserWindow, string path) { BridgeConnector.Socket.Emit("webContents-insertCSS", Id, isBrowserWindow, path); } - - } diff --git a/src/ElectronNET.API/API/WebRequest.cs b/src/ElectronNET.API/API/WebRequest.cs index 26cb4882..0bbd5efa 100644 --- a/src/ElectronNET.API/API/WebRequest.cs +++ b/src/ElectronNET.API/API/WebRequest.cs @@ -34,7 +34,7 @@ public void OnBeforeRequest(WebRequestFilter filter, Action($"webContents-session-webRequest-onBeforeRequest{Id}", + BridgeConnector.Socket.On($"webContents-session-webRequest-onBeforeRequest{Id}", (args) => { //// var details0 = args[0].Deserialize(ElectronNET.ElectronJson.Options); diff --git a/src/ElectronNET.API/API/WindowManager.cs b/src/ElectronNET.API/API/WindowManager.cs index c9ba22fe..665aef0a 100644 --- a/src/ElectronNET.API/API/WindowManager.cs +++ b/src/ElectronNET.API/API/WindowManager.cs @@ -96,21 +96,18 @@ public async Task CreateWindowAsync(string loadUrl = "http://loca /// public async Task CreateWindowAsync(BrowserWindowOptions options, string loadUrl = "http://localhost") { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); - BridgeConnector.Socket.On("BrowserWindowCreated", (id) => + BridgeConnector.Socket.Once("BrowserWindowCreated", (id) => { - BridgeConnector.Socket.Off("BrowserWindowCreated"); var browserWindow = new BrowserWindow(id); _browserWindows.Add(browserWindow); - taskCompletionSource.SetResult(browserWindow); + tcs.SetResult(browserWindow); }); - BridgeConnector.Socket.On("BrowserWindowClosed", (ids) => + BridgeConnector.Socket.Once("BrowserWindowClosed", (ids) => { - BridgeConnector.Socket.Off("BrowserWindowClosed"); - for (int index = 0; index < _browserWindows.Count; index++) { if (!ids.Contains(_browserWindows[index].Id)) @@ -152,7 +149,7 @@ public async Task CreateWindowAsync(BrowserWindowOptions options, await BridgeConnector.Socket.Emit("createBrowserWindow", options, loadUrl).ConfigureAwait(false); } - return await taskCompletionSource.Task.ConfigureAwait(false); + return await tcs.Task.ConfigureAwait(false); } private bool IsWindows10() @@ -180,21 +177,20 @@ public Task CreateBrowserViewAsync() /// public async Task CreateBrowserViewAsync(BrowserViewConstructorOptions options) { - var taskCompletionSource = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(); - BridgeConnector.Socket.On("BrowserViewCreated", (id) => + BridgeConnector.Socket.Once("BrowserViewCreated", (id) => { - BridgeConnector.Socket.Off("BrowserViewCreated"); BrowserView browserView = new(id); _browserViews.Add(browserView); - taskCompletionSource.SetResult(browserView); + tcs.SetResult(browserView); }); await BridgeConnector.Socket.Emit("createBrowserView", options).ConfigureAwait(false); - return await taskCompletionSource.Task.ConfigureAwait(false); + return await tcs.Task.ConfigureAwait(false); } } diff --git a/src/ElectronNET.API/Common/ProcessRunner.cs b/src/ElectronNET.API/Common/ProcessRunner.cs index dc6d7066..5ac7612a 100644 --- a/src/ElectronNET.API/Common/ProcessRunner.cs +++ b/src/ElectronNET.API/Common/ProcessRunner.cs @@ -322,7 +322,7 @@ public Task WaitForExitAsync(int timeoutMs, CancellationToken cancellation /// has been triggered. /// This method does not end the process itself. /// true, if the process has exited, false if the process is still running. - public async Task WaitForExitAsync(CancellationToken cancellationToken = default(CancellationToken)) + public async Task WaitForExitAsync(CancellationToken cancellationToken = default) { var proc = this.process; From 9a0a494bc5c229e0a6c7d6737c3dc9d93cd3ca2d Mon Sep 17 00:00:00 2001 From: Denny09310 Date: Mon, 10 Nov 2025 11:27:32 +0100 Subject: [PATCH 3/3] fix: missing "Once" changes, rollback to "On" on Notification --- src/ElectronNET.API/API/AutoUpdater.cs | 8 ++++---- src/ElectronNET.API/API/Notification.cs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ElectronNET.API/API/AutoUpdater.cs b/src/ElectronNET.API/API/AutoUpdater.cs index e7cad59f..ebe0c9b4 100644 --- a/src/ElectronNET.API/API/AutoUpdater.cs +++ b/src/ElectronNET.API/API/AutoUpdater.cs @@ -168,7 +168,7 @@ public Task CurrentVersionAsync { var tcs = new TaskCompletionSource(); - BridgeConnector.Socket.On("autoUpdater-currentVersion-get-reply", tcs.SetResult); + BridgeConnector.Socket.Once("autoUpdater-currentVersion-get-reply", tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdater-currentVersion-get"); return tcs.Task; @@ -201,7 +201,7 @@ public Task ChannelAsync { var tcs = new TaskCompletionSource(); - BridgeConnector.Socket.On("autoUpdater-channel-get-reply", tcs.SetResult); + BridgeConnector.Socket.Once("autoUpdater-channel-get-reply", tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdater-channel-get"); return tcs.Task; @@ -221,7 +221,7 @@ public Task> RequestHeadersAsync { var tcs = new TaskCompletionSource>(); - BridgeConnector.Socket.On>("autoUpdater-requestHeaders-get-reply", tcs.SetResult); + BridgeConnector.Socket.Once>("autoUpdater-requestHeaders-get-reply", tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdater-requestHeaders-get"); return tcs.Task; @@ -441,7 +441,7 @@ public Task GetFeedURLAsync() var tcs = new TaskCompletionSource(); string guid = Guid.NewGuid().ToString(); - BridgeConnector.Socket.On("autoUpdaterGetFeedURLComplete" + guid, tcs.SetResult); + BridgeConnector.Socket.Once("autoUpdaterGetFeedURLComplete" + guid, tcs.SetResult); BridgeConnector.Socket.Emit("autoUpdaterGetFeedURL", guid); return tcs.Task; diff --git a/src/ElectronNET.API/API/Notification.cs b/src/ElectronNET.API/API/Notification.cs index d1ae2b83..1ed5ddd8 100644 --- a/src/ElectronNET.API/API/Notification.cs +++ b/src/ElectronNET.API/API/Notification.cs @@ -62,7 +62,7 @@ private static void GenerateIDsForDefinedActions(NotificationOptions notificatio isActionDefined = true; BridgeConnector.Socket.Off("NotificationEventShow"); - BridgeConnector.Socket.Once("NotificationEventShow", (id) => { _notificationOptions.Single(x => x.ShowID == id).OnShow(); }); + BridgeConnector.Socket.On("NotificationEventShow", (id) => { _notificationOptions.Single(x => x.ShowID == id).OnShow(); }); } if (notificationOptions.OnClick != null)