diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml new file mode 100644 index 00000000..c26022cd --- /dev/null +++ b/.github/workflows/integration-tests.yml @@ -0,0 +1,209 @@ +name: Tests + +on: + push: + branches: [ develop, main ] + pull_request: + branches: [ develop, main ] + +concurrency: + group: integration-tests-${{ github.ref }} + cancel-in-progress: true + +jobs: + tests: + name: Integration Tests (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-24.04 + rid: linux-x64 + - os: windows-2022 + rid: win-x64 + - os: macos-14 + rid: osx-arm64 + + env: + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 + DOTNET_NOLOGO: 1 + CI: true + ELECTRON_ENABLE_LOGGING: 1 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '10.0.x' + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + + - name: Restore + run: dotnet restore -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj + + - name: Build + run: dotnet build --no-restore -c Release -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj + + - name: Install Linux GUI dependencies + if: runner.os == 'Linux' + run: | + set -e + sudo apt-get update + # Core Electron dependencies + sudo apt-get install -y xvfb \ + libgtk-3-0 libnss3 libgdk-pixbuf-2.0-0 libdrm2 libgbm1 libxss1 libxtst6 libatk-bridge2.0-0 libatk1.0-0 libatspi2.0-0 libx11-xcb1 libasound2t64 + + - name: Run tests (Linux) + if: runner.os == 'Linux' + continue-on-error: true + run: | + mkdir -p test-results/Ubuntu + xvfb-run -a dotnet test src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj \ + -c Release --no-build -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} \ + --logger "trx;LogFileName=Ubuntu.trx" \ + --logger "console;verbosity=detailed" \ + --results-directory test-results + + - name: Run tests (Windows) + if: runner.os == 'Windows' + continue-on-error: true + run: | + New-Item -ItemType Directory -Force -Path test-results/Windows | Out-Null + dotnet test src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj -c Release --no-build -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} --logger "trx;LogFileName=Windows.trx" --logger "console;verbosity=detailed" --results-directory test-results + + - name: Run tests (macOS) + if: runner.os == 'macOS' + continue-on-error: true + run: | + mkdir -p test-results/macOS + dotnet test src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj -c Release --no-build -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} --logger "trx;LogFileName=macOS.trx" --logger "console;verbosity=detailed" --results-directory test-results + + - name: Upload raw test results + if: always() + uses: actions/upload-artifact@v4 + with: + name: test-results-${{ matrix.os }} + path: test-results/*.trx + retention-days: 7 + + summary: + name: Aggregate + runs-on: ubuntu-24.04 + if: always() + needs: [tests] + + permissions: + actions: read + contents: read + checks: write + pull-requests: write + + steps: + - name: Download all test results + uses: actions/download-artifact@v4 + with: + path: test-results + + - name: Setup .NET (for CTRF conversion) + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '10.0.x' + + - name: Install CTRF TRX→CTRF converter (dotnet tool) + run: | + dotnet new tool-manifest + dotnet tool install DotnetCtrfJsonReporter --local + + - name: Convert TRX → CTRF and clean names (keep suites; set filePath=OS) + shell: bash + run: | + set -euo pipefail + mkdir -p ctrf + shopt -s globstar nullglob + conv=0 + for trx in test-results/**/*.trx; do + fname="$(basename "$trx")" + os="${fname%.trx}" + outdir="ctrf/${os}" + mkdir -p "$outdir" + out="${outdir}/ctrf-report.json" + + dotnet tool run DotnetCtrfJsonReporter -p "$trx" -d "$outdir" -f "ctrf-report.json" + + jq --arg os "$os" '.results.tests |= map(.filePath = $os)' "$out" > "${out}.tmp" && mv "${out}.tmp" "$out" + + echo "Converted & normalized $trx -> $out" + conv=$((conv+1)) + done + echo "Processed $conv TRX file(s)" + + + - name: Publish Test Report + if: always() + uses: ctrf-io/github-test-reporter@v1 + with: + report-path: 'ctrf/**/*.json' + + summary: true + pull-request: false + status-check: false + status-check-name: 'Integration Tests' + use-suite-name: true + update-comment: true + always-group-by: true + overwrite-comment: true + exit-on-fail: true + group-by: 'suite' + upload-artifact: true + fetch-previous-results: true + + summary-report: false + summary-delta-report: true + github-report: true + test-report: false + test-list-report: false + failed-report: true + failed-folded-report: false + skipped-report: true + suite-folded-report: true + suite-list-report: false + file-report: true + previous-results-report: true + insights-report: true + flaky-report: true + flaky-rate-report: true + fail-rate-report: false + slowest-report: false + + report-order: 'summary-delta-report,failed-report,skipped-report,suite-folded-report,file-report,previous-results-report,github-report' + env: + GITHUB_TOKEN: ${{ github.token }} + + + - name: Create PR Comment + if: always() + uses: ctrf-io/github-test-reporter@v1 + with: + report-path: 'ctrf/**/*.json' + + summary: true + pull-request: true + use-suite-name: true + update-comment: true + always-group-by: true + overwrite-comment: true + upload-artifact: false + + pull-request-report: true + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: Summary + run: echo "All matrix test jobs completed." \ No newline at end of file diff --git a/Changelog.md b/Changelog.md index 560129ec..ac8b5af4 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,9 @@ +# 0.2.0 + +## ElectronNET.Core + +- Added `IsRunningBlazor` option to `BrowserWindowOptions` (#926) + # 0.1.0 ## ElectronNET.Core diff --git a/README.md b/README.md index bbec26d1..3fb436ba 100644 --- a/README.md +++ b/README.md @@ -58,22 +58,22 @@ To do so, use the `UseElectron` extension method on a `WebApplicationBuilder`, a using ElectronNET.API; using ElectronNET.API.Entities; - public static void Main(string[] args) - { - WebHost.CreateDefaultBuilder(args) - .UseElectron(args, ElectronAppReady) - .UseStartup() - .Build() - .Run(); - } - - public static async Task ElectronAppReady() - { - var browserWindow = await Electron.WindowManager.CreateWindowAsync( - new BrowserWindowOptions { Show = false }); - - browserWindow.OnReadyToShow += () => browserWindow.Show(); - } +public static void Main(string[] args) +{ + WebHost.CreateDefaultBuilder(args) + .UseElectron(args, ElectronAppReady) + .UseStartup() + .Build() + .Run(); +} + +public static async Task ElectronAppReady() +{ + var browserWindow = await Electron.WindowManager.CreateWindowAsync( + new BrowserWindowOptions { Show = false }); + + browserWindow.OnReadyToShow += () => browserWindow.Show(); +} ``` ### Minimal API Example @@ -113,6 +113,56 @@ app.MapRazorPages(); app.Run(); ``` +### Blazor + +For a project with Blazor you can use: + +```cs +using ElectronNET.API; +using ElectronNET.API.Entities; + +var builder = WebApplication.CreateBuilder(args); + +builder.Services + .AddRazorComponents() + .AddInteractiveWebAssemblyComponents(); + +builder.Services.AddElectron(); // <-- might be useful to set up DI + +builder.UseElectron(args, async () => +{ + var options = new BrowserWindowOptions { + Show = false, + AutoHideMenuBar = true, + IsRunningBlazor = true, // <-- crucial + }; + var browserWindow = await Electron.WindowManager.CreateWindowAsync(options); + browserWindow.OnReadyToShow += () => browserWindow.Show(); +}); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseWebAssemblyDebugging(); +} +else +{ + app.UseExceptionHandler("/Error", createScopeForErrors: true); +} + +app.UseStaticFiles(); +app.UseAntiforgery(); + +app.MapRazorComponents() + .AddInteractiveWebAssemblyRenderMode(); + +app.Run(); +``` + +The `IsRunningBlazor` option makes sure to set up the renderer in a way that Blazor can just run without any interference. This includes things such as HMR for development. + ## 🚀 Starting and Debugging the Application Just press `F5` in Visual Studio or use dotnet for debugging. diff --git a/docs/GettingStarted/Console-App.md b/docs/GettingStarted/Console-App.md index c848373c..4a006713 100644 --- a/docs/GettingStarted/Console-App.md +++ b/docs/GettingStarted/Console-App.md @@ -54,7 +54,7 @@ Add the Electron.NET configuration to your `.csproj` file: - + ``` diff --git a/nuke/_build.csproj b/nuke/_build.csproj index 3258f31e..78e4653a 100644 --- a/nuke/_build.csproj +++ b/nuke/_build.csproj @@ -11,6 +11,8 @@ + + diff --git a/src/.editorconfig b/src/.editorconfig new file mode 100644 index 00000000..17389dfa --- /dev/null +++ b/src/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] + +# CA1416: Validate platform compatibility +dotnet_diagnostic.CA1416.severity = error diff --git a/src/ElectronAPI_PlatformLimits.txt b/src/ElectronAPI_PlatformLimits.txt new file mode 100644 index 00000000..b7508ee6 --- /dev/null +++ b/src/ElectronAPI_PlatformLimits.txt @@ -0,0 +1,349 @@ +Event: 'open-file' _macOS_ +Event: 'open-url' _macOS_ +Event: 'activate' _macOS_ +Event: 'did-become-active' _macOS_ +Event: 'did-resign-active' _macOS_ +Event: 'continue-activity' _macOS_ +Event: 'will-continue-activity' _macOS_ +Event: 'continue-activity-error' _macOS_ +Event: 'activity-was-continued' _macOS_ +Event: 'update-activity-state' _macOS_ +Event: 'new-window-for-tab' _macOS_ +Event: 'accessibility-support-changed' _macOS_ _Windows_ +`app.hide()` _macOS_ +`app.isHidden()` _macOS_ +`app.show()` _macOS_ +`app.addRecentDocument(path)` _macOS_ _Windows_ +`app.clearRecentDocuments()` _macOS_ _Windows_ +`app.getRecentDocuments()` _macOS_ _Windows_ +`app.removeAsDefaultProtocolClient(protocol[, path, args])` _macOS_ _Windows_ +`app.getApplicationInfoForProtocol(url)` _macOS_ _Windows_ +`app.setUserTasks(tasks)` _Windows_ +`app.getJumpListSettings()` _Windows_ +`app.setJumpList(categories)` _Windows_ +`app.setUserActivity(type, userInfo[, webpageURL])` _macOS_ +`app.getCurrentActivityType()` _macOS_ +`app.invalidateCurrentActivity()` _macOS_ +`app.resignCurrentActivity()` _macOS_ +`app.updateCurrentActivity(type, userInfo)` _macOS_ +`app.setAppUserModelId(id)` _Windows_ +`app.setActivationPolicy(policy)` _macOS_ +`app.importCertificate(options, callback)` _Linux_ +`app.setBadgeCount([count])` _Linux_ _macOS_ +`app.getBadgeCount()` _Linux_ _macOS_ +`app.isUnityRunning()` _Linux_ +`app.getLoginItemSettings([options])` _macOS_ _Windows_ +`app.setLoginItemSettings(settings)` _macOS_ _Windows_ +`app.isAccessibilitySupportEnabled()` _macOS_ _Windows_ +`app.setAccessibilitySupportEnabled(enabled)` _macOS_ _Windows_ +`app.getAccessibilitySupportFeatures()` _macOS_ _Windows_ +`app.setAccessibilitySupportFeatures(features)` _macOS_ _Windows_ +`app.showEmojiPanel()` _macOS_ _Windows_ +`app.isInApplicationsFolder()` _macOS_ +`app.moveToApplicationsFolder([options])` _macOS_ +`app.isSecureKeyboardEntryEnabled()` _macOS_ +`app.setSecureKeyboardEntryEnabled(enabled)` _macOS_ +`app.setClientCertRequestPasswordHandler(handler)` _Linux_ +`app.accessibilitySupportEnabled` _macOS_ _Windows_ +`app.badgeCount` _Linux_ _macOS_ +`app.dock` _macOS_ _Readonly_ +`app.runningUnderARM64Translation` _Readonly_ _macOS_ _Windows_ +Event: 'query-session-end' _Windows_ +Event: 'session-end' _Windows_ +Event: 'will-resize' _macOS_ _Windows_ +Event: 'resized' _macOS_ _Windows_ +Event: 'will-move' _macOS_ _Windows_ +Event: 'moved' _macOS_ _Windows_ +Event: 'app-command' _Windows_ _Linux_ +Event: 'swipe' _macOS_ +Event: 'rotate-gesture' _macOS_ +Event: 'sheet-begin' _macOS_ +Event: 'sheet-end' _macOS_ +Event: 'new-window-for-tab' _macOS_ +Event: 'system-context-menu' _Windows_ _Linux_ +`win.tabbingIdentifier` _macOS_ _Readonly_ +`win.autoHideMenuBar` _Linux_ _Windows_ +`win.focusable` _Windows_ _macOS_ +`win.visibleOnAllWorkspaces` _macOS_ _Linux_ +`win.menuBarVisible` _Windows_ _Linux_ +`win.documentEdited` _macOS_ +`win.representedFilename` _macOS_ +`win.minimizable` _macOS_ _Windows_ +`win.maximizable` _macOS_ _Windows_ +`win.closable` _macOS_ _Windows_ +`win.movable` _macOS_ _Windows_ +`win.excludedFromShownWindowsMenu` _macOS_ +`win.snapped` _Windows_ _Readonly_ +`win.setSimpleFullScreen(flag)` _macOS_ +`win.isSimpleFullScreen()` _macOS_ +`win.previewFile(path[, displayName])` _macOS_ +`win.closeFilePreview()` _macOS_ +`win.setMovable(movable)` _macOS_ _Windows_ +`win.isMovable()` _macOS_ _Windows_ +`win.setMinimizable(minimizable)` _macOS_ _Windows_ +`win.isMinimizable()` _macOS_ _Windows_ +`win.setMaximizable(maximizable)` _macOS_ _Windows_ +`win.isMaximizable()` _macOS_ _Windows_ +`win.setClosable(closable)` _macOS_ _Windows_ +`win.isClosable()` _macOS_ _Windows_ +`win.setHiddenInMissionControl(hidden)` _macOS_ +`win.isHiddenInMissionControl()` _macOS_ +`win.setSheetOffset(offsetY[, offsetX])` _macOS_ +`win.setSkipTaskbar(skip)` _macOS_ _Windows_ +`win.isTabletMode()` _Windows_ +`win.hookWindowMessage(message, callback)` _Windows_ +`win.isWindowMessageHooked(message)` _Windows_ +`win.unhookWindowMessage(message)` _Windows_ +`win.unhookAllWindowMessages()` _Windows_ +`win.setRepresentedFilename(filename)` _macOS_ +`win.getRepresentedFilename()` _macOS_ +`win.setDocumentEdited(edited)` _macOS_ +`win.isDocumentEdited()` _macOS_ +`win.setMenu(menu)` _Linux_ _Windows_ +`win.removeMenu()` _Linux_ _Windows_ +`win.setOverlayIcon(overlay, description)` _Windows_ +`win.invalidateShadow()` _macOS_ +`win.setOpacity(opacity)` _Windows_ _macOS_ +`win.setShape(rects)` _Windows_ _Linux_ _Experimental_ +`win.setThumbarButtons(buttons)` _Windows_ +`win.setThumbnailClip(region)` _Windows_ +`win.setThumbnailToolTip(toolTip)` _Windows_ +`win.setAppDetails(options)` _Windows_ +`win.setAccentColor(accentColor)` _Windows_ +`win.getAccentColor()` _Windows_ +`win.setIcon(icon)` _Windows_ _Linux_ +`win.setWindowButtonVisibility(visible)` _macOS_ +`win.setAutoHideMenuBar(hide)` _Windows_ _Linux_ +`win.isMenuBarAutoHide()` _Windows_ _Linux_ +`win.setMenuBarVisibility(visible)` _Windows_ _Linux_ +`win.isMenuBarVisible()` _Windows_ _Linux_ +`win.isSnapped()` _Windows_ +`win.setVisibleOnAllWorkspaces(visible[, options])` _macOS_ _Linux_ +`win.isVisibleOnAllWorkspaces()` _macOS_ _Linux_ +`win.setContentProtection(enable)` _macOS_ _Windows_ +`win.isContentProtected()` _macOS_ _Windows_ +`win.setFocusable(focusable)` _macOS_ _Windows_ +`win.isFocusable()` _macOS_ _Windows_ +`win.setAutoHideCursor(autoHide)` _macOS_ +`win.selectPreviousTab()` _macOS_ +`win.selectNextTab()` _macOS_ +`win.showAllTabs()` _macOS_ +`win.mergeAllWindows()` _macOS_ +`win.moveTabToNewWindow()` _macOS_ +`win.toggleTabBar()` _macOS_ +`win.addTabbedWindow(baseWindow)` _macOS_ +`win.setVibrancy(type)` _macOS_ +`win.setBackgroundMaterial(material)` _Windows_ +`win.setWindowButtonPosition(position)` _macOS_ +`win.getWindowButtonPosition()` _macOS_ +`win.setTouchBar(touchBar)` _macOS_ +`win.setTitleBarOverlay(options)` _Windows_ _Linux_ +Event: 'query-session-end' _Windows_ +Event: 'session-end' _Windows_ +Event: 'will-resize' _macOS_ _Windows_ +Event: 'resized' _macOS_ _Windows_ +Event: 'will-move' _macOS_ _Windows_ +Event: 'moved' _macOS_ _Windows_ +Event: 'app-command' _Windows_ _Linux_ +Event: 'swipe' _macOS_ +Event: 'rotate-gesture' _macOS_ +Event: 'sheet-begin' _macOS_ +Event: 'sheet-end' _macOS_ +Event: 'new-window-for-tab' _macOS_ +Event: 'system-context-menu' _Windows_ _Linux_ +`win.tabbingIdentifier` _macOS_ _Readonly_ +`win.autoHideMenuBar` _Linux_ _Windows_ +`win.focusable` _Windows_ _macOS_ +`win.visibleOnAllWorkspaces` _macOS_ _Linux_ +`win.menuBarVisible` _Windows_ _Linux_ +`win.documentEdited` _macOS_ +`win.representedFilename` _macOS_ +`win.minimizable` _macOS_ _Windows_ +`win.maximizable` _macOS_ _Windows_ +`win.closable` _macOS_ _Windows_ +`win.movable` _macOS_ _Windows_ +`win.excludedFromShownWindowsMenu` _macOS_ +`win.snapped` _Windows_ _Readonly_ +`win.setSimpleFullScreen(flag)` _macOS_ +`win.isSimpleFullScreen()` _macOS_ +`win.previewFile(path[, displayName])` _macOS_ +`win.closeFilePreview()` _macOS_ +`win.setMovable(movable)` _macOS_ _Windows_ +`win.isMovable()` _macOS_ _Windows_ +`win.setMinimizable(minimizable)` _macOS_ _Windows_ +`win.isMinimizable()` _macOS_ _Windows_ +`win.setMaximizable(maximizable)` _macOS_ _Windows_ +`win.isMaximizable()` _macOS_ _Windows_ +`win.setClosable(closable)` _macOS_ _Windows_ +`win.isClosable()` _macOS_ _Windows_ +`win.setHiddenInMissionControl(hidden)` _macOS_ +`win.isHiddenInMissionControl()` _macOS_ +`win.setSheetOffset(offsetY[, offsetX])` _macOS_ +`win.setSkipTaskbar(skip)` _macOS_ _Windows_ +`win.isTabletMode()` _Windows_ +`win.hookWindowMessage(message, callback)` _Windows_ +`win.isWindowMessageHooked(message)` _Windows_ +`win.unhookWindowMessage(message)` _Windows_ +`win.unhookAllWindowMessages()` _Windows_ +`win.setRepresentedFilename(filename)` _macOS_ +`win.getRepresentedFilename()` _macOS_ +`win.setDocumentEdited(edited)` _macOS_ +`win.isDocumentEdited()` _macOS_ +`win.setMenu(menu)` _Linux_ _Windows_ +`win.removeMenu()` _Linux_ _Windows_ +`win.setOverlayIcon(overlay, description)` _Windows_ +`win.invalidateShadow()` _macOS_ +`win.setOpacity(opacity)` _Windows_ _macOS_ +`win.setShape(rects)` _Windows_ _Linux_ _Experimental_ +`win.setThumbarButtons(buttons)` _Windows_ +`win.setThumbnailClip(region)` _Windows_ +`win.setThumbnailToolTip(toolTip)` _Windows_ +`win.setAppDetails(options)` _Windows_ +`win.setAccentColor(accentColor)` _Windows_ +`win.getAccentColor()` _Windows_ +`win.showDefinitionForSelection()` _macOS_ +`win.setIcon(icon)` _Windows_ _Linux_ +`win.setWindowButtonVisibility(visible)` _macOS_ +`win.setAutoHideMenuBar(hide)` _Windows_ _Linux_ +`win.isMenuBarAutoHide()` _Windows_ _Linux_ +`win.setMenuBarVisibility(visible)` _Windows_ _Linux_ +`win.isMenuBarVisible()` _Windows_ _Linux_ +`win.isSnapped()` _Windows_ +`win.setVisibleOnAllWorkspaces(visible[, options])` _macOS_ _Linux_ +`win.isVisibleOnAllWorkspaces()` _macOS_ _Linux_ +`win.setContentProtection(enable)` _macOS_ _Windows_ +`win.isContentProtected()` _macOS_ _Windows_ +`win.setFocusable(focusable)` _macOS_ _Windows_ +`win.isFocusable()` _macOS_ _Windows_ +`win.setAutoHideCursor(autoHide)` _macOS_ +`win.selectPreviousTab()` _macOS_ +`win.selectNextTab()` _macOS_ +`win.showAllTabs()` _macOS_ +`win.mergeAllWindows()` _macOS_ +`win.moveTabToNewWindow()` _macOS_ +`win.toggleTabBar()` _macOS_ +`win.addTabbedWindow(browserWindow)` _macOS_ +`win.setVibrancy(type[, options])` _macOS_ +`win.setBackgroundMaterial(material)` _Windows_ +`win.setWindowButtonPosition(position)` _macOS_ +`win.getWindowButtonPosition()` _macOS_ +`win.setTouchBar(touchBar)` _macOS_ +`win.setTitleBarOverlay(options)` _Windows_ _Linux_ +`clipboard.readBookmark()` _macOS_ _Windows_ +`clipboard.writeBookmark(title, url[, type])` _macOS_ _Windows_ +`clipboard.readFindText()` _macOS_ +`clipboard.writeFindText(text)` _macOS_ +--disable-geolocation _macOS_ +`dialog.showCertificateTrustDialog([window, ]options)` _macOS_ _Windows_ +`dock.bounce([type])` _macOS_ +`dock.cancelBounce(id)` _macOS_ +`dock.downloadFinished(filePath)` _macOS_ +`dock.setBadge(text)` _macOS_ +`dock.getBadge()` _macOS_ +`dock.hide()` _macOS_ +`dock.show()` _macOS_ +`dock.isVisible()` _macOS_ +`dock.setMenu(menu)` _macOS_ +`dock.getMenu()` _macOS_ +`dock.setIcon(image)` _macOS_ +`ELECTRON_NO_ATTACH_CONSOLE` _Windows_ +`ELECTRON_FORCE_WINDOW_MENU_BAR` _Linux_ +`ELECTRON_TRASH` _Linux_ +`ELECTRON_DEFAULT_ERROR_MODE` _Windows_ +`menuItem.userAccelerator` _Readonly_ _macOS_ +`menuItem.toolTip` _macOS_ +`menuItem.sharingItem` _macOS_ +`Menu.sendActionToFirstResponder(action)` _macOS_ +`nativeImage.createThumbnailFromPath(path, size)` _macOS_ _Windows_ +`nativeImage.createFromNamedImage(imageName[, hslShift])` _macOS_ +`image.getNativeHandle()` _macOS_ +`nativeImage.isMacTemplateImage` _macOS_ +`nativeTheme.shouldUseHighContrastColors` _macOS_ _Windows_ _Readonly_ +`nativeTheme.shouldUseDarkColorsForSystemIntegratedUI` _macOS_ _Windows_ _Readonly_ +`nativeTheme.shouldUseInvertedColorScheme` _macOS_ _Windows_ _Readonly_ +`nativeTheme.inForcedColorsMode` _Windows_ _Readonly_ +Event: 'reply' _macOS_ +Event: 'action' _macOS_ +Event: 'failed' _Windows_ +`notification.urgency` _Linux_ +`notification.timeoutType` _Linux_ _Windows_ +`notification.toastXml` _Windows_ +Event: 'on-ac' _macOS_ _Windows_ +Event: 'on-battery' _macOS_ _Windows_ +Event: 'thermal-state-change' _macOS_ +Event: 'speed-limit-change' _macOS_ _Windows_ +Event: 'shutdown' _Linux_ _macOS_ +Event: 'lock-screen' _macOS_ _Windows_ +Event: 'unlock-screen' _macOS_ _Windows_ +Event: 'user-did-become-active' _macOS_ +Event: 'user-did-resign-active' _macOS_ +`powerMonitor.getCurrentThermalState()` _macOS_ +`process.setFdLimit(maxDescriptors)` _macOS_ _Linux_ +Event: 'received-apns-notification' _macOS_ +`pushNotifications.registerForAPNSNotifications()` _macOS_ +`pushNotifications.unregisterForAPNSNotifications()` _macOS_ +`safeStorage.getSelectedStorageBackend()` _Linux_ +`screen.screenToDipPoint(point)` _Windows_ _Linux_ +`screen.dipToScreenPoint(point)` _Windows_ _Linux_ +`screen.screenToDipRect(window, rect)` _Windows_ +`screen.dipToScreenRect(window, rect)` _Windows_ +`ses.setBluetoothPairingHandler(handler)` _Windows_ _Linux_ +`shell.writeShortcutLink(shortcutPath[, operation], options)` _Windows_ +`shell.readShortcutLink(shortcutPath)` _Windows_ +Event: 'accent-color-changed' _Windows_ _Linux_ +Event: 'color-changed' _Windows_ +`systemPreferences.isSwipeTrackingFromScrollEventsEnabled()` _macOS_ +`systemPreferences.postNotification(event, userInfo[, deliverImmediately])` _macOS_ +`systemPreferences.postLocalNotification(event, userInfo)` _macOS_ +`systemPreferences.postWorkspaceNotification(event, userInfo)` _macOS_ +`systemPreferences.subscribeNotification(event, callback)` _macOS_ +`systemPreferences.subscribeLocalNotification(event, callback)` _macOS_ +`systemPreferences.subscribeWorkspaceNotification(event, callback)` _macOS_ +`systemPreferences.unsubscribeNotification(id)` _macOS_ +`systemPreferences.unsubscribeLocalNotification(id)` _macOS_ +`systemPreferences.unsubscribeWorkspaceNotification(id)` _macOS_ +`systemPreferences.registerDefaults(defaults)` _macOS_ +`systemPreferences.getUserDefault(key, type)` _macOS_ +`systemPreferences.setUserDefault(key, type, value)` _macOS_ +`systemPreferences.removeUserDefault(key)` _macOS_ +`systemPreferences.getColor(color)` _Windows_ _macOS_ +`systemPreferences.getSystemColor(color)` _macOS_ +`systemPreferences.getEffectiveAppearance()` _macOS_ +`systemPreferences.canPromptTouchID()` _macOS_ +`systemPreferences.promptTouchID(reason)` _macOS_ +`systemPreferences.isTrustedAccessibilityClient(prompt)` _macOS_ +`systemPreferences.getMediaAccessStatus(mediaType)` _Windows_ _macOS_ +`systemPreferences.askForMediaAccess(mediaType)` _macOS_ +`systemPreferences.accessibilityDisplayShouldReduceTransparency` _macOS_ _Deprecated_ +`systemPreferences.effectiveAppearance` _macOS_ _Readonly_ +Event: 'right-click' _macOS_ _Windows_ +Event: 'double-click' _macOS_ _Windows_ +Event: 'middle-click' _Windows_ +Event: 'balloon-show' _Windows_ +Event: 'balloon-click' _Windows_ +Event: 'balloon-closed' _Windows_ +Event: 'drop' _macOS_ +Event: 'drop-files' _macOS_ +Event: 'drop-text' _macOS_ +Event: 'drag-enter' _macOS_ +Event: 'drag-leave' _macOS_ +Event: 'drag-end' _macOS_ +Event: 'mouse-up' _macOS_ +Event: 'mouse-down' _macOS_ +Event: 'mouse-enter' _macOS_ _Windows_ +Event: 'mouse-leave' _macOS_ _Windows_ +Event: 'mouse-move' _macOS_ _Windows_ +`tray.setPressedImage(image)` _macOS_ +`tray.setTitle(title[, options])` _macOS_ +`tray.getTitle()` _macOS_ +`tray.setIgnoreDoubleClickEvents(ignore)` _macOS_ +`tray.getIgnoreDoubleClickEvents()` _macOS_ +`tray.displayBalloon(options)` _Windows_ +`tray.removeBalloon()` _Windows_ +`tray.focus()` _Windows_ +`tray.popUpContextMenu([menu, position])` _macOS_ _Windows_ +`tray.closeContextMenu()` _macOS_ _Windows_ +`tray.getBounds()` _macOS_ _Windows_ +`tray.getGUID()` _macOS_ _Windows_ +`contents.showDefinitionForSelection()` _macOS_ +`.showDefinitionForSelection()` _macOS_ diff --git a/src/ElectronNET.API/API/App.cs b/src/ElectronNET.API/API/App.cs index 5a27e758..0c5da596 100644 --- a/src/ElectronNET.API/API/App.cs +++ b/src/ElectronNET.API/API/App.cs @@ -2,6 +2,7 @@ using ElectronNET.API.Extensions; using System; using System.Runtime.InteropServices; +using System.Runtime.Versioning; using System.Text.Json; using System.Threading; using System.Threading.Tasks; @@ -259,6 +260,8 @@ public event Action WebContentsCreated /// 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 => AddEvent(value, GetHashCode()); @@ -316,6 +319,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 => AddEvent(value, GetHashCode()); @@ -327,6 +331,7 @@ public event Action 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. /// + [SupportedOSPlatform("macOS")] public event Action OpenUrl { add => AddEvent(value, GetHashCode()); @@ -482,6 +487,7 @@ public void Focus(FocusOptions focusOptions) /// /// Hides all application windows without minimizing them. /// + [SupportedOSPlatform("macOS")] public void Hide() { this.CallMethod0(); @@ -490,6 +496,7 @@ public void Hide() /// /// Shows application windows after they were hidden. Does not automatically focus them. /// + [SupportedOSPlatform("macOS")] public void Show() { this.CallMethod0(); @@ -587,6 +594,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 void AddRecentDocument(string path) { this.CallMethod1(path); @@ -595,6 +604,8 @@ public void AddRecentDocument(string path) /// /// Clears the recent documents list. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void ClearRecentDocuments() { this.CallMethod0(); @@ -710,6 +721,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 this.RemoveAsDefaultProtocolClientAsync(protocol, null, null, cancellationToken).ConfigureAwait(false); @@ -723,6 +736,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 this.RemoveAsDefaultProtocolClientAsync(protocol, path, null, cancellationToken).ConfigureAwait(false); @@ -737,6 +752,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) { cancellationToken.ThrowIfCancellationRequested(); @@ -827,6 +844,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) { cancellationToken.ThrowIfCancellationRequested(); @@ -847,6 +865,7 @@ public async Task SetUserTasksAsync(UserTask[] userTasks, CancellationToke /// /// The cancellation token. /// Jump List settings. + [SupportedOSPlatform("Windows")] public async Task GetJumpListSettingsAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); @@ -869,6 +888,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 void SetJumpList(JumpListCategory[] categories) { this.CallMethod1(categories); @@ -951,6 +971,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); @@ -968,6 +989,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 void SetUserActivity(string type, object userInfo, string webpageUrl) { this.CallMethod3(type, userInfo, webpageUrl); @@ -977,6 +999,7 @@ public void SetUserActivity(string type, object userInfo, string webpageUrl) /// The type of the currently running activity. /// /// The cancellation token. + [SupportedOSPlatform("macOS")] public async Task GetCurrentActivityTypeAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); @@ -986,6 +1009,7 @@ public async Task GetCurrentActivityTypeAsync(CancellationToken cancella /// /// Invalidates the current Handoff user activity. /// + [SupportedOSPlatform("macOS")] public void InvalidateCurrentActivity() { this.CallMethod0(); @@ -994,6 +1018,7 @@ public void InvalidateCurrentActivity() /// /// Marks the current Handoff user activity as inactive without invalidating it. /// + [SupportedOSPlatform("macOS")] public void ResignCurrentActivity() { this.CallMethod0(); @@ -1003,6 +1028,7 @@ public void ResignCurrentActivity() /// Changes the Application User Model ID to id. /// /// Model Id. + [SupportedOSPlatform("Windows")] public void SetAppUserModelId(string id) { this.CallMethod1(id); @@ -1017,6 +1043,7 @@ public 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) { cancellationToken.ThrowIfCancellationRequested(); @@ -1068,6 +1095,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) { cancellationToken.ThrowIfCancellationRequested(); @@ -1087,6 +1116,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) { cancellationToken.ThrowIfCancellationRequested(); @@ -1102,6 +1133,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) { cancellationToken.ThrowIfCancellationRequested(); @@ -1112,6 +1144,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("macOS")] + [SupportedOSPlatform("Windows")] public async Task GetLoginItemSettingsAsync(CancellationToken cancellationToken = default) { return await this.GetLoginItemSettingsAsync(null, cancellationToken).ConfigureAwait(false); @@ -1123,6 +1157,8 @@ public async Task GetLoginItemSettingsAsync(CancellationToken /// /// /// The cancellation token. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task GetLoginItemSettingsAsync(LoginItemSettingsOptions options, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); @@ -1152,6 +1188,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("macOS")] + [SupportedOSPlatform("Windows")] public void SetLoginItemSettings(LoginSettings loginSettings) { this.CallMethod1(loginSettings); @@ -1163,6 +1201,8 @@ public void SetLoginItemSettings(LoginSettings loginSettings) /// See Chromium's accessibility docs for more details. /// /// if Chrome’s accessibility support is enabled, otherwise. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task IsAccessibilitySupportEnabledAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); @@ -1179,6 +1219,8 @@ 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("macOS")] + [SupportedOSPlatform("Windows")] public void SetAccessibilitySupportEnabled(bool enabled) { this.CallMethod1(enabled); diff --git a/src/ElectronNET.API/API/BrowserWindow.cs b/src/ElectronNET.API/API/BrowserWindow.cs index f4e7529f..06c8ff23 100644 --- a/src/ElectronNET.API/API/BrowserWindow.cs +++ b/src/ElectronNET.API/API/BrowserWindow.cs @@ -1,10 +1,11 @@ -using ElectronNET.API.Entities; -using ElectronNET.API.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; +using System.Runtime.Versioning; using System.Threading.Tasks; +using ElectronNET.API.Entities; +using ElectronNET.API.Extensions; // ReSharper disable InconsistentNaming @@ -68,6 +69,7 @@ public event Action OnClosed /// /// 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 => AddEvent(value, Id); @@ -187,6 +189,8 @@ public event Action OnMove /// /// macOS: Emitted once when the window is moved to a new position. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnMoved { add => AddEvent(value, Id); @@ -238,6 +242,8 @@ public event Action OnLeaveHtmlFullScreen /// and the APPCOMMAND_ prefix is stripped off.e.g.APPCOMMAND_BROWSER_BACKWARD /// is emitted as browser-backward. /// + [SupportedOSPlatform("Windows")] + [SupportedOSPlatform("Linux")] public event Action OnAppCommand { add => AddEvent(value, Id); @@ -247,6 +253,7 @@ public event Action OnAppCommand /// /// Emitted on 3-finger swipe. Possible directions are up, right, down, left. /// + [SupportedOSPlatform("macOS")] public event Action OnSwipe { add => AddEvent(value, Id); @@ -256,6 +263,7 @@ public event Action OnSwipe /// /// Emitted when the window opens a sheet. /// + [SupportedOSPlatform("macOS")] public event Action OnSheetBegin { add => AddEvent(value, Id); @@ -265,6 +273,7 @@ public event Action OnSheetBegin /// /// Emitted when the window has closed a sheet. /// + [SupportedOSPlatform("macOS")] public event Action OnSheetEnd { add => AddEvent(value, Id); @@ -274,6 +283,7 @@ public event Action OnSheetEnd /// /// Emitted when the native new tab button is clicked. /// + [SupportedOSPlatform("macOS")] public event Action OnNewWindowForTab { add => AddEvent(value, Id); @@ -432,6 +442,7 @@ 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. + [SupportedOSPlatform("macOS")] public void PreviewFile(string path) => this.CallMethod1(path); /// @@ -442,11 +453,13 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// 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 void PreviewFile(string path, string displayname) => this.CallMethod2(path, displayname); /// /// Closes the currently open Quick Look panel. /// + [SupportedOSPlatform("macOS")] public void CloseFilePreview() => this.CallMethod0(); /// @@ -571,6 +584,8 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// Sets whether the window can be moved by user. On Linux does nothing. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetMovable(bool movable) => this.CallMethod1(movable); /// @@ -579,12 +594,16 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// On Linux always returns true. /// /// On Linux always returns true. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public Task IsMovableAsync() => this.GetPropertyAsync(); /// /// Sets whether the window can be manually minimized by user. On Linux does nothing. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetMinimizable(bool minimizable) => this.CallMethod1(minimizable); /// @@ -593,12 +612,16 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// On Linux always returns true. /// /// On Linux always returns true. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public Task IsMinimizableAsync() => this.GetPropertyAsync(); /// /// Sets whether the window can be manually maximized by user. On Linux does nothing. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetMaximizable(bool maximizable) => this.CallMethod1(maximizable); /// @@ -607,6 +630,8 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// On Linux always returns true. /// /// On Linux always returns true. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public Task IsMaximizableAsync() => this.GetPropertyAsync(); /// @@ -625,6 +650,8 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// Sets whether the window can be manually closed by user. On Linux does nothing. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetClosable(bool closable) => this.CallMethod1(closable); /// @@ -633,6 +660,8 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// On Linux always returns true. /// /// On Linux always returns true. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public Task IsClosableAsync() => this.GetPropertyAsync(); /// @@ -743,6 +772,7 @@ private bool isWindows10() /// but you may want to display them beneath a HTML-rendered toolbar. /// /// + [SupportedOSPlatform("macOS")] public void SetSheetOffset(float offsetY) => this.CallMethod1(offsetY); /// @@ -752,6 +782,7 @@ private bool isWindows10() /// /// /// + [SupportedOSPlatform("macOS")] public void SetSheetOffset(float offsetY, float offsetX) => this.CallMethod2(offsetY, offsetX); /// @@ -764,6 +795,8 @@ private bool isWindows10() /// Makes the window not show in the taskbar. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetSkipTaskbar(bool skip) => this.CallMethod1(skip); /// @@ -789,12 +822,14 @@ private bool isWindows10() /// and the icon of the file will show in window’s title bar. /// /// + [SupportedOSPlatform("macOS")] public void SetRepresentedFilename(string filename) => this.CallMethod1(filename); /// /// The pathname of the file the window represents. /// /// + [SupportedOSPlatform("macOS")] public Task GetRepresentedFilenameAsync() => this.GetPropertyAsync(); /// @@ -802,12 +837,14 @@ private bool isWindows10() /// and the icon in title bar will become gray when set to true. /// /// + [SupportedOSPlatform("macOS")] public void SetDocumentEdited(bool edited) => this.CallMethod1(edited); /// /// Whether the window’s document has been edited. /// /// + [SupportedOSPlatform("macOS")] public Task IsDocumentEditedAsync() => this.GetPropertyAsync(); /// @@ -861,6 +898,8 @@ public IReadOnlyCollection MenuItems /// setting it to null will remove the menu bar. /// /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public void SetMenu(MenuItem[] menuItems) { menuItems.AddMenuItemsId(); @@ -878,6 +917,8 @@ public void SetMenu(MenuItem[] menuItems) /// /// Remove the window's menu bar. /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public void RemoveMenu() => this.CallMethod0(); /// @@ -950,6 +991,7 @@ public IReadOnlyCollection ThumbarButtons /// /// /// Whether the buttons were added successfully. + [SupportedOSPlatform("Windows")] public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) { var tcs = new TaskCompletionSource(); @@ -977,12 +1019,14 @@ public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) /// an empty region: {x: 0, y: 0, width: 0, height: 0}. /// /// + [SupportedOSPlatform("Windows")] public void SetThumbnailClip(Rectangle rectangle) => this.CallMethod1(rectangle); /// /// Sets the toolTip that is displayed when hovering over the window thumbnail in the taskbar. /// /// + [SupportedOSPlatform("Windows")] public void SetThumbnailToolTip(string tooltip) => this.CallMethod1(tooltip); /// @@ -992,11 +1036,13 @@ public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) /// If one of those properties is not set, then neither will be used. /// /// + [SupportedOSPlatform("Windows")] public void SetAppDetails(AppDetailsOptions options) => this.CallMethod1(options); /// /// Same as webContents.showDefinitionForSelection(). /// + [SupportedOSPlatform("macOS")] public void ShowDefinitionForSelection() => this.CallMethod0(); /// @@ -1006,12 +1052,16 @@ public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) /// If the menu bar is already visible, calling setAutoHideMenuBar(true) won’t hide it immediately. /// /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public void SetAutoHideMenuBar(bool hide) => this.CallMethod1(hide); /// /// Whether menu bar automatically hides itself. /// /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public Task IsMenuBarAutoHideAsync() => this.GetPropertyAsync(); /// @@ -1019,12 +1069,16 @@ public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) /// users can still bring up the menu bar by pressing the single Alt key. /// /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public void SetMenuBarVisibility(bool visible) => this.CallMethod1(visible); /// /// Whether the menu bar is visible. /// /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public Task IsMenuBarVisibleAsync() => this.GetPropertyAsync(); /// @@ -1033,6 +1087,8 @@ public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) /// Note: This API does nothing on Windows. /// /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("macOS")] public void SetVisibleOnAllWorkspaces(bool visible) => this.CallMethod1(visible); /// @@ -1041,6 +1097,8 @@ public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) /// Note: This API always returns false on Windows. /// /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("macOS")] public Task IsVisibleOnAllWorkspacesAsync() => this.GetPropertyAsync(); /// @@ -1059,12 +1117,16 @@ public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) /// On Windows it calls SetWindowDisplayAffinity with WDA_MONITOR. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetContentProtection(bool enable) => this.CallMethod1(enable); /// /// Changes whether the window can be focused. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetFocusable(bool focusable) => this.CallMethod1(focusable); /// @@ -1117,6 +1179,7 @@ public async Task> GetChildWindowsAsync() /// Controls whether to hide cursor when typing. /// /// + [SupportedOSPlatform("macOS")] public void SetAutoHideCursor(bool autoHide) => this.CallMethod1(autoHide); /// @@ -1126,6 +1189,7 @@ public async Task> GetChildWindowsAsync() /// 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 void SetVibrancy(Vibrancy type) => this.CallMethod1(type.GetDescription()); /// @@ -1144,4 +1208,4 @@ public void SetBrowserView(BrowserView browserView) // This message name does not match the default ApiBase naming convention. BridgeConnector.Socket.Emit("browserWindow-setBrowserView", Id, browserView.Id); } -} \ No newline at end of file +} diff --git a/src/ElectronNET.API/API/Clipboard.cs b/src/ElectronNET.API/API/Clipboard.cs index 5d067f6a..71b170de 100644 --- a/src/ElectronNET.API/API/Clipboard.cs +++ b/src/ElectronNET.API/API/Clipboard.cs @@ -1,5 +1,6 @@ using ElectronNET.API.Entities; using ElectronNET.API.Serialization; +using System.Runtime.Versioning; using System.Text.Json; using System.Threading.Tasks; // ReSharper disable InconsistentNaming @@ -97,6 +98,8 @@ public void WriteRTF(string text, string type = "") /// be empty strings when the bookmark is unavailable. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public Task ReadBookmarkAsync() => GetPropertyAsync(); /// @@ -109,6 +112,8 @@ public void WriteRTF(string text, string type = "") /// /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void WriteBookmark(string title, string url, string type = "") { BridgeConnector.Socket.Emit("clipboard-writeBookmark", title, url, type); @@ -120,6 +125,7 @@ public void WriteBookmark(string title, string url, string type = "") /// find pasteboard whenever the application is activated. /// /// + [SupportedOSPlatform("macOS")] public Task ReadFindTextAsync() => GetPropertyAsync(); /// @@ -127,6 +133,7 @@ public void WriteBookmark(string title, string url, string type = "") /// synchronous IPC when called from the renderer process. /// /// + [SupportedOSPlatform("macOS")] public void WriteFindText(string text) { BridgeConnector.Socket.Emit("clipboard-writeFindText", text); diff --git a/src/ElectronNET.API/API/Dialog.cs b/src/ElectronNET.API/API/Dialog.cs index 933c6ea4..d03b702b 100644 --- a/src/ElectronNET.API/API/Dialog.cs +++ b/src/ElectronNET.API/API/Dialog.cs @@ -1,5 +1,6 @@ using ElectronNET.API.Entities; using System; +using System.Runtime.Versioning; using System.Text.Json; using System.Threading.Tasks; @@ -186,6 +187,8 @@ public void ShowErrorBox(string title, string content) /// /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public Task ShowCertificateTrustDialogAsync(CertificateTrustDialogOptions options) { return ShowCertificateTrustDialogAsync(null, options); @@ -199,6 +202,8 @@ public Task ShowCertificateTrustDialogAsync(CertificateTrustDialogOptions option /// /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public Task ShowCertificateTrustDialogAsync(BrowserWindow browserWindow, CertificateTrustDialogOptions options) { var tcs = new TaskCompletionSource(); diff --git a/src/ElectronNET.API/API/Dock.cs b/src/ElectronNET.API/API/Dock.cs index 0a84b27d..91de5e03 100644 --- a/src/ElectronNET.API/API/Dock.cs +++ b/src/ElectronNET.API/API/Dock.cs @@ -1,16 +1,16 @@ -using ElectronNET.API.Entities; -using ElectronNET.API.Extensions; -using ElectronNET.API.Serialization; using System.Collections.Generic; -using System.Text.Json; +using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; +using ElectronNET.API.Entities; +using ElectronNET.API.Extensions; namespace ElectronNET.API { /// /// Control your app in the macOS dock. /// + [SupportedOSPlatform("macOS")] public sealed class Dock { private static Dock _dock; diff --git a/src/ElectronNET.API/API/Entities/BrowserWindowOptions.cs b/src/ElectronNET.API/API/Entities/BrowserWindowOptions.cs index 5f3e92fe..8677aeb0 100644 --- a/src/ElectronNET.API/API/Entities/BrowserWindowOptions.cs +++ b/src/ElectronNET.API/API/Entities/BrowserWindowOptions.cs @@ -126,6 +126,11 @@ public class BrowserWindowOptions /// public bool SkipTaskbar { get; set; } + /// + /// Determines if Blazor is used. Will disable "module" and "process" globals. Default is false. + /// + public bool IsRunningBlazor { get; set; } + /// /// The kiosk mode. Default is false. /// diff --git a/src/ElectronNET.API/API/Entities/NotificationOptions.cs b/src/ElectronNET.API/API/Entities/NotificationOptions.cs index ce9fb680..4093f523 100644 --- a/src/ElectronNET.API/API/Entities/NotificationOptions.cs +++ b/src/ElectronNET.API/API/Entities/NotificationOptions.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime.Versioning; using System.Text.Json.Serialization; namespace ElectronNET.API.Entities @@ -43,6 +44,8 @@ public class NotificationOptions /// /// The timeout duration of the notification. Can be 'default' or 'never'. /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public string TimeoutType { get; set; } /// @@ -58,6 +61,7 @@ public class NotificationOptions /// /// The urgency level of the notification. Can be 'normal', 'critical', or 'low'. /// + [SupportedOSPlatform("Linux")] public string Urgency { get; set; } /// @@ -127,6 +131,7 @@ public class NotificationOptions /// The string the user entered into the inline reply field /// [JsonIgnore] + [SupportedOSPlatform("macOS")] public Action OnReply { get; set; } /// @@ -142,6 +147,7 @@ public class NotificationOptions /// macOS only - The index of the action that was activated /// [JsonIgnore] + [SupportedOSPlatform("macOS")] public Action OnAction { get; set; } /// @@ -164,4 +170,4 @@ public NotificationOptions(string title, string body) Body = body; } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.API/API/NativeTheme.cs b/src/ElectronNET.API/API/NativeTheme.cs index c817b9d8..152456e0 100644 --- a/src/ElectronNET.API/API/NativeTheme.cs +++ b/src/ElectronNET.API/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; @@ -120,12 +121,16 @@ public void SetThemeSource(ThemeSourceMode themeSourceMode) /// A for if the OS / Chromium currently has high-contrast mode enabled or is /// being instructed to show a high-contrast UI. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public Task ShouldUseHighContrastColorsAsync() => GetPropertyAsync(); /// /// A for if the OS / Chromium currently has an inverted color scheme or is /// being instructed to use an inverted color scheme. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public Task ShouldUseInvertedColorSchemeAsync() => GetPropertyAsync(); /// @@ -138,4 +143,4 @@ public event Action Updated remove => RemoveEvent(value, GetHashCode()); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.API/API/PowerMonitor.cs b/src/ElectronNET.API/API/PowerMonitor.cs index 51ae2818..d2285ed6 100644 --- a/src/ElectronNET.API/API/PowerMonitor.cs +++ b/src/ElectronNET.API/API/PowerMonitor.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime.Versioning; // ReSharper disable InconsistentNaming @@ -15,6 +16,8 @@ public sealed class PowerMonitor: ApiBase /// /// Emitted when the system is about to lock the screen. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnLockScreen { add => AddEvent(value); @@ -24,6 +27,8 @@ public event Action OnLockScreen /// /// Emitted when the system is about to unlock the screen. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnUnLockScreen { add => AddEvent(value); @@ -51,6 +56,8 @@ public event Action OnResume /// /// Emitted when the system changes to AC power. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnAC { add => AddEvent(value); @@ -60,6 +67,8 @@ public event Action OnAC /// /// Emitted when system changes to battery power. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnBattery { add => AddEvent(value); @@ -72,6 +81,8 @@ public event Action OnBattery /// 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 => AddEvent(value); @@ -104,4 +115,4 @@ internal static PowerMonitor Instance } } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.API/API/Screen.cs b/src/ElectronNET.API/API/Screen.cs index 8c2b5cb0..5b592b72 100644 --- a/src/ElectronNET.API/API/Screen.cs +++ b/src/ElectronNET.API/API/Screen.cs @@ -1,6 +1,7 @@ using ElectronNET.API.Entities; using System; using System.Linq; +using System.Runtime.Versioning; using System.Text.Json; using System.Threading.Tasks; using ElectronNET.API.Serialization; @@ -107,6 +108,7 @@ internal static Screen Instance /// macOS: The height of the menu bar in pixels. /// /// The height of the menu bar in pixels. + [SupportedOSPlatform("macOS")] public Task GetMenuBarWorkAreaAsync() => GetPropertyAsync(); /// diff --git a/src/ElectronNET.API/API/Shell.cs b/src/ElectronNET.API/API/Shell.cs index 14bfcbcb..0f9fe7b9 100644 --- a/src/ElectronNET.API/API/Shell.cs +++ b/src/ElectronNET.API/API/Shell.cs @@ -1,8 +1,7 @@ +using System.Runtime.Versioning; +using System.Threading.Tasks; using ElectronNET.API.Entities; using ElectronNET.API.Extensions; -using ElectronNET.API.Serialization; -using System.Text.Json; -using System.Threading.Tasks; namespace ElectronNET.API { @@ -133,6 +132,7 @@ public void Beep() /// Default is /// Structure of a shortcut. /// Whether the shortcut was created successfully. + [SupportedOSPlatform("Windows")] public Task WriteShortcutLinkAsync(string shortcutPath, ShortcutLinkOperation operation, ShortcutDetails options) { var tcs = new TaskCompletionSource(); @@ -149,6 +149,7 @@ public Task WriteShortcutLinkAsync(string shortcutPath, ShortcutLinkOperat /// /// The path tot the shortcut. /// of the shortcut. + [SupportedOSPlatform("Windows")] public Task ReadShortcutLinkAsync(string shortcutPath) { var tcs = new TaskCompletionSource(); diff --git a/src/ElectronNET.API/API/Tray.cs b/src/ElectronNET.API/API/Tray.cs index a18b178e..297258be 100644 --- a/src/ElectronNET.API/API/Tray.cs +++ b/src/ElectronNET.API/API/Tray.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Versioning; using System.Text.Json; using System.Threading.Tasks; using ElectronNET.API.Serialization; @@ -56,6 +57,8 @@ public event Action OnClick /// /// macOS, Windows: Emitted when the tray icon is right clicked. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnRightClick { add @@ -90,6 +93,8 @@ public event Action OnRightClick /// /// macOS, Windows: Emitted when the tray icon is double clicked. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnDoubleClick { add @@ -124,6 +129,7 @@ public event Action OnDoubleClick /// /// Windows: Emitted when the tray balloon shows. /// + [SupportedOSPlatform("Windows")] public event Action OnBalloonShow { add => AddEvent(value, GetHashCode()); @@ -133,6 +139,7 @@ public event Action OnBalloonShow /// /// Windows: Emitted when the tray balloon is clicked. /// + [SupportedOSPlatform("Windows")] public event Action OnBalloonClick { add => AddEvent(value, GetHashCode()); @@ -143,6 +150,7 @@ public event Action OnBalloonClick /// Windows: Emitted when the tray balloon is closed /// because of timeout or user manually closes it. /// + [SupportedOSPlatform("Windows")] public event Action OnBalloonClosed { add => AddEvent(value, GetHashCode()); @@ -248,6 +256,7 @@ public async Task SetImage(string image) /// Sets the image associated with this tray icon when pressed on macOS. /// /// + [SupportedOSPlatform("macOS")] public async Task SetPressedImage(string image) { await BridgeConnector.Socket.Emit("tray-setPressedImage", image).ConfigureAwait(false); @@ -266,6 +275,7 @@ public async Task SetToolTip(string toolTip) /// macOS: Sets the title displayed aside of the tray icon in the status bar. /// /// + [SupportedOSPlatform("macOS")] public async Task SetTitle(string title) { await BridgeConnector.Socket.Emit("tray-setTitle", title).ConfigureAwait(false); @@ -275,6 +285,7 @@ public async Task SetTitle(string title) /// Windows: Displays a tray balloon. /// /// + [SupportedOSPlatform("Windows")] public async Task DisplayBalloon(DisplayBalloonOptions options) { await BridgeConnector.Socket.Emit("tray-displayBalloon", options).ConfigureAwait(false); diff --git a/src/ElectronNET.API/ElectronNetRuntime.cs b/src/ElectronNET.API/ElectronNetRuntime.cs index 8fd0f0b0..950ceff1 100644 --- a/src/ElectronNET.API/ElectronNetRuntime.cs +++ b/src/ElectronNET.API/ElectronNetRuntime.cs @@ -24,6 +24,8 @@ static ElectronNetRuntime() StartupManager.Initialize(); } + public static string ElectronExtraArguments { get; set; } + public static int? ElectronSocketPort { get; internal set; } public static int? AspNetWebPort { get; internal set; } diff --git a/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs b/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs index 8e1633dd..70591674 100644 --- a/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs +++ b/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs @@ -40,7 +40,7 @@ protected override Task StartCore() { var isUnPacked = ElectronNetRuntime.StartupMethod.IsUnpackaged(); var electronBinaryName = ElectronNetRuntime.ElectronExecutable; - var args = Environment.CommandLine; + var args = string.Format("{0} {1}", ElectronNetRuntime.ElectronExtraArguments, Environment.CommandLine).Trim(); this.port = ElectronNetRuntime.ElectronSocketPort; if (!this.port.HasValue) @@ -49,10 +49,15 @@ protected override Task StartCore() ElectronNetRuntime.ElectronSocketPort = this.port; } + Console.Error.WriteLine("[StartCore]: isUnPacked: {0}", isUnPacked); + Console.Error.WriteLine("[StartCore]: electronBinaryName: {0}", electronBinaryName); + Console.Error.WriteLine("[StartCore]: args: {0}", args); + this.electronProcess = new ElectronProcessActive(isUnPacked, electronBinaryName, args, this.port.Value); this.electronProcess.Ready += this.ElectronProcess_Ready; this.electronProcess.Stopped += this.ElectronProcess_Stopped; + Console.Error.WriteLine("[StartCore]: Before Start"); return this.electronProcess.Start(); } @@ -82,11 +87,11 @@ private void ElectronProcess_Stopped(object sender, EventArgs e) private void HandleStopped() { - if (this.socketBridge.State != LifetimeState.Stopped) + if (this.socketBridge != null && this.socketBridge.State != LifetimeState.Stopped) { this.socketBridge.Stop(); } - else if (this.electronProcess.State != LifetimeState.Stopped) + else if (this.electronProcess != null && this.electronProcess.State != LifetimeState.Stopped) { this.electronProcess.Stop(); } diff --git a/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessActive.cs b/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessActive.cs index 297c17c5..b73ee445 100644 --- a/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessActive.cs +++ b/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessActive.cs @@ -5,6 +5,7 @@ using System; using System.ComponentModel; using System.IO; + using System.Runtime.InteropServices; using System.Threading.Tasks; /// @@ -42,6 +43,11 @@ protected override Task StartCore() var electrondir = Path.Combine(dir.FullName, ".electron"); startCmd = Path.Combine(electrondir, "node_modules", "electron", "dist", "electron"); + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + startCmd = Path.Combine(electrondir, "node_modules", "electron", "dist", "Electron.app", "Contents", "MacOS", "Electron"); + } + args = $"main.js -unpackeddotnet --trace-warnings -electronforcedport={this.socketPort:D} " + this.extraArguments; workingDir = electrondir; } @@ -68,22 +74,40 @@ protected override Task StopCore() private async Task StartInternal(string startCmd, string args, string directoriy) { - await Task.Delay(10).ConfigureAwait(false); + try + { + await Task.Delay(10).ConfigureAwait(false); - this.process = new ProcessRunner("ElectronRunner"); - this.process.ProcessExited += this.Process_Exited; - this.process.Run(startCmd, args, directoriy); + Console.Error.WriteLine("[StartInternal]: startCmd: {0}", startCmd); + Console.Error.WriteLine("[StartInternal]: args: {0}", args); - await Task.Delay(500).ConfigureAwait(false); + this.process = new ProcessRunner("ElectronRunner"); + this.process.ProcessExited += this.Process_Exited; + this.process.Run(startCmd, args, directoriy); - if (!this.process.IsRunning) - { - Task.Run(() => this.TransitionState(LifetimeState.Stopped)); + await Task.Delay(500).ConfigureAwait(false); - throw new Exception("Failed to launch the Electron process."); - } + Console.Error.WriteLine("[StartInternal]: adter run:"); + + if (!this.process.IsRunning) + { + Console.Error.WriteLine("[StartInternal]: Process is not running: " + this.process.StandardError); + Console.Error.WriteLine("[StartInternal]: Process is not running: " + this.process.StandardOutput); - this.TransitionState(LifetimeState.Ready); + Task.Run(() => this.TransitionState(LifetimeState.Stopped)); + + throw new Exception("Failed to launch the Electron process."); + } + + this.TransitionState(LifetimeState.Ready); + } + catch (Exception ex) + { + Console.Error.WriteLine("[StartInternal]: Exception: " + this.process?.StandardError); + Console.Error.WriteLine("[StartInternal]: Exception: " + this.process?.StandardOutput); + Console.Error.WriteLine("[StartInternal]: Exception: " + ex); + throw; + } } private void Process_Exited(object sender, EventArgs e) diff --git a/src/ElectronNET.API/Runtime/StartupManager.cs b/src/ElectronNET.API/Runtime/StartupManager.cs index 607d58b9..125b6dee 100644 --- a/src/ElectronNET.API/Runtime/StartupManager.cs +++ b/src/ElectronNET.API/Runtime/StartupManager.cs @@ -132,13 +132,19 @@ private BuildInfo GatherBuildInfo() if (electronAssembly == null) { + Console.WriteLine("GatherBuildInfo: Early exit"); return buildInfo; } if (electronAssembly.GetName().Name == "testhost" || electronAssembly.GetName().Name == "ReSharperTestRunner") { + Console.WriteLine("GatherBuildInfo: Detected testhost"); electronAssembly = AppDomain.CurrentDomain.GetData("ElectronTestAssembly") as Assembly ?? electronAssembly; } + else + { + Console.WriteLine("GatherBuildInfo: No testhost detected: " + electronAssembly.GetName().Name); + } var attributes = electronAssembly.GetCustomAttributes().ToList(); diff --git a/src/ElectronNET.ConsoleApp/ElectronNET.ConsoleApp.csproj b/src/ElectronNET.ConsoleApp/ElectronNET.ConsoleApp.csproj index 731744f8..2cbaa937 100644 --- a/src/ElectronNET.ConsoleApp/ElectronNET.ConsoleApp.csproj +++ b/src/ElectronNET.ConsoleApp/ElectronNET.ConsoleApp.csproj @@ -69,7 +69,7 @@ - + diff --git a/src/ElectronNET.Host/api/autoUpdater.js.map b/src/ElectronNET.Host/api/autoUpdater.js.map index d4c8e43e..d5eeed11 100644 --- a/src/ElectronNET.Host/api/autoUpdater.js.map +++ b/src/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/src/ElectronNET.Host/api/browserView.js.map b/src/ElectronNET.Host/api/browserView.js.map index a61597d3..9409e77b 100644 --- a/src/ElectronNET.Host/api/browserView.js.map +++ b/src/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":";;;AACA,uCAAuC;AACvC,MAAM,YAAY,GAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAkB,CAAC;AAC7G,IAAI,WAAwB,EAAE,cAAc,CAAC;AAC7C,MAAM,qBAAqB,GAAgC,CAAC,MAAM,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAgC,CAAC;AAEpK,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,EAAE;IACtC,cAAc,GAAG,MAAM,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE;QACvC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACjE,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,CAAC;QACjG,CAAC;QAED,WAAW,GAAG,IAAI,sBAAW,CAAC,OAAO,CAAC,CAAC;QACvC,WAAW,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAE5C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAC,UAAU,EAAE,OAAO,CAAC,KAAK,EAAC,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC5C,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACpE,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE/B,cAAc,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAElD,cAAc,CAAC,IAAI,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;QAC/C,kBAAkB,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QACnD,kBAAkB,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;QACtD,kBAAkB,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,UAAU;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAeO,wCAAc;AAbvB,MAAM,yBAAyB,GAAG,CAAC,aAAqB,EAAe,EAAE;IACrE,OAAO,kBAAkB,CAAC,aAAa,CAAC,CAAC;AAC7C,CAAC,CAAC;AAWuB,8DAAyB;AATlD,SAAS,kBAAkB,CAAC,EAAU;IAClC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACvD,MAAM,eAAe,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YAC/B,OAAO,eAAe,CAAC;QAC3B,CAAC;IACL,CAAC;AACL,CAAC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/browserWindows.js b/src/ElectronNET.Host/api/browserWindows.js index f229a438..2e6d14ec 100644 --- a/src/ElectronNET.Host/api/browserWindows.js +++ b/src/ElectronNET.Host/api/browserWindows.js @@ -1,179 +1,197 @@ "use strict"; const electron_1 = require("electron"); const browserView_1 = require("./browserView"); -const path = require('path'); -const windows = (global['browserWindows'] = global['browserWindows'] || []); +const path = require("path"); +const windows = (global["browserWindows"] = + global["browserWindows"] || []); let readyToShowWindowsIds = []; let window, lastOptions, electronSocket; let mainWindowURL; -const proxyToCredentialsMap = (global['proxyToCredentialsMap'] = global['proxyToCredentialsMap'] || []); +const proxyToCredentialsMap = (global["proxyToCredentialsMap"] = global["proxyToCredentialsMap"] || []); module.exports = (socket, app) => { electronSocket = socket; - app.on('login', (event, webContents, request, authInfo, callback) => { + 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) { + if (proxy in proxyToCredentialsMap && + proxyToCredentialsMap[proxy].split(":").length === 2) { event.preventDefault(); - let user = proxyToCredentialsMap[proxy].split(':')[0]; - let pass = proxyToCredentialsMap[proxy].split(':')[1]; + let user = proxyToCredentialsMap[proxy].split(":")[0]; + let pass = proxyToCredentialsMap[proxy].split(":")[1]; callback(user, pass); } } }); - socket.on('register-browserWindow-ready-to-show', (id) => { + 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); + readyToShowWindowsIds = readyToShowWindowsIds.filter((value) => value !== id); + electronSocket.emit("browserWindow-ready-to-show" + id); } - getWindowById(id).on('ready-to-show', () => { + getWindowById(id).on("ready-to-show", () => { readyToShowWindowsIds.push(id); - electronSocket.emit('browserWindow-ready-to-show' + id); + electronSocket.emit("browserWindow-ready-to-show" + 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.on("register-browserWindow-page-title-updated", (id) => { + getWindowById(id).on("page-title-updated", (event, title) => { + electronSocket.emit("browserWindow-page-title-updated" + id, title); }); }); - socket.on('register-browserWindow-close', (id) => { - getWindowById(id).on('close', () => { - electronSocket.emit('browserWindow-close' + id); + socket.on("register-browserWindow-close", (id) => { + getWindowById(id).on("close", () => { + electronSocket.emit("browserWindow-close" + id); }); }); - socket.on('register-browserWindow-closed', (id) => { - getWindowById(id).on('closed', () => { - electronSocket.emit('browserWindow-closed' + id); + socket.on("register-browserWindow-closed", (id) => { + getWindowById(id).on("closed", () => { + electronSocket.emit("browserWindow-closed" + id); }); }); - socket.on('register-browserWindow-session-end', (id) => { - getWindowById(id).on('session-end', () => { - electronSocket.emit('browserWindow-session-end' + id); + socket.on("register-browserWindow-session-end", (id) => { + getWindowById(id).on("session-end", () => { + electronSocket.emit("browserWindow-session-end" + id); }); }); - socket.on('register-browserWindow-unresponsive', (id) => { - getWindowById(id).on('unresponsive', () => { - electronSocket.emit('browserWindow-unresponsive' + id); + socket.on("register-browserWindow-unresponsive", (id) => { + getWindowById(id).on("unresponsive", () => { + electronSocket.emit("browserWindow-unresponsive" + id); }); }); - socket.on('register-browserWindow-responsive', (id) => { - getWindowById(id).on('responsive', () => { - electronSocket.emit('browserWindow-responsive' + id); + socket.on("register-browserWindow-responsive", (id) => { + getWindowById(id).on("responsive", () => { + electronSocket.emit("browserWindow-responsive" + id); }); }); - socket.on('register-browserWindow-blur', (id) => { - getWindowById(id).on('blur', () => { - electronSocket.emit('browserWindow-blur' + id); + socket.on("register-browserWindow-blur", (id) => { + getWindowById(id).on("blur", () => { + electronSocket.emit("browserWindow-blur" + id); }); }); - socket.on('register-browserWindow-focus', (id) => { - getWindowById(id).on('focus', () => { - electronSocket.emit('browserWindow-focus' + id); + socket.on("register-browserWindow-focus", (id) => { + getWindowById(id).on("focus", () => { + electronSocket.emit("browserWindow-focus" + id); }); }); - socket.on('register-browserWindow-show', (id) => { - getWindowById(id).on('show', () => { - electronSocket.emit('browserWindow-show' + id); + socket.on("register-browserWindow-show", (id) => { + getWindowById(id).on("show", () => { + electronSocket.emit("browserWindow-show" + id); }); }); - socket.on('register-browserWindow-hide', (id) => { - getWindowById(id).on('hide', () => { - electronSocket.emit('browserWindow-hide' + id); + socket.on("register-browserWindow-hide", (id) => { + getWindowById(id).on("hide", () => { + electronSocket.emit("browserWindow-hide" + id); }); }); - socket.on('register-browserWindow-maximize', (id) => { - getWindowById(id).on('maximize', () => { - electronSocket.emit('browserWindow-maximize' + id); + socket.on("register-browserWindow-maximize", (id) => { + getWindowById(id).on("maximize", () => { + electronSocket.emit("browserWindow-maximize" + id); }); }); - socket.on('register-browserWindow-unmaximize', (id) => { - getWindowById(id).on('unmaximize', () => { - electronSocket.emit('browserWindow-unmaximize' + id); + socket.on("register-browserWindow-unmaximize", (id) => { + getWindowById(id).on("unmaximize", () => { + electronSocket.emit("browserWindow-unmaximize" + id); }); }); - socket.on('register-browserWindow-minimize', (id) => { - getWindowById(id).on('minimize', () => { - electronSocket.emit('browserWindow-minimize' + id); + socket.on("register-browserWindow-minimize", (id) => { + getWindowById(id).on("minimize", () => { + electronSocket.emit("browserWindow-minimize" + id); }); }); - socket.on('register-browserWindow-restore', (id) => { - getWindowById(id).on('restore', () => { - electronSocket.emit('browserWindow-restore' + id); + socket.on("register-browserWindow-restore", (id) => { + getWindowById(id).on("restore", () => { + electronSocket.emit("browserWindow-restore" + id); }); }); - socket.on('register-browserWindow-resize', (id) => { - getWindowById(id).on('resize', () => { - electronSocket.emit('browserWindow-resize' + id); + socket.on("register-browserWindow-resize", (id) => { + getWindowById(id).on("resize", () => { + electronSocket.emit("browserWindow-resize" + id); }); }); - socket.on('register-browserWindow-move', (id) => { - getWindowById(id).on('move', () => { - electronSocket.emit('browserWindow-move' + id); + socket.on("register-browserWindow-move", (id) => { + getWindowById(id).on("move", () => { + electronSocket.emit("browserWindow-move" + id); }); }); - socket.on('register-browserWindow-moved', (id) => { - getWindowById(id).on('moved', () => { - electronSocket.emit('browserWindow-moved' + id); + socket.on("register-browserWindow-moved", (id) => { + getWindowById(id).on("moved", () => { + electronSocket.emit("browserWindow-moved" + id); }); }); - socket.on('register-browserWindow-enter-full-screen', (id) => { - getWindowById(id).on('enter-full-screen', () => { - electronSocket.emit('browserWindow-enter-full-screen' + id); + socket.on("register-browserWindow-enter-full-screen", (id) => { + getWindowById(id).on("enter-full-screen", () => { + electronSocket.emit("browserWindow-enter-full-screen" + id); }); }); - socket.on('register-browserWindow-leave-full-screen', (id) => { - getWindowById(id).on('leave-full-screen', () => { - electronSocket.emit('browserWindow-leave-full-screen' + id); + socket.on("register-browserWindow-leave-full-screen", (id) => { + getWindowById(id).on("leave-full-screen", () => { + electronSocket.emit("browserWindow-leave-full-screen" + 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.on("register-browserWindow-enter-html-full-screen", (id) => { + getWindowById(id).on("enter-html-full-screen", () => { + electronSocket.emit("browserWindow-enter-html-full-screen" + 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.on("register-browserWindow-leave-html-full-screen", (id) => { + getWindowById(id).on("leave-html-full-screen", () => { + electronSocket.emit("browserWindow-leave-html-full-screen" + id); }); }); - socket.on('register-browserWindow-app-command', (id) => { - getWindowById(id).on('app-command', (event, command) => { - electronSocket.emit('browserWindow-app-command' + id, command); + socket.on("register-browserWindow-app-command", (id) => { + getWindowById(id).on("app-command", (event, command) => { + electronSocket.emit("browserWindow-app-command" + id, command); }); }); - socket.on('register-browserWindow-swipe', (id) => { - getWindowById(id).on('swipe', (event, direction) => { - electronSocket.emit('browserWindow-swipe' + id, direction); + socket.on("register-browserWindow-swipe", (id) => { + getWindowById(id).on("swipe", (event, direction) => { + electronSocket.emit("browserWindow-swipe" + id, direction); }); }); - socket.on('register-browserWindow-sheet-begin', (id) => { - getWindowById(id).on('sheet-begin', () => { - electronSocket.emit('browserWindow-sheet-begin' + id); + socket.on("register-browserWindow-sheet-begin", (id) => { + getWindowById(id).on("sheet-begin", () => { + electronSocket.emit("browserWindow-sheet-begin" + id); }); }); - socket.on('register-browserWindow-sheet-end', (id) => { - getWindowById(id).on('sheet-end', () => { - electronSocket.emit('browserWindow-sheet-end' + id); + socket.on("register-browserWindow-sheet-end", (id) => { + getWindowById(id).on("sheet-end", () => { + electronSocket.emit("browserWindow-sheet-end" + 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.on("register-browserWindow-new-window-for-tab", (id) => { + getWindowById(id).on("new-window-for-tab", () => { + electronSocket.emit("browserWindow-new-window-for-tab" + id); }); }); - socket.on('createBrowserWindow', (options, loadUrl) => { - if (options.webPreferences && !('nodeIntegration' in options.webPreferences)) { - options = { ...options, webPreferences: { ...options.webPreferences, nodeIntegration: true, contextIsolation: false } }; + socket.on("createBrowserWindow", (options, loadUrl) => { + if (options.webPreferences && + !("nodeIntegration" in options.webPreferences)) { + 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.isRunningBlazor) { + options.webPreferences["preload"] = path.join(__dirname, "..", "scripts", "blazor-preload.js"); } + delete options.isRunningBlazor; // we dont want to recreate the window when watch is ready. - if (app.commandLine.hasSwitch('watch') && app['mainWindowURL'] === loadUrl) { - window = app['mainWindow']; + if (app.commandLine.hasSwitch("watch") && + app["mainWindowURL"] === loadUrl) { + window = app["mainWindow"]; if (window) { window.reload(); windows.push(window); - electronSocket.emit('BrowserWindowCreated', window.id); + electronSocket.emit("BrowserWindowCreated", window.id); return; } } @@ -186,32 +204,32 @@ module.exports = (socket, app) => { if (options.proxy && options.proxyCredentials) { proxyToCredentialsMap[options.proxy] = options.proxyCredentials; } - window.on('ready-to-show', () => { + window.on("ready-to-show", () => { if (readyToShowWindowsIds.includes(window.id)) { - readyToShowWindowsIds = readyToShowWindowsIds.filter(value => value !== window.id); + readyToShowWindowsIds = readyToShowWindowsIds.filter((value) => value !== window.id); } else { readyToShowWindowsIds.push(window.id); } }); lastOptions = options; - window.on('closed', (sender) => { + 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') { + if (error.message === "Object has been destroyed") { windows.splice(index, 1); const ids = []; - windows.forEach(x => ids.push(x.id)); - electronSocket.emit('BrowserWindowClosed', ids); + windows.forEach((x) => ids.push(x.id)); + electronSocket.emit("BrowserWindowClosed", ids); } } } }); - app.on('activate', () => { + 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) { @@ -221,204 +239,204 @@ module.exports = (socket, app) => { if (loadUrl) { window.loadURL(loadUrl); } - if (app.commandLine.hasSwitch('clear-cache') && - app.commandLine.getSwitchValue('clear-cache')) { + if (app.commandLine.hasSwitch("clear-cache") && + app.commandLine.getSwitchValue("clear-cache")) { window.webContents.session.clearCache(); - console.log('auto clear-cache active for new window.'); + console.log("auto clear-cache active for new window."); } // set main window url - if (app['mainWindowURL'] == undefined || app['mainWindowURL'] == "") { - app['mainWindowURL'] = loadUrl; - app['mainWindow'] = window; + if (app["mainWindowURL"] == undefined || app["mainWindowURL"] == "") { + app["mainWindowURL"] = loadUrl; + app["mainWindow"] = window; } windows.push(window); - electronSocket.emit('BrowserWindowCreated', window.id); + electronSocket.emit("BrowserWindowCreated", window.id); }); - socket.on('browserWindowDestroy', (id) => { + socket.on("browserWindowDestroy", (id) => { getWindowById(id).destroy(); }); - socket.on('browserWindowClose', (id) => { + socket.on("browserWindowClose", (id) => { getWindowById(id).close(); }); - socket.on('browserWindowFocus', (id) => { + socket.on("browserWindowFocus", (id) => { getWindowById(id).focus(); }); - socket.on('browserWindowBlur', (id) => { + socket.on("browserWindowBlur", (id) => { getWindowById(id).blur(); }); - socket.on('browserWindowIsFocused', (id) => { + socket.on("browserWindowIsFocused", (id) => { const isFocused = getWindowById(id).isFocused(); - electronSocket.emit('browserWindow-isFocused-completed', isFocused); + electronSocket.emit("browserWindow-isFocused-completed", isFocused); }); - socket.on('browserWindowIsDestroyed', (id) => { + socket.on("browserWindowIsDestroyed", (id) => { const isDestroyed = getWindowById(id).isDestroyed(); - electronSocket.emit('browserWindow-isDestroyed-completed', isDestroyed); + electronSocket.emit("browserWindow-isDestroyed-completed", isDestroyed); }); - socket.on('browserWindowShow', (id) => { + socket.on("browserWindowShow", (id) => { getWindowById(id).show(); }); - socket.on('browserWindowShowInactive', (id) => { + socket.on("browserWindowShowInactive", (id) => { getWindowById(id).showInactive(); }); - socket.on('browserWindowHide', (id) => { + socket.on("browserWindowHide", (id) => { getWindowById(id).hide(); }); - socket.on('browserWindowIsVisible', (id) => { + socket.on("browserWindowIsVisible", (id) => { const isVisible = getWindowById(id).isVisible(); - electronSocket.emit('browserWindow-isVisible-completed', isVisible); + electronSocket.emit("browserWindow-isVisible-completed", isVisible); }); - socket.on('browserWindowIsModal', (id) => { + socket.on("browserWindowIsModal", (id) => { const isModal = getWindowById(id).isModal(); - electronSocket.emit('browserWindow-isModal-completed', isModal); + electronSocket.emit("browserWindow-isModal-completed", isModal); }); - socket.on('browserWindowMaximize', (id) => { + socket.on("browserWindowMaximize", (id) => { getWindowById(id).maximize(); }); - socket.on('browserWindowUnmaximize', (id) => { + socket.on("browserWindowUnmaximize", (id) => { getWindowById(id).unmaximize(); }); - socket.on('browserWindowIsMaximized', (id) => { + socket.on("browserWindowIsMaximized", (id) => { const isMaximized = getWindowById(id).isMaximized(); - electronSocket.emit('browserWindow-isMaximized-completed', isMaximized); + electronSocket.emit("browserWindow-isMaximized-completed", isMaximized); }); - socket.on('browserWindowMinimize', (id) => { + socket.on("browserWindowMinimize", (id) => { getWindowById(id).minimize(); }); - socket.on('browserWindowRestore', (id) => { + socket.on("browserWindowRestore", (id) => { getWindowById(id).restore(); }); - socket.on('browserWindowIsMinimized', (id) => { + socket.on("browserWindowIsMinimized", (id) => { const isMinimized = getWindowById(id).isMinimized(); - electronSocket.emit('browserWindow-isMinimized-completed', isMinimized); + electronSocket.emit("browserWindow-isMinimized-completed", isMinimized); }); - socket.on('browserWindowSetFullScreen', (id, fullscreen) => { + socket.on("browserWindowSetFullScreen", (id, fullscreen) => { getWindowById(id).setFullScreen(fullscreen); }); - socket.on('browserWindowIsFullScreen', (id) => { + socket.on("browserWindowIsFullScreen", (id) => { const isFullScreen = getWindowById(id).isFullScreen(); - electronSocket.emit('browserWindow-isFullScreen-completed', isFullScreen); + electronSocket.emit("browserWindow-isFullScreen-completed", isFullScreen); }); - socket.on('browserWindowSetAspectRatio', (id, aspectRatio, extraSize) => { + socket.on("browserWindowSetAspectRatio", (id, aspectRatio, extraSize) => { getWindowById(id).setAspectRatio(aspectRatio, extraSize); }); - socket.on('browserWindowPreviewFile', (id, path, displayname) => { + socket.on("browserWindowPreviewFile", (id, path, displayname) => { getWindowById(id).previewFile(path, displayname); }); - socket.on('browserWindowCloseFilePreview', (id) => { + socket.on("browserWindowCloseFilePreview", (id) => { getWindowById(id).closeFilePreview(); }); - socket.on('browserWindowSetBounds', (id, bounds, animate) => { + socket.on("browserWindowSetBounds", (id, bounds, animate) => { getWindowById(id).setBounds(bounds, animate); }); - socket.on('browserWindowGetBounds', (id) => { + socket.on("browserWindowGetBounds", (id) => { const rectangle = getWindowById(id).getBounds(); - electronSocket.emit('browserWindow-getBounds-completed', rectangle); + electronSocket.emit("browserWindow-getBounds-completed", rectangle); }); - socket.on('browserWindowSetContentBounds', (id, bounds, animate) => { + socket.on("browserWindowSetContentBounds", (id, bounds, animate) => { getWindowById(id).setContentBounds(bounds, animate); }); - socket.on('browserWindowGetContentBounds', (id) => { + socket.on("browserWindowGetContentBounds", (id) => { const rectangle = getWindowById(id).getContentBounds(); - electronSocket.emit('browserWindow-getContentBounds-completed', rectangle); + electronSocket.emit("browserWindow-getContentBounds-completed", rectangle); }); - socket.on('browserWindowSetSize', (id, width, height, animate) => { + socket.on("browserWindowSetSize", (id, width, height, animate) => { getWindowById(id).setSize(width, height, animate); }); - socket.on('browserWindowGetSize', (id) => { + socket.on("browserWindowGetSize", (id) => { const size = getWindowById(id).getSize(); - electronSocket.emit('browserWindow-getSize-completed', size); + electronSocket.emit("browserWindow-getSize-completed", size); }); - socket.on('browserWindowSetContentSize', (id, width, height, animate) => { + socket.on("browserWindowSetContentSize", (id, width, height, animate) => { getWindowById(id).setContentSize(width, height, animate); }); - socket.on('browserWindowGetContentSize', (id) => { + socket.on("browserWindowGetContentSize", (id) => { const size = getWindowById(id).getContentSize(); - electronSocket.emit('browserWindow-getContentSize-completed', size); + electronSocket.emit("browserWindow-getContentSize-completed", size); }); - socket.on('browserWindowSetMinimumSize', (id, width, height) => { + socket.on("browserWindowSetMinimumSize", (id, width, height) => { getWindowById(id).setMinimumSize(width, height); }); - socket.on('browserWindowGetMinimumSize', (id) => { + socket.on("browserWindowGetMinimumSize", (id) => { const size = getWindowById(id).getMinimumSize(); - electronSocket.emit('browserWindow-getMinimumSize-completed', size); + electronSocket.emit("browserWindow-getMinimumSize-completed", size); }); - socket.on('browserWindowSetMaximumSize', (id, width, height) => { + socket.on("browserWindowSetMaximumSize", (id, width, height) => { getWindowById(id).setMaximumSize(width, height); }); - socket.on('browserWindowGetMaximumSize', (id) => { + socket.on("browserWindowGetMaximumSize", (id) => { const size = getWindowById(id).getMaximumSize(); - electronSocket.emit('browserWindow-getMaximumSize-completed', size); + electronSocket.emit("browserWindow-getMaximumSize-completed", size); }); - socket.on('browserWindowSetResizable', (id, resizable) => { + socket.on("browserWindowSetResizable", (id, resizable) => { getWindowById(id).setResizable(resizable); }); - socket.on('browserWindowIsResizable', (id) => { + socket.on("browserWindowIsResizable", (id) => { const resizable = getWindowById(id).isResizable(); - electronSocket.emit('browserWindow-isResizable-completed', resizable); + electronSocket.emit("browserWindow-isResizable-completed", resizable); }); - socket.on('browserWindowSetMovable', (id, movable) => { + socket.on("browserWindowSetMovable", (id, movable) => { getWindowById(id).setMovable(movable); }); - socket.on('browserWindowIsMovable', (id) => { + socket.on("browserWindowIsMovable", (id) => { const movable = getWindowById(id).isMovable(); - electronSocket.emit('browserWindow-isMovable-completed', movable); + electronSocket.emit("browserWindow-isMovable-completed", movable); }); - socket.on('browserWindowSetMinimizable', (id, minimizable) => { + socket.on("browserWindowSetMinimizable", (id, minimizable) => { getWindowById(id).setMinimizable(minimizable); }); - socket.on('browserWindowIsMinimizable', (id) => { + socket.on("browserWindowIsMinimizable", (id) => { const minimizable = getWindowById(id).isMinimizable(); - electronSocket.emit('browserWindow-isMinimizable-completed', minimizable); + electronSocket.emit("browserWindow-isMinimizable-completed", minimizable); }); - socket.on('browserWindowSetMaximizable', (id, maximizable) => { + socket.on("browserWindowSetMaximizable", (id, maximizable) => { getWindowById(id).setMaximizable(maximizable); }); - socket.on('browserWindowIsMaximizable', (id) => { + socket.on("browserWindowIsMaximizable", (id) => { const maximizable = getWindowById(id).isMaximizable(); - electronSocket.emit('browserWindow-isMaximizable-completed', maximizable); + electronSocket.emit("browserWindow-isMaximizable-completed", maximizable); }); - socket.on('browserWindowSetFullScreenable', (id, fullscreenable) => { + socket.on("browserWindowSetFullScreenable", (id, fullscreenable) => { getWindowById(id).setFullScreenable(fullscreenable); }); - socket.on('browserWindowIsFullScreenable', (id) => { + socket.on("browserWindowIsFullScreenable", (id) => { const fullscreenable = getWindowById(id).isFullScreenable(); - electronSocket.emit('browserWindow-isFullScreenable-completed', fullscreenable); + electronSocket.emit("browserWindow-isFullScreenable-completed", fullscreenable); }); - socket.on('browserWindowSetClosable', (id, closable) => { + socket.on("browserWindowSetClosable", (id, closable) => { getWindowById(id).setClosable(closable); }); - socket.on('browserWindowIsClosable', (id) => { + socket.on("browserWindowIsClosable", (id) => { const closable = getWindowById(id).isClosable(); - electronSocket.emit('browserWindow-isClosable-completed', closable); + electronSocket.emit("browserWindow-isClosable-completed", closable); }); - socket.on('browserWindowSetAlwaysOnTop', (id, flag, level, relativeLevel) => { + socket.on("browserWindowSetAlwaysOnTop", (id, flag, level, relativeLevel) => { getWindowById(id).setAlwaysOnTop(flag, level, relativeLevel); }); - socket.on('browserWindowIsAlwaysOnTop', (id) => { + socket.on("browserWindowIsAlwaysOnTop", (id) => { const isAlwaysOnTop = getWindowById(id).isAlwaysOnTop(); - electronSocket.emit('browserWindow-isAlwaysOnTop-completed', isAlwaysOnTop); + electronSocket.emit("browserWindow-isAlwaysOnTop-completed", isAlwaysOnTop); }); - socket.on('browserWindowCenter', (id) => { + socket.on("browserWindowCenter", (id) => { getWindowById(id).center(); }); - socket.on('browserWindowSetPosition', (id, x, y, animate) => { + socket.on("browserWindowSetPosition", (id, x, y, animate) => { getWindowById(id).setPosition(x, y, animate); }); - socket.on('browserWindowGetPosition', (id) => { + socket.on("browserWindowGetPosition", (id) => { const position = getWindowById(id).getPosition(); - electronSocket.emit('browserWindow-getPosition-completed', position); + electronSocket.emit("browserWindow-getPosition-completed", position); }); - socket.on('browserWindowSetTitle', (id, title) => { + socket.on("browserWindowSetTitle", (id, title) => { getWindowById(id).setTitle(title); }); - socket.on('browserWindowGetTitle', (id) => { + socket.on("browserWindowGetTitle", (id) => { const title = getWindowById(id).getTitle(); - electronSocket.emit('browserWindow-getTitle-completed', title); + electronSocket.emit("browserWindow-getTitle-completed", title); }); - socket.on('browserWindowSetTitle', (id, title) => { + socket.on("browserWindowSetTitle", (id, title) => { getWindowById(id).setTitle(title); }); - socket.on('browserWindowSetSheetOffset', (id, offsetY, offsetX) => { + socket.on("browserWindowSetSheetOffset", (id, offsetY, offsetX) => { if (offsetX) { getWindowById(id).setSheetOffset(offsetY, offsetX); } @@ -426,77 +444,80 @@ module.exports = (socket, app) => { getWindowById(id).setSheetOffset(offsetY); } }); - socket.on('browserWindowFlashFrame', (id, flag) => { + socket.on("browserWindowFlashFrame", (id, flag) => { getWindowById(id).flashFrame(flag); }); - socket.on('browserWindowSetSkipTaskbar', (id, skip) => { + socket.on("browserWindowSetSkipTaskbar", (id, skip) => { getWindowById(id).setSkipTaskbar(skip); }); - socket.on('browserWindowSetKiosk', (id, flag) => { + socket.on("browserWindowSetKiosk", (id, flag) => { getWindowById(id).setKiosk(flag); }); - socket.on('browserWindowIsKiosk', (id) => { + socket.on("browserWindowIsKiosk", (id) => { const isKiosk = getWindowById(id).isKiosk(); - electronSocket.emit('browserWindow-isKiosk-completed', isKiosk); + electronSocket.emit("browserWindow-isKiosk-completed", isKiosk); }); - socket.on('browserWindowGetNativeWindowHandle', (id) => { - const nativeWindowHandle = getWindowById(id).getNativeWindowHandle().readInt32LE(0).toString(16); - electronSocket.emit('browserWindow-getNativeWindowHandle-completed', nativeWindowHandle); + socket.on("browserWindowGetNativeWindowHandle", (id) => { + const nativeWindowHandle = getWindowById(id) + .getNativeWindowHandle() + .readInt32LE(0) + .toString(16); + electronSocket.emit("browserWindow-getNativeWindowHandle-completed", nativeWindowHandle); }); - socket.on('browserWindowSetRepresentedFilename', (id, filename) => { + socket.on("browserWindowSetRepresentedFilename", (id, filename) => { const win = getWindowById(id); try { - if (win && typeof win.setRepresentedFilename === 'function') { + if (win && typeof win.setRepresentedFilename === "function") { win.setRepresentedFilename(filename); } } catch (e) { - console.warn('setRepresentedFilename failed (likely unsupported platform):', e); + console.warn("setRepresentedFilename failed (likely unsupported platform):", e); } }); - socket.on('browserWindowGetRepresentedFilename', (id) => { + socket.on("browserWindowGetRepresentedFilename", (id) => { const win = getWindowById(id); - let pathname = ''; + let pathname = ""; try { - if (win && typeof win.getRepresentedFilename === 'function') { - pathname = win.getRepresentedFilename() || ''; + if (win && typeof win.getRepresentedFilename === "function") { + pathname = win.getRepresentedFilename() || ""; } } catch (e) { - console.warn('getRepresentedFilename failed (likely unsupported platform):', e); + console.warn("getRepresentedFilename failed (likely unsupported platform):", e); } - electronSocket.emit('browserWindow-getRepresentedFilename-completed', pathname); + electronSocket.emit("browserWindow-getRepresentedFilename-completed", pathname); }); - socket.on('browserWindowSetDocumentEdited', (id, edited) => { + socket.on("browserWindowSetDocumentEdited", (id, edited) => { getWindowById(id).setDocumentEdited(edited); }); - socket.on('browserWindowIsDocumentEdited', (id) => { + socket.on("browserWindowIsDocumentEdited", (id) => { const edited = getWindowById(id).isDocumentEdited(); - electronSocket.emit('browserWindow-isDocumentEdited-completed', edited); + electronSocket.emit("browserWindow-isDocumentEdited-completed", edited); }); - socket.on('browserWindowFocusOnWebView', (id) => { + socket.on("browserWindowFocusOnWebView", (id) => { getWindowById(id).focusOnWebView(); }); - socket.on('browserWindowBlurWebView', (id) => { + socket.on("browserWindowBlurWebView", (id) => { getWindowById(id).blurWebView(); }); - socket.on('browserWindowLoadURL', (id, url, options) => { + socket.on("browserWindowLoadURL", (id, url, options) => { getWindowById(id).loadURL(url, options); }); - socket.on('browserWindowReload', (id) => { + socket.on("browserWindowReload", (id) => { getWindowById(id).reload(); }); - socket.on('browserWindowSetMenu', (id, menuItems) => { + socket.on("browserWindowSetMenu", (id, menuItems) => { let menu = null; if (menuItems) { menu = electron_1.Menu.buildFromTemplate(menuItems); addMenuItemClickConnector(menu.items, (id) => { - electronSocket.emit('windowMenuItemClicked', id); + electronSocket.emit("windowMenuItemClicked", id); }); } getWindowById(id).setMenu(menu); }); - socket.on('browserWindowRemoveMenu', (id) => { + socket.on("browserWindowRemoveMenu", (id) => { getWindowById(id).removeMenu(); }); function addMenuItemClickConnector(menuItems, callback) { @@ -504,34 +525,36 @@ module.exports = (socket, app) => { if (item.submenu && item.submenu.items.length > 0) { addMenuItemClickConnector(item.submenu.items, callback); } - if ('id' in item && item.id) { - item.click = () => { callback(item.id); }; + if ("id" in item && item.id) { + item.click = () => { + callback(item.id); + }; } }); } - socket.on('browserWindowSetProgressBar', (id, progress) => { + socket.on("browserWindowSetProgressBar", (id, progress) => { getWindowById(id).setProgressBar(progress); }); - socket.on('browserWindowSetProgressBar', (id, progress, options) => { + socket.on("browserWindowSetProgressBar", (id, progress, options) => { getWindowById(id).setProgressBar(progress, options); }); - socket.on('browserWindowSetHasShadow', (id, hasShadow) => { + socket.on("browserWindowSetHasShadow", (id, hasShadow) => { getWindowById(id).setHasShadow(hasShadow); }); - socket.on('browserWindowHasShadow', (id) => { + socket.on("browserWindowHasShadow", (id) => { const hasShadow = getWindowById(id).hasShadow(); - electronSocket.emit('browserWindow-hasShadow-completed', hasShadow); + electronSocket.emit("browserWindow-hasShadow-completed", hasShadow); }); - socket.on('browserWindowSetThumbarButtons', (id, thumbarButtons) => { - thumbarButtons.forEach(thumbarButton => { + socket.on("browserWindowSetThumbarButtons", (id, thumbarButtons) => { + thumbarButtons.forEach((thumbarButton) => { const originalIconPath = thumbarButton.icon.toString(); - const path = require('path'); - const fs = require('fs'); + const path = require("path"); + const fs = require("fs"); let imagePath = originalIconPath; if (!path.isAbsolute(originalIconPath)) { - imagePath = path.join(__dirname.replace('api', ''), 'bin', originalIconPath); + imagePath = path.join(__dirname.replace("api", ""), "bin", originalIconPath); } - const { nativeImage } = require('electron'); + const { nativeImage } = require("electron"); if (fs.existsSync(imagePath)) { thumbarButton.icon = nativeImage.createFromPath(imagePath); } @@ -540,55 +563,55 @@ module.exports = (socket, app) => { thumbarButton.icon = nativeImage.createEmpty(); } thumbarButton.click = () => { - electronSocket.emit('thumbarButtonClicked', thumbarButton['id']); + electronSocket.emit("thumbarButtonClicked", thumbarButton["id"]); }; }); const success = getWindowById(id).setThumbarButtons(thumbarButtons); - electronSocket.emit('browserWindowSetThumbarButtons-completed', success); + electronSocket.emit("browserWindowSetThumbarButtons-completed", success); }); - socket.on('browserWindowSetThumbnailClip', (id, rectangle) => { + socket.on("browserWindowSetThumbnailClip", (id, rectangle) => { getWindowById(id).setThumbnailClip(rectangle); }); - socket.on('browserWindowSetThumbnailToolTip', (id, toolTip) => { + socket.on("browserWindowSetThumbnailToolTip", (id, toolTip) => { getWindowById(id).setThumbnailToolTip(toolTip); }); - socket.on('browserWindowSetAppDetails', (id, options) => { + socket.on("browserWindowSetAppDetails", (id, options) => { getWindowById(id).setAppDetails(options); }); - socket.on('browserWindowShowDefinitionForSelection', (id) => { + socket.on("browserWindowShowDefinitionForSelection", (id) => { getWindowById(id).showDefinitionForSelection(); }); - socket.on('browserWindowSetAutoHideMenuBar', (id, hide) => { + socket.on("browserWindowSetAutoHideMenuBar", (id, hide) => { getWindowById(id).setAutoHideMenuBar(hide); }); - socket.on('browserWindowIsMenuBarAutoHide', (id) => { + socket.on("browserWindowIsMenuBarAutoHide", (id) => { const isMenuBarAutoHide = getWindowById(id).isMenuBarAutoHide(); - electronSocket.emit('browserWindow-isMenuBarAutoHide-completed', isMenuBarAutoHide); + electronSocket.emit("browserWindow-isMenuBarAutoHide-completed", isMenuBarAutoHide); }); - socket.on('browserWindowSetMenuBarVisibility', (id, visible) => { + socket.on("browserWindowSetMenuBarVisibility", (id, visible) => { getWindowById(id).setMenuBarVisibility(visible); }); - socket.on('browserWindowIsMenuBarVisible', (id) => { + socket.on("browserWindowIsMenuBarVisible", (id) => { const isMenuBarVisible = getWindowById(id).isMenuBarVisible(); - electronSocket.emit('browserWindow-isMenuBarVisible-completed', isMenuBarVisible); + electronSocket.emit("browserWindow-isMenuBarVisible-completed", isMenuBarVisible); }); - socket.on('browserWindowSetVisibleOnAllWorkspaces', (id, visible) => { + socket.on("browserWindowSetVisibleOnAllWorkspaces", (id, visible) => { getWindowById(id).setVisibleOnAllWorkspaces(visible); }); - socket.on('browserWindowIsVisibleOnAllWorkspaces', (id) => { + socket.on("browserWindowIsVisibleOnAllWorkspaces", (id) => { const isVisibleOnAllWorkspaces = getWindowById(id).isVisibleOnAllWorkspaces(); - electronSocket.emit('browserWindow-isVisibleOnAllWorkspaces-completed', isVisibleOnAllWorkspaces); + electronSocket.emit("browserWindow-isVisibleOnAllWorkspaces-completed", isVisibleOnAllWorkspaces); }); - socket.on('browserWindowSetIgnoreMouseEvents', (id, ignore) => { + socket.on("browserWindowSetIgnoreMouseEvents", (id, ignore) => { getWindowById(id).setIgnoreMouseEvents(ignore); }); - socket.on('browserWindowSetContentProtection', (id, enable) => { + socket.on("browserWindowSetContentProtection", (id, enable) => { getWindowById(id).setContentProtection(enable); }); - socket.on('browserWindowSetFocusable', (id, focusable) => { + socket.on("browserWindowSetFocusable", (id, focusable) => { getWindowById(id).setFocusable(focusable); }); - socket.on('browserWindowSetParentWindow', (id, parent) => { + socket.on("browserWindowSetParentWindow", (id, parent) => { const child = getWindowById(id); if (!parent) { // Clear parent: make this window top-level @@ -598,25 +621,25 @@ module.exports = (socket, app) => { const browserWindow = electron_1.BrowserWindow.fromId(parent.id); child.setParentWindow(browserWindow); }); - socket.on('browserWindowGetParentWindow', (id) => { + socket.on("browserWindowGetParentWindow", (id) => { const browserWindow = getWindowById(id).getParentWindow(); - electronSocket.emit('browserWindow-getParentWindow-completed', browserWindow.id); + electronSocket.emit("browserWindow-getParentWindow-completed", browserWindow.id); }); - socket.on('browserWindowGetChildWindows', (id) => { + socket.on("browserWindowGetChildWindows", (id) => { const browserWindows = getWindowById(id).getChildWindows(); const ids = []; - browserWindows.forEach(x => { + browserWindows.forEach((x) => { ids.push(x.id); }); - electronSocket.emit('browserWindow-getChildWindows-completed', ids); + electronSocket.emit("browserWindow-getChildWindows-completed", ids); }); - socket.on('browserWindowSetAutoHideCursor', (id, autoHide) => { + socket.on("browserWindowSetAutoHideCursor", (id, autoHide) => { getWindowById(id).setAutoHideCursor(autoHide); }); - socket.on('browserWindowSetVibrancy', (id, type) => { + socket.on("browserWindowSetVibrancy", (id, type) => { getWindowById(id).setVibrancy(type); }); - socket.on('browserWindow-setBrowserView', (id, browserViewId) => { + socket.on("browserWindow-setBrowserView", (id, browserViewId) => { getWindowById(id).setBrowserView((0, browserView_1.browserViewMediateService)(browserViewId)); }); function getWindowById(id) { diff --git a/src/ElectronNET.Host/api/browserWindows.js.map b/src/ElectronNET.Host/api/browserWindows.js.map index becb38d5..6fc574ef 100644 --- a/src/ElectronNET.Host/api/browserWindows.js.map +++ b/src/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/src/ElectronNET.Host/api/browserWindows.ts b/src/ElectronNET.Host/api/browserWindows.ts index 6e9516b5..b54f5a04 100644 --- a/src/ElectronNET.Host/api/browserWindows.ts +++ b/src/ElectronNET.Host/api/browserWindows.ts @@ -1,798 +1,877 @@ -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[]; +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 mainWindowURL; -const proxyToCredentialsMap: { [proxy: string]: string } = (global['proxyToCredentialsMap'] = global['proxyToCredentialsMap'] || []) as { [proxy: string]: string }; +const proxyToCredentialsMap: { [proxy: string]: string } = (global[ + "proxyToCredentialsMap" +] = global["proxyToCredentialsMap"] || []) as { [proxy: string]: string }; export = (socket: Socket, app: Electron.App) => { - electronSocket = socket; - - 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); - electronSocket.emit('browserWindow-ready-to-show' + id); - } + electronSocket = socket; + + 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 + ); + electronSocket.emit("browserWindow-ready-to-show" + id); + } - getWindowById(id).on('ready-to-show', () => { - readyToShowWindowsIds.push(id); - electronSocket.emit('browserWindow-ready-to-show' + id); - }); + getWindowById(id).on("ready-to-show", () => { + readyToShowWindowsIds.push(id); + electronSocket.emit("browserWindow-ready-to-show" + 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.on("register-browserWindow-page-title-updated", (id) => { + getWindowById(id).on("page-title-updated", (event, title) => { + electronSocket.emit("browserWindow-page-title-updated" + id, title); }); + }); - socket.on('register-browserWindow-close', (id) => { - getWindowById(id).on('close', () => { - electronSocket.emit('browserWindow-close' + id); - }); + socket.on("register-browserWindow-close", (id) => { + getWindowById(id).on("close", () => { + electronSocket.emit("browserWindow-close" + id); }); + }); - socket.on('register-browserWindow-closed', (id) => { - getWindowById(id).on('closed', () => { - electronSocket.emit('browserWindow-closed' + id); - }); + socket.on("register-browserWindow-closed", (id) => { + getWindowById(id).on("closed", () => { + electronSocket.emit("browserWindow-closed" + id); }); + }); - socket.on('register-browserWindow-session-end', (id) => { - getWindowById(id).on('session-end', () => { - electronSocket.emit('browserWindow-session-end' + id); - }); + socket.on("register-browserWindow-session-end", (id) => { + getWindowById(id).on("session-end", () => { + electronSocket.emit("browserWindow-session-end" + id); }); + }); - socket.on('register-browserWindow-unresponsive', (id) => { - getWindowById(id).on('unresponsive', () => { - electronSocket.emit('browserWindow-unresponsive' + id); - }); + socket.on("register-browserWindow-unresponsive", (id) => { + getWindowById(id).on("unresponsive", () => { + electronSocket.emit("browserWindow-unresponsive" + id); }); + }); - socket.on('register-browserWindow-responsive', (id) => { - getWindowById(id).on('responsive', () => { - electronSocket.emit('browserWindow-responsive' + id); - }); + socket.on("register-browserWindow-responsive", (id) => { + getWindowById(id).on("responsive", () => { + electronSocket.emit("browserWindow-responsive" + id); }); + }); - socket.on('register-browserWindow-blur', (id) => { - getWindowById(id).on('blur', () => { - electronSocket.emit('browserWindow-blur' + id); - }); + socket.on("register-browserWindow-blur", (id) => { + getWindowById(id).on("blur", () => { + electronSocket.emit("browserWindow-blur" + id); }); + }); - socket.on('register-browserWindow-focus', (id) => { - getWindowById(id).on('focus', () => { - electronSocket.emit('browserWindow-focus' + id); - }); + socket.on("register-browserWindow-focus", (id) => { + getWindowById(id).on("focus", () => { + electronSocket.emit("browserWindow-focus" + id); }); + }); - socket.on('register-browserWindow-show', (id) => { - getWindowById(id).on('show', () => { - electronSocket.emit('browserWindow-show' + id); - }); + socket.on("register-browserWindow-show", (id) => { + getWindowById(id).on("show", () => { + electronSocket.emit("browserWindow-show" + id); }); + }); - socket.on('register-browserWindow-hide', (id) => { - getWindowById(id).on('hide', () => { - electronSocket.emit('browserWindow-hide' + id); - }); + socket.on("register-browserWindow-hide", (id) => { + getWindowById(id).on("hide", () => { + electronSocket.emit("browserWindow-hide" + id); }); + }); - socket.on('register-browserWindow-maximize', (id) => { - getWindowById(id).on('maximize', () => { - electronSocket.emit('browserWindow-maximize' + id); - }); + socket.on("register-browserWindow-maximize", (id) => { + getWindowById(id).on("maximize", () => { + electronSocket.emit("browserWindow-maximize" + id); }); + }); - socket.on('register-browserWindow-unmaximize', (id) => { - getWindowById(id).on('unmaximize', () => { - electronSocket.emit('browserWindow-unmaximize' + id); - }); + socket.on("register-browserWindow-unmaximize", (id) => { + getWindowById(id).on("unmaximize", () => { + electronSocket.emit("browserWindow-unmaximize" + id); }); + }); - socket.on('register-browserWindow-minimize', (id) => { - getWindowById(id).on('minimize', () => { - electronSocket.emit('browserWindow-minimize' + id); - }); + socket.on("register-browserWindow-minimize", (id) => { + getWindowById(id).on("minimize", () => { + electronSocket.emit("browserWindow-minimize" + id); }); + }); - socket.on('register-browserWindow-restore', (id) => { - getWindowById(id).on('restore', () => { - electronSocket.emit('browserWindow-restore' + id); - }); + socket.on("register-browserWindow-restore", (id) => { + getWindowById(id).on("restore", () => { + electronSocket.emit("browserWindow-restore" + id); }); + }); - socket.on('register-browserWindow-resize', (id) => { - getWindowById(id).on('resize', () => { - electronSocket.emit('browserWindow-resize' + id); - }); + socket.on("register-browserWindow-resize", (id) => { + getWindowById(id).on("resize", () => { + electronSocket.emit("browserWindow-resize" + id); }); + }); - socket.on('register-browserWindow-move', (id) => { - getWindowById(id).on('move', () => { - electronSocket.emit('browserWindow-move' + id); - }); + socket.on("register-browserWindow-move", (id) => { + getWindowById(id).on("move", () => { + electronSocket.emit("browserWindow-move" + id); }); + }); - socket.on('register-browserWindow-moved', (id) => { - getWindowById(id).on('moved', () => { - electronSocket.emit('browserWindow-moved' + id); - }); + socket.on("register-browserWindow-moved", (id) => { + getWindowById(id).on("moved", () => { + electronSocket.emit("browserWindow-moved" + id); }); + }); - socket.on('register-browserWindow-enter-full-screen', (id) => { - getWindowById(id).on('enter-full-screen', () => { - electronSocket.emit('browserWindow-enter-full-screen' + id); - }); + socket.on("register-browserWindow-enter-full-screen", (id) => { + getWindowById(id).on("enter-full-screen", () => { + electronSocket.emit("browserWindow-enter-full-screen" + id); }); + }); - socket.on('register-browserWindow-leave-full-screen', (id) => { - getWindowById(id).on('leave-full-screen', () => { - electronSocket.emit('browserWindow-leave-full-screen' + id); - }); + socket.on("register-browserWindow-leave-full-screen", (id) => { + getWindowById(id).on("leave-full-screen", () => { + electronSocket.emit("browserWindow-leave-full-screen" + 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.on("register-browserWindow-enter-html-full-screen", (id) => { + getWindowById(id).on("enter-html-full-screen", () => { + electronSocket.emit("browserWindow-enter-html-full-screen" + 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.on("register-browserWindow-leave-html-full-screen", (id) => { + getWindowById(id).on("leave-html-full-screen", () => { + electronSocket.emit("browserWindow-leave-html-full-screen" + id); }); + }); - socket.on('register-browserWindow-app-command', (id) => { - getWindowById(id).on('app-command', (event, command) => { - electronSocket.emit('browserWindow-app-command' + id, command); - }); + socket.on("register-browserWindow-app-command", (id) => { + getWindowById(id).on("app-command", (event, command) => { + electronSocket.emit("browserWindow-app-command" + id, command); }); + }); - socket.on('register-browserWindow-swipe', (id) => { - getWindowById(id).on('swipe', (event, direction) => { - electronSocket.emit('browserWindow-swipe' + id, direction); - }); + socket.on("register-browserWindow-swipe", (id) => { + getWindowById(id).on("swipe", (event, direction) => { + electronSocket.emit("browserWindow-swipe" + id, direction); }); + }); - socket.on('register-browserWindow-sheet-begin', (id) => { - getWindowById(id).on('sheet-begin', () => { - electronSocket.emit('browserWindow-sheet-begin' + id); - }); + socket.on("register-browserWindow-sheet-begin", (id) => { + getWindowById(id).on("sheet-begin", () => { + electronSocket.emit("browserWindow-sheet-begin" + id); }); + }); - socket.on('register-browserWindow-sheet-end', (id) => { - getWindowById(id).on('sheet-end', () => { - electronSocket.emit('browserWindow-sheet-end' + id); - }); + socket.on("register-browserWindow-sheet-end", (id) => { + getWindowById(id).on("sheet-end", () => { + electronSocket.emit("browserWindow-sheet-end" + 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.on("register-browserWindow-new-window-for-tab", (id) => { + getWindowById(id).on("new-window-for-tab", () => { + electronSocket.emit("browserWindow-new-window-for-tab" + id); }); + }); - socket.on('createBrowserWindow', (options, loadUrl) => { - if (options.webPreferences && !('nodeIntegration' in options.webPreferences)) { - options = { ...options, webPreferences: { ...options.webPreferences, nodeIntegration: true, contextIsolation: false } }; - } else if (!options.webPreferences) { - options = { ...options, webPreferences: { nodeIntegration: true, contextIsolation: false } }; - } - - // we dont want to recreate the window when watch is ready. - if (app.commandLine.hasSwitch('watch') && app['mainWindowURL'] === loadUrl) { - window = app['mainWindow']; - if (window) { - window.reload(); - windows.push(window); - electronSocket.emit('BrowserWindowCreated', window.id); - return; - } - } else { - window = new BrowserWindow(options); - } - - if (options.proxy) { - window.webContents.session.setProxy({proxyRules: options.proxy}); - } - - if (options.proxy && options.proxyCredentials) { - proxyToCredentialsMap[options.proxy] = options.proxyCredentials; - } - - window.on('ready-to-show', () => { - if (readyToShowWindowsIds.includes(window.id)) { - readyToShowWindowsIds = readyToShowWindowsIds.filter(value => value !== window.id); - } else { - readyToShowWindowsIds.push(window.id); - } - }); - - 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)); - electronSocket.emit('BrowserWindowClosed', ids); - } - } - } - }); - - 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); - } - }); - - if (loadUrl) { - window.loadURL(loadUrl); - } + socket.on("createBrowserWindow", (options, loadUrl) => { + if ( + options.webPreferences && + !("nodeIntegration" in options.webPreferences) + ) { + options = { + ...options, + webPreferences: { + ...options.webPreferences, + nodeIntegration: true, + contextIsolation: false, + }, + }; + } else if (!options.webPreferences) { + options = { + ...options, + webPreferences: { nodeIntegration: true, contextIsolation: false }, + }; + } - if (app.commandLine.hasSwitch('clear-cache') && - app.commandLine.getSwitchValue('clear-cache')) { - window.webContents.session.clearCache(); - console.log('auto clear-cache active for new window.'); - } + if (options.isRunningBlazor) { + options.webPreferences["preload"] = path.join( + __dirname, + "..", + "scripts", + "blazor-preload.js" + ); + } - // set main window url - if (app['mainWindowURL'] == undefined || app['mainWindowURL'] == "") { - app['mainWindowURL'] = loadUrl; - app['mainWindow'] = window; - } + delete options.isRunningBlazor; + // we dont want to recreate the window when watch is ready. + if ( + app.commandLine.hasSwitch("watch") && + app["mainWindowURL"] === loadUrl + ) { + window = app["mainWindow"]; + if (window) { + window.reload(); windows.push(window); - electronSocket.emit('BrowserWindowCreated', window.id); - }); - - socket.on('browserWindowDestroy', (id) => { - getWindowById(id).destroy(); - }); + electronSocket.emit("BrowserWindowCreated", window.id); + return; + } + } else { + window = new BrowserWindow(options); + } - socket.on('browserWindowClose', (id) => { - getWindowById(id).close(); - }); + if (options.proxy) { + window.webContents.session.setProxy({ proxyRules: options.proxy }); + } - socket.on('browserWindowFocus', (id) => { - getWindowById(id).focus(); - }); + if (options.proxy && options.proxyCredentials) { + proxyToCredentialsMap[options.proxy] = options.proxyCredentials; + } - socket.on('browserWindowBlur', (id) => { - getWindowById(id).blur(); + window.on("ready-to-show", () => { + if (readyToShowWindowsIds.includes(window.id)) { + readyToShowWindowsIds = readyToShowWindowsIds.filter( + (value) => value !== window.id + ); + } else { + readyToShowWindowsIds.push(window.id); + } }); - socket.on('browserWindowIsFocused', (id) => { - const isFocused = getWindowById(id).isFocused(); + lastOptions = options; - electronSocket.emit('browserWindow-isFocused-completed', isFocused); + 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)); + electronSocket.emit("BrowserWindowClosed", ids); + } + } + } }); - socket.on('browserWindowIsDestroyed', (id) => { - const isDestroyed = getWindowById(id).isDestroyed(); - - electronSocket.emit('browserWindow-isDestroyed-completed', isDestroyed); + 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); + } }); - socket.on('browserWindowShow', (id) => { - getWindowById(id).show(); - }); + if (loadUrl) { + window.loadURL(loadUrl); + } - socket.on('browserWindowShowInactive', (id) => { - getWindowById(id).showInactive(); - }); + if ( + app.commandLine.hasSwitch("clear-cache") && + app.commandLine.getSwitchValue("clear-cache") + ) { + window.webContents.session.clearCache(); + console.log("auto clear-cache active for new window."); + } - socket.on('browserWindowHide', (id) => { - getWindowById(id).hide(); - }); + // set main window url + if (app["mainWindowURL"] == undefined || app["mainWindowURL"] == "") { + app["mainWindowURL"] = loadUrl; + app["mainWindow"] = window; + } - socket.on('browserWindowIsVisible', (id) => { - const isVisible = getWindowById(id).isVisible(); + windows.push(window); + electronSocket.emit("BrowserWindowCreated", window.id); + }); - electronSocket.emit('browserWindow-isVisible-completed', isVisible); - }); + socket.on("browserWindowDestroy", (id) => { + getWindowById(id).destroy(); + }); - socket.on('browserWindowIsModal', (id) => { - const isModal = getWindowById(id).isModal(); + socket.on("browserWindowClose", (id) => { + getWindowById(id).close(); + }); - electronSocket.emit('browserWindow-isModal-completed', isModal); - }); + socket.on("browserWindowFocus", (id) => { + getWindowById(id).focus(); + }); - socket.on('browserWindowMaximize', (id) => { - getWindowById(id).maximize(); - }); + socket.on("browserWindowBlur", (id) => { + getWindowById(id).blur(); + }); - socket.on('browserWindowUnmaximize', (id) => { - getWindowById(id).unmaximize(); - }); + socket.on("browserWindowIsFocused", (id) => { + const isFocused = getWindowById(id).isFocused(); - socket.on('browserWindowIsMaximized', (id) => { - const isMaximized = getWindowById(id).isMaximized(); + electronSocket.emit("browserWindow-isFocused-completed", isFocused); + }); - electronSocket.emit('browserWindow-isMaximized-completed', isMaximized); - }); + socket.on("browserWindowIsDestroyed", (id) => { + const isDestroyed = getWindowById(id).isDestroyed(); - socket.on('browserWindowMinimize', (id) => { - getWindowById(id).minimize(); - }); + electronSocket.emit("browserWindow-isDestroyed-completed", isDestroyed); + }); - socket.on('browserWindowRestore', (id) => { - getWindowById(id).restore(); - }); + socket.on("browserWindowShow", (id) => { + getWindowById(id).show(); + }); - socket.on('browserWindowIsMinimized', (id) => { - const isMinimized = getWindowById(id).isMinimized(); + socket.on("browserWindowShowInactive", (id) => { + getWindowById(id).showInactive(); + }); - electronSocket.emit('browserWindow-isMinimized-completed', isMinimized); - }); + socket.on("browserWindowHide", (id) => { + getWindowById(id).hide(); + }); - socket.on('browserWindowSetFullScreen', (id, fullscreen) => { - getWindowById(id).setFullScreen(fullscreen); - }); + socket.on("browserWindowIsVisible", (id) => { + const isVisible = getWindowById(id).isVisible(); - socket.on('browserWindowIsFullScreen', (id) => { - const isFullScreen = getWindowById(id).isFullScreen(); + electronSocket.emit("browserWindow-isVisible-completed", isVisible); + }); - electronSocket.emit('browserWindow-isFullScreen-completed', isFullScreen); - }); + socket.on("browserWindowIsModal", (id) => { + const isModal = getWindowById(id).isModal(); - socket.on('browserWindowSetAspectRatio', (id, aspectRatio, extraSize) => { - getWindowById(id).setAspectRatio(aspectRatio, extraSize); - }); + electronSocket.emit("browserWindow-isModal-completed", isModal); + }); - socket.on('browserWindowPreviewFile', (id, path, displayname) => { - getWindowById(id).previewFile(path, displayname); - }); + socket.on("browserWindowMaximize", (id) => { + getWindowById(id).maximize(); + }); - socket.on('browserWindowCloseFilePreview', (id) => { - getWindowById(id).closeFilePreview(); - }); + socket.on("browserWindowUnmaximize", (id) => { + getWindowById(id).unmaximize(); + }); - socket.on('browserWindowSetBounds', (id, bounds, animate) => { - getWindowById(id).setBounds(bounds, animate); - }); + socket.on("browserWindowIsMaximized", (id) => { + const isMaximized = getWindowById(id).isMaximized(); - socket.on('browserWindowGetBounds', (id) => { - const rectangle = getWindowById(id).getBounds(); + electronSocket.emit("browserWindow-isMaximized-completed", isMaximized); + }); - electronSocket.emit('browserWindow-getBounds-completed', rectangle); - }); + socket.on("browserWindowMinimize", (id) => { + getWindowById(id).minimize(); + }); - socket.on('browserWindowSetContentBounds', (id, bounds, animate) => { - getWindowById(id).setContentBounds(bounds, animate); - }); + socket.on("browserWindowRestore", (id) => { + getWindowById(id).restore(); + }); - socket.on('browserWindowGetContentBounds', (id) => { - const rectangle = getWindowById(id).getContentBounds(); + socket.on("browserWindowIsMinimized", (id) => { + const isMinimized = getWindowById(id).isMinimized(); - electronSocket.emit('browserWindow-getContentBounds-completed', rectangle); - }); + electronSocket.emit("browserWindow-isMinimized-completed", isMinimized); + }); - socket.on('browserWindowSetSize', (id, width, height, animate) => { - getWindowById(id).setSize(width, height, animate); - }); + socket.on("browserWindowSetFullScreen", (id, fullscreen) => { + getWindowById(id).setFullScreen(fullscreen); + }); - socket.on('browserWindowGetSize', (id) => { - const size = getWindowById(id).getSize(); + socket.on("browserWindowIsFullScreen", (id) => { + const isFullScreen = getWindowById(id).isFullScreen(); - electronSocket.emit('browserWindow-getSize-completed', size); - }); + electronSocket.emit("browserWindow-isFullScreen-completed", isFullScreen); + }); - socket.on('browserWindowSetContentSize', (id, width, height, animate) => { - getWindowById(id).setContentSize(width, height, animate); - }); + socket.on("browserWindowSetAspectRatio", (id, aspectRatio, extraSize) => { + getWindowById(id).setAspectRatio(aspectRatio, extraSize); + }); - socket.on('browserWindowGetContentSize', (id) => { - const size = getWindowById(id).getContentSize(); + socket.on("browserWindowPreviewFile", (id, path, displayname) => { + getWindowById(id).previewFile(path, displayname); + }); - electronSocket.emit('browserWindow-getContentSize-completed', size); - }); + socket.on("browserWindowCloseFilePreview", (id) => { + getWindowById(id).closeFilePreview(); + }); - socket.on('browserWindowSetMinimumSize', (id, width, height) => { - getWindowById(id).setMinimumSize(width, height); - }); + socket.on("browserWindowSetBounds", (id, bounds, animate) => { + getWindowById(id).setBounds(bounds, animate); + }); - socket.on('browserWindowGetMinimumSize', (id) => { - const size = getWindowById(id).getMinimumSize(); + socket.on("browserWindowGetBounds", (id) => { + const rectangle = getWindowById(id).getBounds(); - electronSocket.emit('browserWindow-getMinimumSize-completed', size); - }); + electronSocket.emit("browserWindow-getBounds-completed", rectangle); + }); - socket.on('browserWindowSetMaximumSize', (id, width, height) => { - getWindowById(id).setMaximumSize(width, height); - }); + socket.on("browserWindowSetContentBounds", (id, bounds, animate) => { + getWindowById(id).setContentBounds(bounds, animate); + }); - socket.on('browserWindowGetMaximumSize', (id) => { - const size = getWindowById(id).getMaximumSize(); + socket.on("browserWindowGetContentBounds", (id) => { + const rectangle = getWindowById(id).getContentBounds(); - electronSocket.emit('browserWindow-getMaximumSize-completed', size); - }); + electronSocket.emit("browserWindow-getContentBounds-completed", rectangle); + }); - socket.on('browserWindowSetResizable', (id, resizable) => { - getWindowById(id).setResizable(resizable); - }); + socket.on("browserWindowSetSize", (id, width, height, animate) => { + getWindowById(id).setSize(width, height, animate); + }); - socket.on('browserWindowIsResizable', (id) => { - const resizable = getWindowById(id).isResizable(); + socket.on("browserWindowGetSize", (id) => { + const size = getWindowById(id).getSize(); - electronSocket.emit('browserWindow-isResizable-completed', resizable); - }); + electronSocket.emit("browserWindow-getSize-completed", size); + }); - socket.on('browserWindowSetMovable', (id, movable) => { - getWindowById(id).setMovable(movable); - }); + socket.on("browserWindowSetContentSize", (id, width, height, animate) => { + getWindowById(id).setContentSize(width, height, animate); + }); - socket.on('browserWindowIsMovable', (id) => { - const movable = getWindowById(id).isMovable(); + socket.on("browserWindowGetContentSize", (id) => { + const size = getWindowById(id).getContentSize(); - electronSocket.emit('browserWindow-isMovable-completed', movable); - }); + electronSocket.emit("browserWindow-getContentSize-completed", size); + }); - socket.on('browserWindowSetMinimizable', (id, minimizable) => { - getWindowById(id).setMinimizable(minimizable); - }); + socket.on("browserWindowSetMinimumSize", (id, width, height) => { + getWindowById(id).setMinimumSize(width, height); + }); - socket.on('browserWindowIsMinimizable', (id) => { - const minimizable = getWindowById(id).isMinimizable(); + socket.on("browserWindowGetMinimumSize", (id) => { + const size = getWindowById(id).getMinimumSize(); - electronSocket.emit('browserWindow-isMinimizable-completed', minimizable); - }); + electronSocket.emit("browserWindow-getMinimumSize-completed", size); + }); - socket.on('browserWindowSetMaximizable', (id, maximizable) => { - getWindowById(id).setMaximizable(maximizable); - }); + socket.on("browserWindowSetMaximumSize", (id, width, height) => { + getWindowById(id).setMaximumSize(width, height); + }); - socket.on('browserWindowIsMaximizable', (id) => { - const maximizable = getWindowById(id).isMaximizable(); + socket.on("browserWindowGetMaximumSize", (id) => { + const size = getWindowById(id).getMaximumSize(); - electronSocket.emit('browserWindow-isMaximizable-completed', maximizable); - }); + electronSocket.emit("browserWindow-getMaximumSize-completed", size); + }); - socket.on('browserWindowSetFullScreenable', (id, fullscreenable) => { - getWindowById(id).setFullScreenable(fullscreenable); - }); + socket.on("browserWindowSetResizable", (id, resizable) => { + getWindowById(id).setResizable(resizable); + }); - socket.on('browserWindowIsFullScreenable', (id) => { - const fullscreenable = getWindowById(id).isFullScreenable(); + socket.on("browserWindowIsResizable", (id) => { + const resizable = getWindowById(id).isResizable(); - electronSocket.emit('browserWindow-isFullScreenable-completed', fullscreenable); - }); + electronSocket.emit("browserWindow-isResizable-completed", resizable); + }); - socket.on('browserWindowSetClosable', (id, closable) => { - getWindowById(id).setClosable(closable); - }); + socket.on("browserWindowSetMovable", (id, movable) => { + getWindowById(id).setMovable(movable); + }); - socket.on('browserWindowIsClosable', (id) => { - const closable = getWindowById(id).isClosable(); + socket.on("browserWindowIsMovable", (id) => { + const movable = getWindowById(id).isMovable(); - electronSocket.emit('browserWindow-isClosable-completed', closable); - }); + electronSocket.emit("browserWindow-isMovable-completed", movable); + }); - socket.on('browserWindowSetAlwaysOnTop', (id, flag, level, relativeLevel) => { - getWindowById(id).setAlwaysOnTop(flag, level, relativeLevel); - }); + socket.on("browserWindowSetMinimizable", (id, minimizable) => { + getWindowById(id).setMinimizable(minimizable); + }); - socket.on('browserWindowIsAlwaysOnTop', (id) => { - const isAlwaysOnTop = getWindowById(id).isAlwaysOnTop(); + socket.on("browserWindowIsMinimizable", (id) => { + const minimizable = getWindowById(id).isMinimizable(); - electronSocket.emit('browserWindow-isAlwaysOnTop-completed', isAlwaysOnTop); - }); + electronSocket.emit("browserWindow-isMinimizable-completed", minimizable); + }); - socket.on('browserWindowCenter', (id) => { - getWindowById(id).center(); - }); + socket.on("browserWindowSetMaximizable", (id, maximizable) => { + getWindowById(id).setMaximizable(maximizable); + }); - socket.on('browserWindowSetPosition', (id, x, y, animate) => { - getWindowById(id).setPosition(x, y, animate); - }); + socket.on("browserWindowIsMaximizable", (id) => { + const maximizable = getWindowById(id).isMaximizable(); - socket.on('browserWindowGetPosition', (id) => { - const position = getWindowById(id).getPosition(); + electronSocket.emit("browserWindow-isMaximizable-completed", maximizable); + }); - electronSocket.emit('browserWindow-getPosition-completed', position); - }); + socket.on("browserWindowSetFullScreenable", (id, fullscreenable) => { + getWindowById(id).setFullScreenable(fullscreenable); + }); - socket.on('browserWindowSetTitle', (id, title) => { - getWindowById(id).setTitle(title); - }); + socket.on("browserWindowIsFullScreenable", (id) => { + const fullscreenable = getWindowById(id).isFullScreenable(); - socket.on('browserWindowGetTitle', (id) => { - const title = getWindowById(id).getTitle(); + electronSocket.emit( + "browserWindow-isFullScreenable-completed", + fullscreenable + ); + }); - electronSocket.emit('browserWindow-getTitle-completed', title); - }); + socket.on("browserWindowSetClosable", (id, closable) => { + getWindowById(id).setClosable(closable); + }); - socket.on('browserWindowSetTitle', (id, title) => { - getWindowById(id).setTitle(title); - }); - - socket.on('browserWindowSetSheetOffset', (id, offsetY, offsetX) => { - if (offsetX) { - getWindowById(id).setSheetOffset(offsetY, offsetX); - } else { - getWindowById(id).setSheetOffset(offsetY); - } - }); - - socket.on('browserWindowFlashFrame', (id, flag) => { - getWindowById(id).flashFrame(flag); - }); - - socket.on('browserWindowSetSkipTaskbar', (id, skip) => { - getWindowById(id).setSkipTaskbar(skip); - }); - - socket.on('browserWindowSetKiosk', (id, flag) => { - getWindowById(id).setKiosk(flag); - }); - - socket.on('browserWindowIsKiosk', (id) => { - const isKiosk = getWindowById(id).isKiosk(); - - electronSocket.emit('browserWindow-isKiosk-completed', isKiosk); - }); - - socket.on('browserWindowGetNativeWindowHandle', (id) => { - const nativeWindowHandle = getWindowById(id).getNativeWindowHandle().readInt32LE(0).toString(16); - electronSocket.emit('browserWindow-getNativeWindowHandle-completed', nativeWindowHandle); - }); - - socket.on('browserWindowSetRepresentedFilename', (id, filename) => { - const win = getWindowById(id); - try { - if (win && typeof win.setRepresentedFilename === 'function') { - win.setRepresentedFilename(filename); - } - } catch (e) { - console.warn('setRepresentedFilename failed (likely unsupported platform):', e); - } - }); + socket.on("browserWindowIsClosable", (id) => { + const closable = getWindowById(id).isClosable(); - socket.on('browserWindowGetRepresentedFilename', (id) => { - const win = getWindowById(id); - let pathname = ''; - try { - if (win && typeof win.getRepresentedFilename === 'function') { - pathname = win.getRepresentedFilename() || ''; - } - } catch (e) { - console.warn('getRepresentedFilename failed (likely unsupported platform):', e); - } - electronSocket.emit('browserWindow-getRepresentedFilename-completed', pathname); - }); - - socket.on('browserWindowSetDocumentEdited', (id, edited) => { - getWindowById(id).setDocumentEdited(edited); - }); + electronSocket.emit("browserWindow-isClosable-completed", closable); + }); - socket.on('browserWindowIsDocumentEdited', (id) => { - const edited = getWindowById(id).isDocumentEdited(); + socket.on("browserWindowSetAlwaysOnTop", (id, flag, level, relativeLevel) => { + getWindowById(id).setAlwaysOnTop(flag, level, relativeLevel); + }); - electronSocket.emit('browserWindow-isDocumentEdited-completed', edited); - }); + socket.on("browserWindowIsAlwaysOnTop", (id) => { + const isAlwaysOnTop = getWindowById(id).isAlwaysOnTop(); - socket.on('browserWindowFocusOnWebView', (id) => { - getWindowById(id).focusOnWebView(); - }); + electronSocket.emit("browserWindow-isAlwaysOnTop-completed", isAlwaysOnTop); + }); - socket.on('browserWindowBlurWebView', (id) => { - getWindowById(id).blurWebView(); - }); - - socket.on('browserWindowLoadURL', (id, url, options) => { - getWindowById(id).loadURL(url, options); - }); + socket.on("browserWindowCenter", (id) => { + getWindowById(id).center(); + }); - socket.on('browserWindowReload', (id) => { - getWindowById(id).reload(); - }); + socket.on("browserWindowSetPosition", (id, x, y, animate) => { + getWindowById(id).setPosition(x, y, animate); + }); - socket.on('browserWindowSetMenu', (id, menuItems) => { - let menu = null; + socket.on("browserWindowGetPosition", (id) => { + const position = getWindowById(id).getPosition(); - if (menuItems) { - menu = Menu.buildFromTemplate(menuItems); + electronSocket.emit("browserWindow-getPosition-completed", position); + }); - addMenuItemClickConnector(menu.items, (id) => { - electronSocket.emit('windowMenuItemClicked', id); - }); - } + socket.on("browserWindowSetTitle", (id, title) => { + getWindowById(id).setTitle(title); + }); - getWindowById(id).setMenu(menu); - }); + socket.on("browserWindowGetTitle", (id) => { + const title = getWindowById(id).getTitle(); - socket.on('browserWindowRemoveMenu', (id) => { - getWindowById(id).removeMenu(); - }); + electronSocket.emit("browserWindow-getTitle-completed", title); + }); - function addMenuItemClickConnector(menuItems, callback) { - menuItems.forEach((item) => { - if (item.submenu && item.submenu.items.length > 0) { - addMenuItemClickConnector(item.submenu.items, callback); - } + socket.on("browserWindowSetTitle", (id, title) => { + getWindowById(id).setTitle(title); + }); - if ('id' in item && item.id) { - item.click = () => { callback(item.id); }; - } - }); + socket.on("browserWindowSetSheetOffset", (id, offsetY, offsetX) => { + if (offsetX) { + getWindowById(id).setSheetOffset(offsetY, offsetX); + } else { + getWindowById(id).setSheetOffset(offsetY); } + }); + + socket.on("browserWindowFlashFrame", (id, flag) => { + getWindowById(id).flashFrame(flag); + }); + + socket.on("browserWindowSetSkipTaskbar", (id, skip) => { + getWindowById(id).setSkipTaskbar(skip); + }); + + socket.on("browserWindowSetKiosk", (id, flag) => { + getWindowById(id).setKiosk(flag); + }); + + socket.on("browserWindowIsKiosk", (id) => { + const isKiosk = getWindowById(id).isKiosk(); + + electronSocket.emit("browserWindow-isKiosk-completed", isKiosk); + }); + + socket.on("browserWindowGetNativeWindowHandle", (id) => { + const nativeWindowHandle = getWindowById(id) + .getNativeWindowHandle() + .readInt32LE(0) + .toString(16); + electronSocket.emit( + "browserWindow-getNativeWindowHandle-completed", + nativeWindowHandle + ); + }); + + socket.on("browserWindowSetRepresentedFilename", (id, filename) => { + const win = getWindowById(id); + try { + if (win && typeof win.setRepresentedFilename === "function") { + win.setRepresentedFilename(filename); + } + } catch (e) { + console.warn( + "setRepresentedFilename failed (likely unsupported platform):", + e + ); + } + }); + + socket.on("browserWindowGetRepresentedFilename", (id) => { + const win = getWindowById(id); + let pathname = ""; + try { + if (win && typeof win.getRepresentedFilename === "function") { + pathname = win.getRepresentedFilename() || ""; + } + } catch (e) { + console.warn( + "getRepresentedFilename failed (likely unsupported platform):", + e + ); + } + electronSocket.emit( + "browserWindow-getRepresentedFilename-completed", + pathname + ); + }); - socket.on('browserWindowSetProgressBar', (id, progress) => { - getWindowById(id).setProgressBar(progress); - }); - - socket.on('browserWindowSetProgressBar', (id, progress, options) => { - getWindowById(id).setProgressBar(progress, options); - }); - - socket.on('browserWindowSetHasShadow', (id, hasShadow) => { - getWindowById(id).setHasShadow(hasShadow); - }); - - socket.on('browserWindowHasShadow', (id) => { - const hasShadow = getWindowById(id).hasShadow(); - - electronSocket.emit('browserWindow-hasShadow-completed', hasShadow); - }); - - socket.on('browserWindowSetThumbarButtons', (id, thumbarButtons: Electron.ThumbarButton[]) => { - thumbarButtons.forEach(thumbarButton => { - const originalIconPath = thumbarButton.icon.toString(); - const path = require('path'); - const fs = require('fs'); - let imagePath = originalIconPath; - if (!path.isAbsolute(originalIconPath)) { - imagePath = path.join(__dirname.replace('api', ''), 'bin', originalIconPath); - } - const { nativeImage } = require('electron'); - if (fs.existsSync(imagePath)) { - thumbarButton.icon = nativeImage.createFromPath(imagePath); - } else { - // Fallback to empty image to avoid failure - thumbarButton.icon = nativeImage.createEmpty(); - } - thumbarButton.click = () => { - electronSocket.emit('thumbarButtonClicked', thumbarButton['id']); - }; - }); - - const success = getWindowById(id).setThumbarButtons(thumbarButtons); - electronSocket.emit('browserWindowSetThumbarButtons-completed', success); - }); - - socket.on('browserWindowSetThumbnailClip', (id, rectangle) => { - getWindowById(id).setThumbnailClip(rectangle); - }); - - socket.on('browserWindowSetThumbnailToolTip', (id, toolTip) => { - getWindowById(id).setThumbnailToolTip(toolTip); - }); - - socket.on('browserWindowSetAppDetails', (id, options) => { - getWindowById(id).setAppDetails(options); - }); - - socket.on('browserWindowShowDefinitionForSelection', (id) => { - getWindowById(id).showDefinitionForSelection(); - }); + socket.on("browserWindowSetDocumentEdited", (id, edited) => { + getWindowById(id).setDocumentEdited(edited); + }); - socket.on('browserWindowSetAutoHideMenuBar', (id, hide) => { - getWindowById(id).setAutoHideMenuBar(hide); - }); + socket.on("browserWindowIsDocumentEdited", (id) => { + const edited = getWindowById(id).isDocumentEdited(); - socket.on('browserWindowIsMenuBarAutoHide', (id) => { - const isMenuBarAutoHide = getWindowById(id).isMenuBarAutoHide(); + electronSocket.emit("browserWindow-isDocumentEdited-completed", edited); + }); - electronSocket.emit('browserWindow-isMenuBarAutoHide-completed', isMenuBarAutoHide); - }); + socket.on("browserWindowFocusOnWebView", (id) => { + getWindowById(id).focusOnWebView(); + }); - socket.on('browserWindowSetMenuBarVisibility', (id, visible) => { - getWindowById(id).setMenuBarVisibility(visible); - }); + socket.on("browserWindowBlurWebView", (id) => { + getWindowById(id).blurWebView(); + }); - socket.on('browserWindowIsMenuBarVisible', (id) => { - const isMenuBarVisible = getWindowById(id).isMenuBarVisible(); + socket.on("browserWindowLoadURL", (id, url, options) => { + getWindowById(id).loadURL(url, options); + }); - electronSocket.emit('browserWindow-isMenuBarVisible-completed', isMenuBarVisible); - }); + socket.on("browserWindowReload", (id) => { + getWindowById(id).reload(); + }); - socket.on('browserWindowSetVisibleOnAllWorkspaces', (id, visible) => { - getWindowById(id).setVisibleOnAllWorkspaces(visible); - }); + socket.on("browserWindowSetMenu", (id, menuItems) => { + let menu = null; - socket.on('browserWindowIsVisibleOnAllWorkspaces', (id) => { - const isVisibleOnAllWorkspaces = getWindowById(id).isVisibleOnAllWorkspaces(); + if (menuItems) { + menu = Menu.buildFromTemplate(menuItems); - electronSocket.emit('browserWindow-isVisibleOnAllWorkspaces-completed', isVisibleOnAllWorkspaces); - }); - - socket.on('browserWindowSetIgnoreMouseEvents', (id, ignore) => { - getWindowById(id).setIgnoreMouseEvents(ignore); - }); - - socket.on('browserWindowSetContentProtection', (id, enable) => { - getWindowById(id).setContentProtection(enable); - }); - - socket.on('browserWindowSetFocusable', (id, focusable) => { - getWindowById(id).setFocusable(focusable); - }); + addMenuItemClickConnector(menu.items, (id) => { + electronSocket.emit("windowMenuItemClicked", id); + }); + } - socket.on('browserWindowSetParentWindow', (id, parent) => { - const child = getWindowById(id); - if (!parent) { - // Clear parent: make this window top-level - child.setParentWindow(null); - return; + getWindowById(id).setMenu(menu); + }); + + socket.on("browserWindowRemoveMenu", (id) => { + getWindowById(id).removeMenu(); + }); + + function addMenuItemClickConnector(menuItems, callback) { + menuItems.forEach((item) => { + if (item.submenu && item.submenu.items.length > 0) { + addMenuItemClickConnector(item.submenu.items, callback); + } + + if ("id" in item && item.id) { + item.click = () => { + callback(item.id); + }; + } + }); + } + + socket.on("browserWindowSetProgressBar", (id, progress) => { + getWindowById(id).setProgressBar(progress); + }); + + socket.on("browserWindowSetProgressBar", (id, progress, options) => { + getWindowById(id).setProgressBar(progress, options); + }); + + socket.on("browserWindowSetHasShadow", (id, hasShadow) => { + getWindowById(id).setHasShadow(hasShadow); + }); + + socket.on("browserWindowHasShadow", (id) => { + const hasShadow = getWindowById(id).hasShadow(); + + electronSocket.emit("browserWindow-hasShadow-completed", hasShadow); + }); + + socket.on( + "browserWindowSetThumbarButtons", + (id, thumbarButtons: Electron.ThumbarButton[]) => { + thumbarButtons.forEach((thumbarButton) => { + const originalIconPath = thumbarButton.icon.toString(); + const path = require("path"); + const fs = require("fs"); + let imagePath = originalIconPath; + if (!path.isAbsolute(originalIconPath)) { + imagePath = path.join( + __dirname.replace("api", ""), + "bin", + originalIconPath + ); } - const browserWindow = BrowserWindow.fromId(parent.id); - child.setParentWindow(browserWindow); - }); + const { nativeImage } = require("electron"); + if (fs.existsSync(imagePath)) { + thumbarButton.icon = nativeImage.createFromPath(imagePath); + } else { + // Fallback to empty image to avoid failure + thumbarButton.icon = nativeImage.createEmpty(); + } + thumbarButton.click = () => { + electronSocket.emit("thumbarButtonClicked", thumbarButton["id"]); + }; + }); - socket.on('browserWindowGetParentWindow', (id) => { - const browserWindow = getWindowById(id).getParentWindow(); + const success = getWindowById(id).setThumbarButtons(thumbarButtons); + electronSocket.emit("browserWindowSetThumbarButtons-completed", success); + } + ); + + socket.on("browserWindowSetThumbnailClip", (id, rectangle) => { + getWindowById(id).setThumbnailClip(rectangle); + }); + + socket.on("browserWindowSetThumbnailToolTip", (id, toolTip) => { + getWindowById(id).setThumbnailToolTip(toolTip); + }); + + socket.on("browserWindowSetAppDetails", (id, options) => { + getWindowById(id).setAppDetails(options); + }); + + socket.on("browserWindowShowDefinitionForSelection", (id) => { + getWindowById(id).showDefinitionForSelection(); + }); + + socket.on("browserWindowSetAutoHideMenuBar", (id, hide) => { + getWindowById(id).setAutoHideMenuBar(hide); + }); + + socket.on("browserWindowIsMenuBarAutoHide", (id) => { + const isMenuBarAutoHide = getWindowById(id).isMenuBarAutoHide(); + + electronSocket.emit( + "browserWindow-isMenuBarAutoHide-completed", + isMenuBarAutoHide + ); + }); + + socket.on("browserWindowSetMenuBarVisibility", (id, visible) => { + getWindowById(id).setMenuBarVisibility(visible); + }); + + socket.on("browserWindowIsMenuBarVisible", (id) => { + const isMenuBarVisible = getWindowById(id).isMenuBarVisible(); + + electronSocket.emit( + "browserWindow-isMenuBarVisible-completed", + isMenuBarVisible + ); + }); + + socket.on("browserWindowSetVisibleOnAllWorkspaces", (id, visible) => { + getWindowById(id).setVisibleOnAllWorkspaces(visible); + }); + + socket.on("browserWindowIsVisibleOnAllWorkspaces", (id) => { + const isVisibleOnAllWorkspaces = + getWindowById(id).isVisibleOnAllWorkspaces(); + + electronSocket.emit( + "browserWindow-isVisibleOnAllWorkspaces-completed", + isVisibleOnAllWorkspaces + ); + }); + + socket.on("browserWindowSetIgnoreMouseEvents", (id, ignore) => { + getWindowById(id).setIgnoreMouseEvents(ignore); + }); + + socket.on("browserWindowSetContentProtection", (id, enable) => { + getWindowById(id).setContentProtection(enable); + }); + + socket.on("browserWindowSetFocusable", (id, focusable) => { + getWindowById(id).setFocusable(focusable); + }); + + socket.on("browserWindowSetParentWindow", (id, parent) => { + const child = getWindowById(id); + if (!parent) { + // Clear parent: make this window top-level + child.setParentWindow(null); + return; + } + const browserWindow = BrowserWindow.fromId(parent.id); + child.setParentWindow(browserWindow); + }); - electronSocket.emit('browserWindow-getParentWindow-completed', browserWindow.id); - }); + socket.on("browserWindowGetParentWindow", (id) => { + const browserWindow = getWindowById(id).getParentWindow(); - socket.on('browserWindowGetChildWindows', (id) => { - const browserWindows = getWindowById(id).getChildWindows(); + electronSocket.emit( + "browserWindow-getParentWindow-completed", + browserWindow.id + ); + }); - const ids = []; + socket.on("browserWindowGetChildWindows", (id) => { + const browserWindows = getWindowById(id).getChildWindows(); - browserWindows.forEach(x => { - ids.push(x.id); - }); + const ids = []; - electronSocket.emit('browserWindow-getChildWindows-completed', ids); + browserWindows.forEach((x) => { + ids.push(x.id); }); - socket.on('browserWindowSetAutoHideCursor', (id, autoHide) => { - getWindowById(id).setAutoHideCursor(autoHide); - }); + electronSocket.emit("browserWindow-getChildWindows-completed", ids); + }); - socket.on('browserWindowSetVibrancy', (id, type) => { - getWindowById(id).setVibrancy(type); - }); + socket.on("browserWindowSetAutoHideCursor", (id, autoHide) => { + getWindowById(id).setAutoHideCursor(autoHide); + }); - socket.on('browserWindow-setBrowserView', (id, browserViewId) => { - getWindowById(id).setBrowserView(browserViewMediateService(browserViewId)); - }); + socket.on("browserWindowSetVibrancy", (id, type) => { + getWindowById(id).setVibrancy(type); + }); - function getWindowById(id: number): Electron.BrowserWindow { - for (let index = 0; index < windows.length; index++) { - const element = windows[index]; - if (element.id === id) { - return element; - } - } + socket.on("browserWindow-setBrowserView", (id, 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; + } } + } }; diff --git a/src/ElectronNET.Host/api/nativeTheme.js.map b/src/ElectronNET.Host/api/nativeTheme.js.map index b47cf7c4..0b57ff1f 100644 --- a/src/ElectronNET.Host/api/nativeTheme.js.map +++ b/src/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,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,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":";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,4BAA4B,EAAE,GAAG,EAAE;QACzC,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,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,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 diff --git a/src/ElectronNET.Host/api/notification.js.map b/src/ElectronNET.Host/api/notification.js.map index 267b9b31..fc26d37c 100644 --- a/src/ElectronNET.Host/api/notification.js.map +++ b/src/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,CAAC;YACjB,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;QACP,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,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;QACP,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,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;QACP,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,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;QACP,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,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;QACP,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACZ,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;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,EAAE,CAAC;QAC/C,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":";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,CAAC;YACjB,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;QACP,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,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;QACP,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,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;QACP,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,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;QACP,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,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;QACP,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACZ,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;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,EAAE,CAAC;QAC/C,cAAc,CAAC,IAAI,CAAC,kCAAkC,EAAE,WAAW,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/powerMonitor.js.map b/src/ElectronNET.Host/api/powerMonitor.js.map index f83530e0..01f7be39 100644 --- a/src/ElectronNET.Host/api/powerMonitor.js.map +++ b/src/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":";AACA,uCAAwC;AACxC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAChD,uBAAY,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YAChC,cAAc,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAClD,uBAAY,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAClC,cAAc,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC5C,uBAAY,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC5B,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC3C,uBAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC3B,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACvC,uBAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC5C,uBAAY,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YAC/B,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC7C,uBAAY,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAC7B,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/screen.js.map b/src/ElectronNET.Host/api/screen.js.map index a395faf5..9fd43df0 100644 --- a/src/ElectronNET.Host/api/screen.js.map +++ b/src/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;IAExB,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,sBAAsB,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9D,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,wBAAwB,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAChE,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,gCAAgC,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QAC1F,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":";AACA,uCAAkC;AAClC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IAExB,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,sBAAsB,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9D,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,wBAAwB,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAChE,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,gCAAgC,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QAC1F,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,uCAAuC,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QACnD,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC;IACvE,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,oCAAoC,EAAE,OAAO,CAAC,CAAC;IACvE,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,iCAAiC,EAAE,OAAO,CAAC,CAAC;IACpE,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,yCAAyC,EAAE,OAAO,CAAC,CAAC;IAC5E,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,qCAAqC,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/webContents.js b/src/ElectronNET.Host/api/webContents.js index 7b16a712..3d0c8b0e 100644 --- a/src/ElectronNET.Host/api/webContents.js +++ b/src/ElectronNET.Host/api/webContents.js @@ -1,78 +1,84 @@ "use strict"; const electron_1 = require("electron"); const browserView_1 = require("./browserView"); -const fs = require('fs'); +const fs = require("fs"); let electronSocket; module.exports = (socket) => { electronSocket = socket; // The crashed event has been removed in Electron 29 - socket.on('register-webContents-crashed', (id) => { + socket.on("register-webContents-crashed", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('crashed'); + browserWindow.webContents.removeAllListeners("crashed"); // @ts-expect-error No overload matches this call - browserWindow.webContents.on('crashed', (event, killed) => { - electronSocket.emit('webContents-crashed' + id, killed); + browserWindow.webContents.on("crashed", (event, killed) => { + electronSocket.emit("webContents-crashed" + id, killed); }); }); - socket.on('register-webContents-didFinishLoad', (id) => { + 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); + browserWindow.webContents.removeAllListeners("did-finish-load"); + browserWindow.webContents.on("did-finish-load", () => { + electronSocket.emit("webContents-didFinishLoad" + id); }); }); - socket.on('register-webContents-didStartNavigation', (id) => { + socket.on("register-webContents-didStartNavigation", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-start-navigation'); - browserWindow.webContents.on('did-start-navigation', (_, url) => { - electronSocket.emit('webContents-didStartNavigation' + id, url); + browserWindow.webContents.removeAllListeners("did-start-navigation"); + browserWindow.webContents.on("did-start-navigation", (_, url) => { + electronSocket.emit("webContents-didStartNavigation" + id, url); }); }); - socket.on('register-webContents-didNavigate', (id) => { + socket.on("register-webContents-didNavigate", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-navigate'); - browserWindow.webContents.on('did-navigate', (_, url, httpResponseCode) => { - electronSocket.emit('webContents-didNavigate' + id, { url, httpResponseCode }); + browserWindow.webContents.removeAllListeners("did-navigate"); + browserWindow.webContents.on("did-navigate", (_, url, httpResponseCode) => { + electronSocket.emit("webContents-didNavigate" + id, { + url, + httpResponseCode, + }); }); }); - socket.on('register-webContents-willRedirect', (id) => { + socket.on("register-webContents-willRedirect", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('will-redirect'); - browserWindow.webContents.on('will-redirect', (_, url) => { - electronSocket.emit('webContents-willRedirect' + id, url); + browserWindow.webContents.removeAllListeners("will-redirect"); + browserWindow.webContents.on("will-redirect", (_, url) => { + electronSocket.emit("webContents-willRedirect" + id, url); }); }); - socket.on('register-webContents-didFailLoad', (id) => { + socket.on("register-webContents-didFailLoad", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-fail-load'); - browserWindow.webContents.on('did-fail-load', (_, errorCode, validatedUrl) => { - electronSocket.emit('webContents-didFailLoad' + id, { errorCode, validatedUrl }); + browserWindow.webContents.removeAllListeners("did-fail-load"); + browserWindow.webContents.on("did-fail-load", (_, errorCode, validatedUrl) => { + electronSocket.emit("webContents-didFailLoad" + id, { + errorCode, + validatedUrl, + }); }); }); - socket.on('register-webContents-didRedirectNavigation', (id) => { + socket.on("register-webContents-didRedirectNavigation", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-redirect-navigation'); - browserWindow.webContents.on('did-redirect-navigation', (_, url) => { - electronSocket.emit('webContents-didRedirectNavigation' + id, url); + browserWindow.webContents.removeAllListeners("did-redirect-navigation"); + browserWindow.webContents.on("did-redirect-navigation", (_, url) => { + electronSocket.emit("webContents-didRedirectNavigation" + id, url); }); }); - socket.on('register-webContents-input-event', (id) => { + socket.on("register-webContents-input-event", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('input-event'); - browserWindow.webContents.on('input-event', (_, eventArgs) => { - if (eventArgs.type !== 'char') { - electronSocket.emit('webContents-input-event' + id, eventArgs); + browserWindow.webContents.removeAllListeners("input-event"); + browserWindow.webContents.on("input-event", (_, eventArgs) => { + if (eventArgs.type !== "char") { + electronSocket.emit("webContents-input-event" + id, eventArgs); } }); }); - socket.on('register-webContents-domReady', (id) => { + socket.on("register-webContents-domReady", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('dom-ready'); - browserWindow.webContents.on('dom-ready', () => { - electronSocket.emit('webContents-domReady' + id); + browserWindow.webContents.removeAllListeners("dom-ready"); + browserWindow.webContents.on("dom-ready", () => { + electronSocket.emit("webContents-domReady" + id); }); }); - socket.on('webContentsOpenDevTools', (id, options) => { + socket.on("webContentsOpenDevTools", (id, options) => { if (options) { getWindowById(id).webContents.openDevTools(options); } @@ -80,38 +86,38 @@ module.exports = (socket) => { getWindowById(id).webContents.openDevTools(); } }); - socket.on('webContents-getPrinters', async (id) => { + socket.on("webContents-getPrinters", async (id) => { const printers = await getWindowById(id).webContents.getPrintersAsync(); - electronSocket.emit('webContents-getPrinters-completed', printers); + electronSocket.emit("webContents-getPrinters-completed", printers); }); - socket.on('webContents-print', async (id, options = {}) => { + socket.on("webContents-print", async (id, options = {}) => { await getWindowById(id).webContents.print(options); - electronSocket.emit('webContents-print-completed', true); + electronSocket.emit("webContents-print-completed", true); }); - socket.on('webContents-printToPDF', async (id, options = {}, path) => { + socket.on("webContents-printToPDF", async (id, options = {}, path) => { const buffer = await getWindowById(id).webContents.printToPDF(options); fs.writeFile(path, buffer, (error) => { if (error) { - electronSocket.emit('webContents-printToPDF-completed', false); + electronSocket.emit("webContents-printToPDF-completed", false); } else { - electronSocket.emit('webContents-printToPDF-completed', true); + electronSocket.emit("webContents-printToPDF-completed", true); } }); }); - socket.on('webContents-executeJavaScript', async (id, code, userGesture = false) => { + socket.on("webContents-executeJavaScript", async (id, code, userGesture = false) => { const result = await getWindowById(id).webContents.executeJavaScript(code, userGesture); - electronSocket.emit('webContents-executeJavaScript-completed', result); + electronSocket.emit("webContents-executeJavaScript-completed", result); }); - socket.on('webContents-getUrl', function (id) { + socket.on("webContents-getUrl", function (id) { const browserWindow = getWindowById(id); - electronSocket.emit('webContents-getUrl' + id, browserWindow.webContents.getURL()); + electronSocket.emit("webContents-getUrl" + id, browserWindow.webContents.getURL()); }); - socket.on('webContents-session-allowNTLMCredentialsForDomains', (id, domains) => { + socket.on("webContents-session-allowNTLMCredentialsForDomains", (id, domains) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.allowNTLMCredentialsForDomains(domains); }); - socket.on('webContents-session-clearAuthCache', async (...args) => { + socket.on("webContents-session-clearAuthCache", async (...args) => { // Overload support: (id, guid) OR (id, options, guid) const browserWindow = getWindowById(args[0]); let guid; @@ -124,6 +130,7 @@ module.exports = (socket) => { const options = args[1]; guid = args[2]; try { + // @ts-ignore await browserWindow.webContents.session.clearAuthCache(options); } catch { @@ -134,87 +141,87 @@ module.exports = (socket) => { else { return; // invalid invocation } - electronSocket.emit('webContents-session-clearAuthCache-completed' + guid); + electronSocket.emit("webContents-session-clearAuthCache-completed" + guid); }); - socket.on('webContents-session-clearCache', async (id, guid) => { + socket.on("webContents-session-clearCache", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearCache(); - electronSocket.emit('webContents-session-clearCache-completed' + guid); + electronSocket.emit("webContents-session-clearCache-completed" + guid); }); - socket.on('webContents-session-clearHostResolverCache', async (id, guid) => { + socket.on("webContents-session-clearHostResolverCache", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearHostResolverCache(); - electronSocket.emit('webContents-session-clearHostResolverCache-completed' + guid); + electronSocket.emit("webContents-session-clearHostResolverCache-completed" + guid); }); - socket.on('webContents-session-clearStorageData', async (id, guid) => { + socket.on("webContents-session-clearStorageData", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearStorageData({}); - electronSocket.emit('webContents-session-clearStorageData-completed' + guid); + electronSocket.emit("webContents-session-clearStorageData-completed" + guid); }); - socket.on('webContents-session-clearStorageData-options', async (id, options, guid) => { + socket.on("webContents-session-clearStorageData-options", async (id, options, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearStorageData(options); - electronSocket.emit('webContents-session-clearStorageData-options-completed' + guid); + electronSocket.emit("webContents-session-clearStorageData-options-completed" + guid); }); - socket.on('webContents-session-createInterruptedDownload', (id, options) => { + socket.on("webContents-session-createInterruptedDownload", (id, options) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.createInterruptedDownload(options); }); - socket.on('webContents-session-disableNetworkEmulation', (id) => { + socket.on("webContents-session-disableNetworkEmulation", (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.disableNetworkEmulation(); }); - socket.on('webContents-session-enableNetworkEmulation', (id, options) => { + socket.on("webContents-session-enableNetworkEmulation", (id, options) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.enableNetworkEmulation(options); }); - socket.on('webContents-session-flushStorageData', (id) => { + socket.on("webContents-session-flushStorageData", (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.flushStorageData(); }); - socket.on('webContents-session-getBlobData', async (id, identifier, guid) => { + socket.on("webContents-session-getBlobData", async (id, identifier, guid) => { const browserWindow = getWindowById(id); const buffer = await browserWindow.webContents.session.getBlobData(identifier); - electronSocket.emit('webContents-session-getBlobData-completed' + guid, buffer.buffer); + electronSocket.emit("webContents-session-getBlobData-completed" + guid, buffer.buffer); }); - socket.on('webContents-session-getCacheSize', async (id, guid) => { + socket.on("webContents-session-getCacheSize", async (id, guid) => { const browserWindow = getWindowById(id); const size = await browserWindow.webContents.session.getCacheSize(); - electronSocket.emit('webContents-session-getCacheSize-completed' + guid, size); + electronSocket.emit("webContents-session-getCacheSize-completed" + guid, size); }); - socket.on('webContents-session-getPreloads', (id, guid) => { + socket.on("webContents-session-getPreloads", (id, guid) => { const browserWindow = getWindowById(id); const preloads = browserWindow.webContents.session.getPreloads(); - electronSocket.emit('webContents-session-getPreloads-completed' + guid, preloads); + electronSocket.emit("webContents-session-getPreloads-completed" + guid, preloads); }); - socket.on('webContents-session-getUserAgent', (id, guid) => { + socket.on("webContents-session-getUserAgent", (id, guid) => { const browserWindow = getWindowById(id); const userAgent = browserWindow.webContents.session.getUserAgent(); - electronSocket.emit('webContents-session-getUserAgent-completed' + guid, userAgent); + electronSocket.emit("webContents-session-getUserAgent-completed" + guid, userAgent); }); - socket.on('webContents-session-resolveProxy', async (id, url, guid) => { + socket.on("webContents-session-resolveProxy", async (id, url, guid) => { const browserWindow = getWindowById(id); const proxy = await browserWindow.webContents.session.resolveProxy(url); - electronSocket.emit('webContents-session-resolveProxy-completed' + guid, proxy); + electronSocket.emit("webContents-session-resolveProxy-completed" + guid, proxy); }); - socket.on('webContents-session-setDownloadPath', (id, path) => { + socket.on("webContents-session-setDownloadPath", (id, path) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.setDownloadPath(path); }); - socket.on('webContents-session-setPreloads', (id, preloads) => { + socket.on("webContents-session-setPreloads", (id, preloads) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.setPreloads(preloads); }); - socket.on('webContents-session-setProxy', async (id, configuration, guid) => { + socket.on("webContents-session-setProxy", async (id, configuration, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.setProxy(configuration); - electronSocket.emit('webContents-session-setProxy-completed' + guid); + electronSocket.emit("webContents-session-setProxy-completed" + guid); }); - socket.on('webContents-session-setUserAgent', (id, userAgent, acceptLanguages) => { + socket.on("webContents-session-setUserAgent", (id, userAgent, acceptLanguages) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.setUserAgent(userAgent, acceptLanguages); }); - socket.on('register-webContents-session-webRequest-onBeforeRequest', (id, filter) => { + socket.on("register-webContents-session-webRequest-onBeforeRequest", (id, filter) => { const browserWindow = getWindowById(id); const session = browserWindow.webContents.session; session.webRequest.onBeforeRequest(filter, (details, callback) => { @@ -225,83 +232,88 @@ module.exports = (socket) => { }); }); }); - socket.on('register-webContents-session-cookies-changed', (id) => { + socket.on("register-webContents-session-cookies-changed", (id) => { 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]); + 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.on('webContents-session-cookies-get', async (id, filter, guid) => { + socket.on("webContents-session-cookies-get", async (id, filter, guid) => { const browserWindow = getWindowById(id); const cookies = await browserWindow.webContents.session.cookies.get(filter); - electronSocket.emit('webContents-session-cookies-get-completed' + guid, cookies); + electronSocket.emit("webContents-session-cookies-get-completed" + guid, cookies); }); - socket.on('webContents-session-cookies-set', async (id, details, guid) => { + socket.on("webContents-session-cookies-set", async (id, details, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.set(details); - electronSocket.emit('webContents-session-cookies-set-completed' + guid); + electronSocket.emit("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, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.remove(url, name); - electronSocket.emit('webContents-session-cookies-remove-completed' + guid); + electronSocket.emit("webContents-session-cookies-remove-completed" + guid); }); - socket.on('webContents-session-cookies-flushStore', async (id, guid) => { + socket.on("webContents-session-cookies-flushStore", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.flushStore(); - electronSocket.emit('webContents-session-cookies-flushStore-completed' + guid); + electronSocket.emit("webContents-session-cookies-flushStore-completed" + guid); }); - socket.on('webContents-loadURL', (id, url, options) => { + socket.on("webContents-loadURL", (id, url, options) => { const browserWindow = getWindowById(id); browserWindow.webContents .loadURL(url, options) .then(() => { - electronSocket.emit('webContents-loadURL-complete' + id); + electronSocket.emit("webContents-loadURL-complete" + id); }) .catch((error) => { console.error(error); - electronSocket.emit('webContents-loadURL-error' + id, error); + electronSocket.emit("webContents-loadURL-error" + id, error); }); }); - socket.on('webContents-insertCSS', (id, isBrowserWindow, path) => { + socket.on("webContents-insertCSS", (id, isBrowserWindow, path) => { if (isBrowserWindow) { const browserWindow = getWindowById(id); if (browserWindow) { - browserWindow.webContents.insertCSS(fs.readFileSync(path, 'utf8')); + browserWindow.webContents.insertCSS(fs.readFileSync(path, "utf8")); } } else { - const browserViews = (global['browserViews'] = global['browserViews'] || []); + const browserViews = (global["browserViews"] = + global["browserViews"] || []); let view = null; for (let i = 0; i < browserViews.length; i++) { - if (browserViews[i]['id'] + 1000 === id) { + if (browserViews[i]["id"] + 1000 === id) { view = browserViews[i]; break; } } if (view) { - view.webContents.insertCSS(fs.readFileSync(path, 'utf8')); + view.webContents.insertCSS(fs.readFileSync(path, "utf8")); } } }); - socket.on('webContents-session-getAllExtensions', (id) => { + socket.on("webContents-session-getAllExtensions", (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); + electronSocket.emit("webContents-session-getAllExtensions-completed", chromeExtensionInfo); }); - socket.on('webContents-session-removeExtension', (id, name) => { + socket.on("webContents-session-removeExtension", (id, name) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.removeExtension(name); }); - socket.on('webContents-session-loadExtension', async (id, path, allowFileAccess = false) => { + socket.on("webContents-session-loadExtension", async (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); + electronSocket.emit("webContents-session-loadExtension-completed", extension); }); function getWindowById(id) { if (id >= 1000) { diff --git a/src/ElectronNET.Host/api/webContents.js.map b/src/ElectronNET.Host/api/webContents.js.map index 72f434f6..c3f3e451 100644 --- a/src/ElectronNET.Host/api/webContents.js.map +++ b/src/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/src/ElectronNET.Host/api/webContents.ts b/src/ElectronNET.Host/api/webContents.ts index e9eadb06..2d156619 100644 --- a/src/ElectronNET.Host/api/webContents.ts +++ b/src/ElectronNET.Host/api/webContents.ts @@ -1,98 +1,107 @@ -import { Socket } from 'net'; -import { BrowserWindow, BrowserView } from 'electron'; -import { browserViewMediateService } from './browserView'; -const fs = require('fs'); +import { Socket } from "net"; +import { BrowserWindow, BrowserView } from "electron"; +import { browserViewMediateService } from "./browserView"; +const fs = require("fs"); let electronSocket; export = (socket: Socket) => { electronSocket = socket; // The crashed event has been removed in Electron 29 - socket.on('register-webContents-crashed', (id) => { + socket.on("register-webContents-crashed", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('crashed'); + browserWindow.webContents.removeAllListeners("crashed"); // @ts-expect-error No overload matches this call - browserWindow.webContents.on('crashed', (event, killed) => { - electronSocket.emit('webContents-crashed' + id, killed); + browserWindow.webContents.on("crashed", (event, killed) => { + electronSocket.emit("webContents-crashed" + id, killed); }); }); - socket.on('register-webContents-didFinishLoad', (id) => { + 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); + browserWindow.webContents.removeAllListeners("did-finish-load"); + browserWindow.webContents.on("did-finish-load", () => { + electronSocket.emit("webContents-didFinishLoad" + id); }); }); - socket.on('register-webContents-didStartNavigation', (id) => { + socket.on("register-webContents-didStartNavigation", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-start-navigation'); - browserWindow.webContents.on('did-start-navigation', (_, url) => { - electronSocket.emit('webContents-didStartNavigation' + id, url); + browserWindow.webContents.removeAllListeners("did-start-navigation"); + browserWindow.webContents.on("did-start-navigation", (_, url) => { + electronSocket.emit("webContents-didStartNavigation" + id, url); }); }); - socket.on('register-webContents-didNavigate', (id) => { + socket.on("register-webContents-didNavigate", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-navigate'); - browserWindow.webContents.on('did-navigate', (_, url, httpResponseCode) => { - electronSocket.emit('webContents-didNavigate' + id, {url, httpResponseCode}); + browserWindow.webContents.removeAllListeners("did-navigate"); + browserWindow.webContents.on("did-navigate", (_, url, httpResponseCode) => { + electronSocket.emit("webContents-didNavigate" + id, { + url, + httpResponseCode, + }); }); }); - socket.on('register-webContents-willRedirect', (id) => { + socket.on("register-webContents-willRedirect", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('will-redirect'); - browserWindow.webContents.on('will-redirect', (_, url) => { - electronSocket.emit('webContents-willRedirect' + id, url); + browserWindow.webContents.removeAllListeners("will-redirect"); + browserWindow.webContents.on("will-redirect", (_, url) => { + electronSocket.emit("webContents-willRedirect" + id, url); }); }); - socket.on('register-webContents-didFailLoad', (id) => { + socket.on("register-webContents-didFailLoad", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-fail-load'); - browserWindow.webContents.on('did-fail-load', (_, errorCode, validatedUrl) => { - electronSocket.emit('webContents-didFailLoad' + id, {errorCode, validatedUrl}); - }); + browserWindow.webContents.removeAllListeners("did-fail-load"); + browserWindow.webContents.on( + "did-fail-load", + (_, errorCode, validatedUrl) => { + electronSocket.emit("webContents-didFailLoad" + id, { + errorCode, + validatedUrl, + }); + } + ); }); - socket.on('register-webContents-didRedirectNavigation', (id) => { + socket.on("register-webContents-didRedirectNavigation", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-redirect-navigation'); - browserWindow.webContents.on('did-redirect-navigation', (_, url) => { - electronSocket.emit('webContents-didRedirectNavigation' + id, url); + browserWindow.webContents.removeAllListeners("did-redirect-navigation"); + browserWindow.webContents.on("did-redirect-navigation", (_, url) => { + electronSocket.emit("webContents-didRedirectNavigation" + id, url); }); }); - socket.on('register-webContents-input-event', (id) => { + socket.on("register-webContents-input-event", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('input-event'); - browserWindow.webContents.on('input-event', (_, eventArgs) => { - if (eventArgs.type !== 'char') { - electronSocket.emit('webContents-input-event' + id, eventArgs); + browserWindow.webContents.removeAllListeners("input-event"); + browserWindow.webContents.on("input-event", (_, eventArgs) => { + if (eventArgs.type !== "char") { + electronSocket.emit("webContents-input-event" + id, eventArgs); } }); }); - socket.on('register-webContents-domReady', (id) => { + socket.on("register-webContents-domReady", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('dom-ready'); - browserWindow.webContents.on('dom-ready', () => { - electronSocket.emit('webContents-domReady' + id); + browserWindow.webContents.removeAllListeners("dom-ready"); + browserWindow.webContents.on("dom-ready", () => { + electronSocket.emit("webContents-domReady" + id); }); }); - socket.on('webContentsOpenDevTools', (id, options) => { + socket.on("webContentsOpenDevTools", (id, options) => { if (options) { getWindowById(id).webContents.openDevTools(options); } else { @@ -100,55 +109,68 @@ export = (socket: Socket) => { } }); - socket.on('webContents-getPrinters', async (id) => { + socket.on("webContents-getPrinters", async (id) => { const printers = await getWindowById(id).webContents.getPrintersAsync(); - electronSocket.emit('webContents-getPrinters-completed', printers); + electronSocket.emit("webContents-getPrinters-completed", printers); }); - socket.on('webContents-print', async (id, options = {}) => { + socket.on("webContents-print", async (id, options = {}) => { await getWindowById(id).webContents.print(options); - electronSocket.emit('webContents-print-completed', true); + electronSocket.emit("webContents-print-completed", true); }); - socket.on('webContents-printToPDF', async (id, options = {}, path) => { + socket.on("webContents-printToPDF", async (id, options = {}, path) => { const buffer = await getWindowById(id).webContents.printToPDF(options); fs.writeFile(path, buffer, (error) => { if (error) { - electronSocket.emit('webContents-printToPDF-completed', false); + electronSocket.emit("webContents-printToPDF-completed", false); } else { - electronSocket.emit('webContents-printToPDF-completed', true); + electronSocket.emit("webContents-printToPDF-completed", true); } }); }); - socket.on('webContents-executeJavaScript', async (id, code, userGesture = false) => { - const result = await getWindowById(id).webContents.executeJavaScript(code, userGesture); - electronSocket.emit('webContents-executeJavaScript-completed', result); - }); + socket.on( + "webContents-executeJavaScript", + async (id, code, userGesture = false) => { + const result = await getWindowById(id).webContents.executeJavaScript( + code, + userGesture + ); + electronSocket.emit("webContents-executeJavaScript-completed", result); + } + ); - socket.on('webContents-getUrl', function (id) { + socket.on("webContents-getUrl", function (id) { const browserWindow = getWindowById(id); - electronSocket.emit('webContents-getUrl' + id, browserWindow.webContents.getURL()); + electronSocket.emit( + "webContents-getUrl" + id, + browserWindow.webContents.getURL() + ); }); - socket.on('webContents-session-allowNTLMCredentialsForDomains', (id, domains) => { - const browserWindow = getWindowById(id); - browserWindow.webContents.session.allowNTLMCredentialsForDomains(domains); - }); + socket.on( + "webContents-session-allowNTLMCredentialsForDomains", + (id, domains) => { + const browserWindow = getWindowById(id); + browserWindow.webContents.session.allowNTLMCredentialsForDomains(domains); + } + ); - socket.on('webContents-session-clearAuthCache', async (...args) => { + socket.on("webContents-session-clearAuthCache", async (...args) => { // Overload support: (id, guid) OR (id, options, guid) const browserWindow = getWindowById(args[0]); let guid: string; - if (args.length ===2) { + if (args.length === 2) { // No options guid = args[1]; await browserWindow.webContents.session.clearAuthCache(); - } else if (args.length ===3) { + } else if (args.length === 3) { const options = args[1]; guid = args[2]; try { + // @ts-ignore await browserWindow.webContents.session.clearAuthCache(options); } catch { // Fallback to clearing without options if Electron version rejects custom options @@ -157,199 +179,258 @@ export = (socket: Socket) => { } else { return; // invalid invocation } - electronSocket.emit('webContents-session-clearAuthCache-completed' + guid); + electronSocket.emit("webContents-session-clearAuthCache-completed" + guid); }); - socket.on('webContents-session-clearCache', async (id, guid) => { + socket.on("webContents-session-clearCache", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearCache(); - electronSocket.emit('webContents-session-clearCache-completed' + guid); + electronSocket.emit("webContents-session-clearCache-completed" + guid); }); - socket.on('webContents-session-clearHostResolverCache', async (id, guid) => { + socket.on("webContents-session-clearHostResolverCache", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearHostResolverCache(); - electronSocket.emit('webContents-session-clearHostResolverCache-completed' + guid); + electronSocket.emit( + "webContents-session-clearHostResolverCache-completed" + guid + ); }); - socket.on('webContents-session-clearStorageData', async (id, guid) => { + socket.on("webContents-session-clearStorageData", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearStorageData({}); - electronSocket.emit('webContents-session-clearStorageData-completed' + guid); + electronSocket.emit( + "webContents-session-clearStorageData-completed" + guid + ); }); - socket.on('webContents-session-clearStorageData-options', async (id, options, guid) => { - const browserWindow = getWindowById(id); - await browserWindow.webContents.session.clearStorageData(options); + socket.on( + "webContents-session-clearStorageData-options", + async (id, options, guid) => { + const browserWindow = getWindowById(id); + await browserWindow.webContents.session.clearStorageData(options); - electronSocket.emit('webContents-session-clearStorageData-options-completed' + guid); - }); + electronSocket.emit( + "webContents-session-clearStorageData-options-completed" + guid + ); + } + ); - socket.on('webContents-session-createInterruptedDownload', (id, options) => { + socket.on("webContents-session-createInterruptedDownload", (id, options) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.createInterruptedDownload(options); }); - socket.on('webContents-session-disableNetworkEmulation', (id) => { + socket.on("webContents-session-disableNetworkEmulation", (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.disableNetworkEmulation(); }); - socket.on('webContents-session-enableNetworkEmulation', (id, options) => { + socket.on("webContents-session-enableNetworkEmulation", (id, options) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.enableNetworkEmulation(options); }); - socket.on('webContents-session-flushStorageData', (id) => { + socket.on("webContents-session-flushStorageData", (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.flushStorageData(); }); - socket.on('webContents-session-getBlobData', async (id, identifier, guid) => { + socket.on("webContents-session-getBlobData", async (id, identifier, guid) => { const browserWindow = getWindowById(id); - const buffer = await browserWindow.webContents.session.getBlobData(identifier); + const buffer = await browserWindow.webContents.session.getBlobData( + identifier + ); - electronSocket.emit('webContents-session-getBlobData-completed' + guid, buffer.buffer); + electronSocket.emit( + "webContents-session-getBlobData-completed" + guid, + buffer.buffer + ); }); - socket.on('webContents-session-getCacheSize', async (id, guid) => { + socket.on("webContents-session-getCacheSize", async (id, guid) => { const browserWindow = getWindowById(id); const size = await browserWindow.webContents.session.getCacheSize(); - electronSocket.emit('webContents-session-getCacheSize-completed' + guid, size); + electronSocket.emit( + "webContents-session-getCacheSize-completed" + guid, + size + ); }); - socket.on('webContents-session-getPreloads', (id, guid) => { + socket.on("webContents-session-getPreloads", (id, guid) => { const browserWindow = getWindowById(id); const preloads = browserWindow.webContents.session.getPreloads(); - electronSocket.emit('webContents-session-getPreloads-completed' + guid, preloads); + electronSocket.emit( + "webContents-session-getPreloads-completed" + guid, + preloads + ); }); - socket.on('webContents-session-getUserAgent', (id, guid) => { + socket.on("webContents-session-getUserAgent", (id, guid) => { const browserWindow = getWindowById(id); const userAgent = browserWindow.webContents.session.getUserAgent(); - electronSocket.emit('webContents-session-getUserAgent-completed' + guid, userAgent); + electronSocket.emit( + "webContents-session-getUserAgent-completed" + guid, + userAgent + ); }); - socket.on('webContents-session-resolveProxy', async (id, url, guid) => { + socket.on("webContents-session-resolveProxy", async (id, url, guid) => { const browserWindow = getWindowById(id); const proxy = await browserWindow.webContents.session.resolveProxy(url); - electronSocket.emit('webContents-session-resolveProxy-completed' + guid, proxy); + electronSocket.emit( + "webContents-session-resolveProxy-completed" + guid, + proxy + ); }); - socket.on('webContents-session-setDownloadPath', (id, path) => { + socket.on("webContents-session-setDownloadPath", (id, path) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.setDownloadPath(path); }); - socket.on('webContents-session-setPreloads', (id, preloads) => { + socket.on("webContents-session-setPreloads", (id, preloads) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.setPreloads(preloads); }); - socket.on('webContents-session-setProxy', async (id, configuration, guid) => { + socket.on("webContents-session-setProxy", async (id, configuration, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.setProxy(configuration); - electronSocket.emit('webContents-session-setProxy-completed' + guid); + electronSocket.emit("webContents-session-setProxy-completed" + guid); }); - socket.on('webContents-session-setUserAgent', (id, userAgent, acceptLanguages) => { - const browserWindow = getWindowById(id); - browserWindow.webContents.session.setUserAgent(userAgent, acceptLanguages); - }); + socket.on( + "webContents-session-setUserAgent", + (id, userAgent, acceptLanguages) => { + const browserWindow = getWindowById(id); + browserWindow.webContents.session.setUserAgent( + userAgent, + acceptLanguages + ); + } + ); - socket.on('register-webContents-session-webRequest-onBeforeRequest', (id, filter) => { + socket.on( + "register-webContents-session-webRequest-onBeforeRequest", + (id, filter) => { const browserWindow = getWindowById(id); const session = browserWindow.webContents.session; session.webRequest.onBeforeRequest(filter, (details, callback) => { - socket.emit(`webContents-session-webRequest-onBeforeRequest${id}`, details); - // Listen for a response from C# to continue the request - electronSocket.once(`webContents-session-webRequest-onBeforeRequest-response${id}`, (response) => { - callback(response); - }); + socket.emit( + `webContents-session-webRequest-onBeforeRequest${id}`, + details + ); + // Listen for a response from C# to continue the request + electronSocket.once( + `webContents-session-webRequest-onBeforeRequest-response${id}`, + (response) => { + callback(response); + } + ); }); - }); + } + ); - socket.on('register-webContents-session-cookies-changed', (id) => { + socket.on("register-webContents-session-cookies-changed", (id) => { 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]); - }); + 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.on('webContents-session-cookies-get', async (id, filter, guid) => { + socket.on("webContents-session-cookies-get", async (id, filter, guid) => { const browserWindow = getWindowById(id); const cookies = await browserWindow.webContents.session.cookies.get(filter); - electronSocket.emit('webContents-session-cookies-get-completed' + guid, cookies); + electronSocket.emit( + "webContents-session-cookies-get-completed" + guid, + cookies + ); }); - socket.on('webContents-session-cookies-set', async (id, details, guid) => { + socket.on("webContents-session-cookies-set", async (id, details, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.set(details); - electronSocket.emit('webContents-session-cookies-set-completed' + guid); + electronSocket.emit("webContents-session-cookies-set-completed" + guid); }); - socket.on('webContents-session-cookies-remove', async (id, url, name, guid) => { - const browserWindow = getWindowById(id); - await browserWindow.webContents.session.cookies.remove(url, name); + socket.on( + "webContents-session-cookies-remove", + async (id, url, name, guid) => { + const browserWindow = getWindowById(id); + await browserWindow.webContents.session.cookies.remove(url, name); - electronSocket.emit('webContents-session-cookies-remove-completed' + guid); - }); + electronSocket.emit( + "webContents-session-cookies-remove-completed" + guid + ); + } + ); - socket.on('webContents-session-cookies-flushStore', async (id, guid) => { + socket.on("webContents-session-cookies-flushStore", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.flushStore(); - electronSocket.emit('webContents-session-cookies-flushStore-completed' + guid); + electronSocket.emit( + "webContents-session-cookies-flushStore-completed" + guid + ); }); - socket.on('webContents-loadURL', (id, url, options) => { + socket.on("webContents-loadURL", (id, url, options) => { const browserWindow = getWindowById(id); browserWindow.webContents .loadURL(url, options) .then(() => { - electronSocket.emit('webContents-loadURL-complete' + id); + electronSocket.emit("webContents-loadURL-complete" + id); }) .catch((error) => { console.error(error); - electronSocket.emit('webContents-loadURL-error' + id, error); + electronSocket.emit("webContents-loadURL-error" + id, error); }); }); - socket.on('webContents-insertCSS', (id, isBrowserWindow, path) => { + socket.on("webContents-insertCSS", (id, isBrowserWindow, path) => { if (isBrowserWindow) { const browserWindow = getWindowById(id); if (browserWindow) { - browserWindow.webContents.insertCSS(fs.readFileSync(path, 'utf8')); + browserWindow.webContents.insertCSS(fs.readFileSync(path, "utf8")); } } else { - const browserViews: BrowserView[] = (global['browserViews'] = global['browserViews'] || []) as BrowserView[]; + const browserViews: BrowserView[] = (global["browserViews"] = + global["browserViews"] || []) as BrowserView[]; let view: BrowserView = null; for (let i = 0; i < browserViews.length; i++) { - if (browserViews[i]['id'] + 1000 === id) { + if (browserViews[i]["id"] + 1000 === id) { view = browserViews[i]; break; } } if (view) { - view.webContents.insertCSS(fs.readFileSync(path, 'utf8')); + view.webContents.insertCSS(fs.readFileSync(path, "utf8")); } } }); - socket.on('webContents-session-getAllExtensions', (id) => { + socket.on("webContents-session-getAllExtensions", (id) => { const browserWindow = getWindowById(id); const extensionsList = browserWindow.webContents.session.getAllExtensions(); const chromeExtensionInfo = []; @@ -358,22 +439,36 @@ export = (socket: Socket) => { chromeExtensionInfo.push(extensionsList[key]); }); - electronSocket.emit('webContents-session-getAllExtensions-completed', chromeExtensionInfo); + electronSocket.emit( + "webContents-session-getAllExtensions-completed", + chromeExtensionInfo + ); }); - socket.on('webContents-session-removeExtension', (id, name) => { + socket.on("webContents-session-removeExtension", (id, name) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.removeExtension(name); }); - socket.on('webContents-session-loadExtension', async (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.on( + "webContents-session-loadExtension", + async (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 + ); + } + ); - function getWindowById(id: number): Electron.BrowserWindow | Electron.BrowserView { + function getWindowById( + id: number + ): Electron.BrowserWindow | Electron.BrowserView { if (id >= 1000) { return browserViewMediateService(id - 1000); } diff --git a/src/ElectronNET.Host/scripts/blazor-preload.js b/src/ElectronNET.Host/scripts/blazor-preload.js new file mode 100644 index 00000000..e2754628 --- /dev/null +++ b/src/ElectronNET.Host/scripts/blazor-preload.js @@ -0,0 +1,2 @@ +global.process = undefined; +global.module = undefined; diff --git a/src/ElectronNET.IntegrationTests/Common/SkipOnWslFactAttribute.cs b/src/ElectronNET.IntegrationTests/Common/SkipOnWslFactAttribute.cs new file mode 100644 index 00000000..8c1a3d02 --- /dev/null +++ b/src/ElectronNET.IntegrationTests/Common/SkipOnWslFactAttribute.cs @@ -0,0 +1,49 @@ +namespace ElectronNET.IntegrationTests.Common +{ + using System.Runtime.InteropServices; + + [AttributeUsage(AttributeTargets.Method)] + internal sealed class SkipOnWslFactAttribute : FactAttribute + { + private static readonly bool IsOnWsl; + + static SkipOnWslFactAttribute() + { + IsOnWsl = DetectWsl(); + } + + /// + /// Initializes a new instance of the class. + /// + public SkipOnWslFactAttribute() + { + if (IsOnWsl) + { + this.Skip = "Skipping test on WSL environment."; + } + } + + private static bool DetectWsl() + { + try + { + if (!RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + return false; + } + + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("WSL_DISTRO_NAME")) || + !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("WSL_INTEROP"))) + { + return true; + } + + return false; + } + catch + { + return false; + } + } + } +} diff --git a/src/ElectronNET.IntegrationTests/ElectronFixture.cs b/src/ElectronNET.IntegrationTests/ElectronFixture.cs index 68a1ec9b..34722de3 100644 --- a/src/ElectronNET.IntegrationTests/ElectronFixture.cs +++ b/src/ElectronNET.IntegrationTests/ElectronFixture.cs @@ -1,38 +1,65 @@ namespace ElectronNET.IntegrationTests { + using System.Diagnostics.CodeAnalysis; using System.Reflection; using ElectronNET.API; using ElectronNET.API.Entities; // Shared fixture that starts Electron runtime once + [SuppressMessage("ReSharper", "MethodHasAsyncOverload")] public class ElectronFixture : IAsyncLifetime { public BrowserWindow MainWindow { get; private set; } = null!; public async Task InitializeAsync() { - AppDomain.CurrentDomain.SetData("ElectronTestAssembly", Assembly.GetExecutingAssembly()); - var runtimeController = ElectronNetRuntime.RuntimeController; - await runtimeController.Start(); - await runtimeController.WaitReadyTask; - - // create hidden window for tests (avoid showing UI) - this.MainWindow = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions + try { - Show = false, - Width = 800, - Height = 600, - }); + Console.Error.WriteLine("[ElectronFixture] InitializeAsync: start"); + AppDomain.CurrentDomain.SetData("ElectronTestAssembly", Assembly.GetExecutingAssembly()); + + Console.WriteLine("[ElectronFixture] Acquire RuntimeController"); + var runtimeController = ElectronNetRuntime.RuntimeController; + ElectronNetRuntime.ElectronExtraArguments = "--no-sandbox"; + + Console.Error.WriteLine("[ElectronFixture] Starting Electron runtime..."); + await runtimeController.Start(); + + Console.Error.WriteLine("[ElectronFixture] Waiting for Ready..."); + await runtimeController.WaitReadyTask.WaitAsync(TimeSpan.FromSeconds(10)); - // Clear potential cache side-effects - await this.MainWindow.WebContents.Session.ClearCacheAsync(); + if (!runtimeController.WaitReadyTask.IsCompleted) + { + throw new TimeoutException("The Electron process did not start within 10 seconds"); + } + + Console.Error.WriteLine("[ElectronFixture] Runtime Ready"); + + // create hidden window for tests (avoid showing UI) + this.MainWindow = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions + { + Show = false, + Width = 800, + Height = 600, + }, "about:blank"); + + await this.MainWindow.WebContents.Session.ClearCacheAsync(); + } + catch (Exception ex) + { + Console.Error.WriteLine("[ElectronFixture] InitializeAsync: exception"); + Console.Error.WriteLine(ex.ToString()); + throw; + } } public async Task DisposeAsync() { var runtimeController = ElectronNetRuntime.RuntimeController; + Console.Error.WriteLine("[ElectronFixture] Stopping Electron runtime..."); await runtimeController.Stop(); await runtimeController.WaitStoppedTask; + Console.Error.WriteLine("[ElectronFixture] Runtime stopped"); } } diff --git a/src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj b/src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj index 373440c2..d8742ff0 100644 --- a/src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj +++ b/src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj @@ -8,7 +8,7 @@ - net8.0 + net10.0 enable enable false @@ -16,14 +16,14 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + @@ -37,6 +37,12 @@ false + + + PreserveNewest + + + diff --git a/src/ElectronNET.IntegrationTests/Tests/AppTests.cs b/src/ElectronNET.IntegrationTests/Tests/AppTests.cs index 4512f6b9..90cab436 100644 --- a/src/ElectronNET.IntegrationTests/Tests/AppTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/AppTests.cs @@ -1,10 +1,10 @@ namespace ElectronNET.IntegrationTests.Tests { - using System.Runtime.InteropServices; using ElectronNET.API; using ElectronNET.API.Entities; using System; using System.IO; + using System.Runtime.Versioning; using System.Threading.Tasks; [Collection("ElectronCollection")] @@ -46,28 +46,6 @@ public async Task Can_get_special_paths() Directory.Exists(temp).Should().BeTrue(); } - - [Fact(Timeout = 20000)] - public async Task Badge_count_roundtrip_where_supported() - { - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - { - var ok = await Electron.App.SetBadgeCountAsync(3); - ok.Should().BeTrue(); - var count = await Electron.App.GetBadgeCountAsync(); - count.Should().Be(3); - // reset - await Electron.App.SetBadgeCountAsync(0); - } - else - { - // On Windows it's usually unsupported; ensure badge query works and returns a non-negative value - await Electron.App.SetBadgeCountAsync(0); // ignore return value - var count = await Electron.App.GetBadgeCountAsync(); - count.Should().BeGreaterOrEqualTo(0); - } - } - [Fact(Timeout = 20000)] public async Task Can_get_app_metrics() { @@ -83,21 +61,15 @@ public async Task Can_get_gpu_feature_status() status.Should().NotBeNull(); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task Can_get_login_item_settings() { var settings = await Electron.App.GetLoginItemSettingsAsync(); settings.Should().NotBeNull(); } - [Fact(Timeout = 20000)] - public async Task Can_set_app_logs_path() - { - var tempDir = Path.Combine(Path.GetTempPath(), "ElectronLogsTest" + Guid.NewGuid().ToString("N")); - Directory.CreateDirectory(tempDir); - Electron.App.SetAppLogsPath(tempDir); - } - [Fact(Timeout = 20000)] public async Task CommandLine_append_and_query_switch() { @@ -107,7 +79,9 @@ public async Task CommandLine_append_and_query_switch() (await Electron.App.CommandLine.GetSwitchValueAsync(switchName)).Should().Be("value123"); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task Accessibility_support_toggle() { Electron.App.SetAccessibilitySupportEnabled(true); @@ -126,13 +100,15 @@ public async Task UserAgentFallback_roundtrip() Electron.App.UserAgentFallback = original; // restore } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("macOS")] public async Task BadgeCount_set_and_reset_where_supported() { await Electron.App.SetBadgeCountAsync(2); var count = await Electron.App.GetBadgeCountAsync(); // Some platforms may always return0; just ensure call didn't throw and is non-negative - count.Should().BeGreaterOrEqualTo(0); + count.Should().BeGreaterThanOrEqualTo(0); await Electron.App.SetBadgeCountAsync(0); } @@ -143,17 +119,6 @@ public async Task App_metrics_have_cpu_info() metrics[0].Cpu.Should().NotBeNull(); } - [Fact(Timeout = 20000)] - public async Task App_badge_count_roundtrip() - { - // Set then get (non-mac platforms treat as no-op but should return0 or set value) - var success = await Electron.App.SetBadgeCountAsync(3); - success.Should().BeTrue(); - var count = await Electron.App.GetBadgeCountAsync(); - // Allow fallback to0 on platforms without badge support - (count ==3 || count ==0).Should().BeTrue(); - } - [Fact(Timeout = 20000)] public async Task App_gpu_feature_status_has_some_fields() { @@ -163,4 +128,4 @@ public async Task App_gpu_feature_status_has_some_fields() status.VideoDecode.Should().NotBeNull(); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.IntegrationTests/Tests/BrowserWindowTests.cs b/src/ElectronNET.IntegrationTests/Tests/BrowserWindowTests.cs index e7e69021..67dc1841 100644 --- a/src/ElectronNET.IntegrationTests/Tests/BrowserWindowTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/BrowserWindowTests.cs @@ -1,8 +1,10 @@ namespace ElectronNET.IntegrationTests.Tests { using System.Runtime.InteropServices; + using System.Runtime.Versioning; using ElectronNET.API; using ElectronNET.API.Entities; + using ElectronNET.IntegrationTests.Common; [Collection("ElectronCollection")] public class BrowserWindowTests @@ -42,7 +44,7 @@ public async Task Can_set_progress_bar_and_clear() await Task.Delay(50); } - [Fact(Timeout = 20000)] + [SkipOnWslFact(Timeout = 20000)] public async Task Can_set_and_get_position() { this.fx.MainWindow.SetPosition(134, 246); @@ -91,7 +93,9 @@ public async Task AlwaysOnTop_toggle_and_query() (await this.fx.MainWindow.IsAlwaysOnTopAsync()).Should().BeFalse(); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public async Task MenuBar_auto_hide_and_visibility() { this.fx.MainWindow.SetAutoHideMenuBar(true); @@ -105,7 +109,7 @@ public async Task MenuBar_auto_hide_and_visibility() [Fact(Timeout = 20000)] public async Task ReadyToShow_event_fires_after_content_ready() { - var window = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = false }); + var window = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = false }, "about:blank"); var tcs = new TaskCompletionSource(); window.OnReadyToShow += () => tcs.TrySetResult(); @@ -125,7 +129,7 @@ public async Task ReadyToShow_event_fires_after_content_ready() [Fact(Timeout = 20000)] public async Task PageTitleUpdated_event_fires_on_title_change() { - var window = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = true }); + var window = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = true }, "about:blank"); var tcs = new TaskCompletionSource(); window.OnPageTitleUpdated += title => tcs.TrySetResult(title); @@ -145,7 +149,7 @@ public async Task PageTitleUpdated_event_fires_on_title_change() [Fact(Timeout = 20000)] public async Task Resize_event_fires_on_size_change() { - var window = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = false }); + var window = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = false }, "about:blank"); var resized = false; window.OnResize += () => resized = true; window.SetSize(500, 400); @@ -165,7 +169,9 @@ public async Task Progress_bar_and_always_on_top_toggle() (await win.IsAlwaysOnTopAsync()).Should().BeFalse(); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public async Task Menu_bar_visibility_and_auto_hide() { var win = this.fx.MainWindow; @@ -178,7 +184,7 @@ public async Task Menu_bar_visibility_and_auto_hide() [Fact(Timeout = 20000)] public async Task Parent_child_relationship_roundtrip() { - var child = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = false, Width = 300, Height = 200 }); + var child = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = false, Width = 300, Height = 200 }, "about:blank"); this.fx.MainWindow.SetParentWindow(null); // ensure top-level child.SetParentWindow(this.fx.MainWindow); var parent = await child.GetParentWindowAsync(); @@ -188,7 +194,8 @@ public async Task Parent_child_relationship_roundtrip() child.Destroy(); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] public async Task Represented_filename_and_edited_flags() { var win = this.fx.MainWindow; @@ -196,28 +203,13 @@ public async Task Represented_filename_and_edited_flags() File.WriteAllText(temp, "test"); win.SetRepresentedFilename(temp); var represented = await win.GetRepresentedFilenameAsync(); - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - represented.Should().Be(temp); - } - else - { - // Non-macOS platforms may not support represented filename; empty is acceptable - represented.Should().BeEmpty(); - } + represented.Should().Be(temp); win.SetDocumentEdited(true); var edited = await win.IsDocumentEditedAsync(); - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - edited.Should().BeTrue(); - } - else - { - edited.Should().BeFalse(); // unsupported on non-mac platforms - } + edited.Should().BeTrue(); win.SetDocumentEdited(false); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.IntegrationTests/Tests/ClipboardTests.cs b/src/ElectronNET.IntegrationTests/Tests/ClipboardTests.cs index b3bd2dd1..17ff0dd6 100644 --- a/src/ElectronNET.IntegrationTests/Tests/ClipboardTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/ClipboardTests.cs @@ -1,5 +1,6 @@ namespace ElectronNET.IntegrationTests.Tests { + using System.Runtime.Versioning; using ElectronNET.API; [Collection("ElectronCollection")] @@ -31,7 +32,9 @@ public async Task Available_formats_contains_text_after_write() formats.Should().Contain(f => f.Contains("text") || f.Contains("TEXT") || f.Contains("plain")); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task Bookmark_write_and_read() { var url = "https://electron-test.com"; @@ -40,4 +43,4 @@ public async Task Bookmark_write_and_read() bookmark.Url.Should().Be(url); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.IntegrationTests/Tests/NativeThemeTests.cs b/src/ElectronNET.IntegrationTests/Tests/NativeThemeTests.cs index f6b8f5ce..4c7ac12d 100644 --- a/src/ElectronNET.IntegrationTests/Tests/NativeThemeTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/NativeThemeTests.cs @@ -1,5 +1,6 @@ namespace ElectronNET.IntegrationTests.Tests { + using System.Runtime.Versioning; using ElectronNET.API; using ElectronNET.API.Entities; @@ -46,18 +47,22 @@ public async Task Updated_event_fires_on_change() fired.Should().BeTrue(); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task Should_use_high_contrast_colors_check() { var metrics = await Electron.NativeTheme.ShouldUseHighContrastColorsAsync(); metrics.Should().Be(false); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task Should_use_inverted_colors_check() { var metrics = await Electron.NativeTheme.ShouldUseInvertedColorSchemeAsync(); metrics.Should().Be(false); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.IntegrationTests/Tests/ProcessTests.cs b/src/ElectronNET.IntegrationTests/Tests/ProcessTests.cs index d581c3b4..2d192979 100644 --- a/src/ElectronNET.IntegrationTests/Tests/ProcessTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/ProcessTests.cs @@ -9,7 +9,7 @@ public class ProcessTests public async Task Process_info_is_accessible() { // Use renderer to fetch process info and round-trip - var execPath = await Electron.WindowManager.CreateWindowAsync(new API.Entities.BrowserWindowOptions { Show = false }); + var execPath = await Electron.WindowManager.CreateWindowAsync(new API.Entities.BrowserWindowOptions { Show = false }, "about:blank"); var result = await execPath.WebContents.ExecuteJavaScriptAsync("process.execPath && process.platform ? 'ok' : 'fail'"); result.Should().Be("ok"); } diff --git a/src/ElectronNET.IntegrationTests/Tests/ScreenTests.cs b/src/ElectronNET.IntegrationTests/Tests/ScreenTests.cs index 1cdb5347..2ecf9ecb 100644 --- a/src/ElectronNET.IntegrationTests/Tests/ScreenTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/ScreenTests.cs @@ -1,8 +1,9 @@ -using ElectronNET.API.Entities; - namespace ElectronNET.IntegrationTests.Tests { + using System.Runtime.Versioning; using ElectronNET.API; + using ElectronNET.API.Entities; + using ElectronNET.IntegrationTests.Common; [Collection("ElectronCollection")] public class ScreenTests @@ -15,7 +16,7 @@ public ScreenTests(ElectronFixture fx) this.fx = fx; } - [Fact(Timeout = 20000)] + [SkipOnWslFact(Timeout = 20000)] public async Task Primary_display_has_positive_dimensions() { var display = await Electron.Screen.GetPrimaryDisplayAsync(); @@ -23,7 +24,7 @@ public async Task Primary_display_has_positive_dimensions() display.Size.Height.Should().BeGreaterThan(0); } - [Fact(Timeout = 20000)] + [SkipOnWslFact(Timeout = 20000)] public async Task GetAllDisplays_returns_at_least_one() { var displays = await Electron.Screen.GetAllDisplaysAsync(); @@ -40,7 +41,8 @@ public async Task GetCursorScreenPoint_check() point.Y.Should().BeGreaterThanOrEqualTo(0); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] public async Task GetMenuBarWorkArea_check() { var area = await Electron.Screen.GetMenuBarWorkAreaAsync(); @@ -51,7 +53,7 @@ public async Task GetMenuBarWorkArea_check() area.Width.Should().BeGreaterThan(0); } - [Fact(Timeout = 20000)] + [SkipOnWslFact(Timeout = 20000)] public async Task GetDisplayNearestPoint_check() { var point = new Point @@ -64,8 +66,8 @@ public async Task GetDisplayNearestPoint_check() display.Size.Width.Should().BeGreaterThan(0); display.Size.Height.Should().BeGreaterThan(0); } - - [Fact(Timeout = 20000)] + + [SkipOnWslFact(Timeout = 20000)] public async Task GetDisplayMatching_check() { var rectangle = new Rectangle @@ -81,4 +83,4 @@ public async Task GetDisplayMatching_check() display.Size.Height.Should().BeGreaterThan(0); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.IntegrationTests/Tests/ShellTests.cs b/src/ElectronNET.IntegrationTests/Tests/ShellTests.cs index e81c762c..ff185db1 100644 --- a/src/ElectronNET.IntegrationTests/Tests/ShellTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/ShellTests.cs @@ -5,7 +5,7 @@ namespace ElectronNET.IntegrationTests.Tests [Collection("ElectronCollection")] public class ShellTests { - [Fact(Timeout = 20000)] + [Fact(Skip = "This can keep the test process hanging until the e-mail window is closed")] public async Task OpenExternal_invalid_scheme_returns_error_or_empty() { var error = await Electron.Shell.OpenExternalAsync("mailto:test@example.com"); diff --git a/src/ElectronNET.IntegrationTests/Tests/ThumbarButtonTests.cs b/src/ElectronNET.IntegrationTests/Tests/ThumbarButtonTests.cs index 2ba58b14..15253bd5 100644 --- a/src/ElectronNET.IntegrationTests/Tests/ThumbarButtonTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/ThumbarButtonTests.cs @@ -1,6 +1,6 @@ namespace ElectronNET.IntegrationTests.Tests { - using System.Runtime.InteropServices; + using System.Runtime.Versioning; using ElectronNET.API.Entities; [Collection("ElectronCollection")] @@ -13,7 +13,8 @@ public ThumbarButtonTests(ElectronFixture fx) this.fx = fx; } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("Windows")] public async Task SetThumbarButtons_returns_success() { var btn = new ThumbarButton("icon.png") { Tooltip = "Test" }; @@ -21,14 +22,10 @@ public async Task SetThumbarButtons_returns_success() success.Should().BeTrue(); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("Windows")] public async Task Thumbar_button_click_invokes_callback() { - if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - return; // only meaningful on Windows taskbar - } - var icon = Path.Combine(Directory.GetCurrentDirectory(), "ElectronNET.WebApp", "wwwroot", "icon.png"); if (!File.Exists(icon)) { @@ -41,4 +38,4 @@ public async Task Thumbar_button_click_invokes_callback() ok.Should().BeTrue(); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.IntegrationTests/xunit.runner.json b/src/ElectronNET.IntegrationTests/xunit.runner.json new file mode 100644 index 00000000..9283731d --- /dev/null +++ b/src/ElectronNET.IntegrationTests/xunit.runner.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", + "methodDisplay": "method", + "diagnosticMessages": true, + "parallelizeTestCollections": false, + "longRunningTestSeconds": 60 +} diff --git a/src/ElectronNET.Lean.sln b/src/ElectronNET.Lean.sln index 87a55e95..aa906b1c 100644 --- a/src/ElectronNET.Lean.sln +++ b/src/ElectronNET.Lean.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.12.35707.178 +# Visual Studio Version 18 +VisualStudioVersion = 18.0.11205.157 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElectronNET.API", "ElectronNET.API\ElectronNET.API.csproj", "{A78157BA-B754-45F1-969F-D6A513CA0E72}" EndProject @@ -23,6 +23,15 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElectronNET.AspNet", "Elect EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{1BB6F634-2831-4496-83A6-BC6761DCEC8D}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{7175950D-2D93-4A4C-8E55-5197482FE663}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElectronNET.IntegrationTests", "ElectronNET.IntegrationTests\ElectronNET.IntegrationTests.csproj", "{AE877E48-6B44-63C2-8EA0-DB58D096B553}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{319B386E-6DC9-465E-B146-99E489EE41A8}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -34,7 +43,6 @@ Global {A78157BA-B754-45F1-969F-D6A513CA0E72}.Release|Any CPU.ActiveCfg = Release|Any CPU {A78157BA-B754-45F1-969F-D6A513CA0E72}.Release|Any CPU.Build.0 = Release|Any CPU {829FC339-4785-4229-ABA5-53ADB544DA00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {829FC339-4785-4229-ABA5-53ADB544DA00}.Debug|Any CPU.Build.0 = Debug|Any CPU {829FC339-4785-4229-ABA5-53ADB544DA00}.Release|Any CPU.ActiveCfg = Release|Any CPU {829FC339-4785-4229-ABA5-53ADB544DA00}.Release|Any CPU.Build.0 = Release|Any CPU {8860606D-6847-F22A-5AED-DF4E0984DD24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -45,6 +53,10 @@ Global {DD10D21A-D131-1D9C-33F9-406046E0C5B0}.Debug|Any CPU.Build.0 = Debug|Any CPU {DD10D21A-D131-1D9C-33F9-406046E0C5B0}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD10D21A-D131-1D9C-33F9-406046E0C5B0}.Release|Any CPU.Build.0 = Release|Any CPU + {AE877E48-6B44-63C2-8EA0-DB58D096B553}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AE877E48-6B44-63C2-8EA0-DB58D096B553}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AE877E48-6B44-63C2-8EA0-DB58D096B553}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AE877E48-6B44-63C2-8EA0-DB58D096B553}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -54,6 +66,7 @@ Global {829FC339-4785-4229-ABA5-53ADB544DA00} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} {8860606D-6847-F22A-5AED-DF4E0984DD24} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} {DD10D21A-D131-1D9C-33F9-406046E0C5B0} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} + {AE877E48-6B44-63C2-8EA0-DB58D096B553} = {7175950D-2D93-4A4C-8E55-5197482FE663} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {81A62E71-9E04-4EFE-AD5C-23165375F8EF} diff --git a/src/ElectronNET.WebApp/Controllers/HomeController.cs b/src/ElectronNET.WebApp/Controllers/HomeController.cs index e4dfa304..ca610a0f 100644 --- a/src/ElectronNET.WebApp/Controllers/HomeController.cs +++ b/src/ElectronNET.WebApp/Controllers/HomeController.cs @@ -10,36 +10,20 @@ public IActionResult Index() { if (HybridSupport.IsElectronActive) { - Electron.PowerMonitor.OnLockScreen += () => + if (OperatingSystem.IsMacOS() || OperatingSystem.IsWindows()) { - Console.WriteLine("Screen Locked detected from C#"); - }; + Electron.PowerMonitor.OnLockScreen += () => { Console.WriteLine("Screen Locked detected from C#"); }; - Electron.PowerMonitor.OnUnLockScreen += () => - { - Console.WriteLine("Screen unlocked detected from C# "); - }; - - Electron.PowerMonitor.OnSuspend += () => - { - Console.WriteLine("The system is going to sleep"); - }; + Electron.PowerMonitor.OnUnLockScreen += () => { Console.WriteLine("Screen unlocked detected from C# "); }; - Electron.PowerMonitor.OnResume += () => - { - Console.WriteLine("The system is resuming"); - }; + Electron.PowerMonitor.OnSuspend += () => { Console.WriteLine("The system is going to sleep"); }; - Electron.PowerMonitor.OnAC += () => - { - Console.WriteLine("The system changes to AC power"); - }; + Electron.PowerMonitor.OnResume += () => { Console.WriteLine("The system is resuming"); }; - Electron.PowerMonitor.OnBattery += () => - { - Console.WriteLine("The system is about to change to battery power"); - }; + Electron.PowerMonitor.OnAC += () => { Console.WriteLine("The system changes to AC power"); }; + Electron.PowerMonitor.OnBattery += () => { Console.WriteLine("The system is about to change to battery power"); }; + } } return View(); diff --git a/src/ElectronNET.WebApp/ElectronNET.WebApp.csproj b/src/ElectronNET.WebApp/ElectronNET.WebApp.csproj index 15a0acc1..f24ff669 100644 --- a/src/ElectronNET.WebApp/ElectronNET.WebApp.csproj +++ b/src/ElectronNET.WebApp/ElectronNET.WebApp.csproj @@ -71,8 +71,8 @@ - - + + diff --git a/src/ElectronNET.WebApp/Program.cs b/src/ElectronNET.WebApp/Program.cs index 9adf2ea0..d3a36968 100644 --- a/src/ElectronNET.WebApp/Program.cs +++ b/src/ElectronNET.WebApp/Program.cs @@ -55,39 +55,42 @@ private static void AddDevelopmentTests() }); }); - Electron.Dock.SetMenu(new[] + if (System.OperatingSystem.IsMacOS()) { - new MenuItem + Electron.Dock.SetMenu(new[] { - Type = MenuType.normal, - Label = "MenuItem", - Click = () => + new MenuItem { - Electron.Notification.Show(new NotificationOptions( - "Dock MenuItem Click", - "A menu item added to the Dock was selected;")); + 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 { - new MenuItem + Type = MenuType.submenu, + Label = "SubMenu", + Submenu = new[] { - Type = MenuType.normal, - Label = "Sub MenuItem", - Click = () => + new MenuItem { - Electron.Notification.Show(new NotificationOptions( - "Dock Sub MenuItem Click", - "A menu item added to the Dock was selected;")); + 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/src/ElectronNET.sln.DotSettings b/src/ElectronNET.sln.DotSettings new file mode 100644 index 00000000..1eab21f2 --- /dev/null +++ b/src/ElectronNET.sln.DotSettings @@ -0,0 +1,7 @@ + + False + False + True + True + True + True \ No newline at end of file diff --git a/src/ElectronNET/build/ElectronNET.props b/src/ElectronNET/build/ElectronNET.props index f616fbbd..597ea681 100644 --- a/src/ElectronNET/build/ElectronNET.props +++ b/src/ElectronNET/build/ElectronNET.props @@ -4,7 +4,7 @@ 30.4.0 26.0 - win-x64 + win-x64 true diff --git a/src/common.props b/src/common.props index 4773795a..a9a5b9a0 100644 --- a/src/common.props +++ b/src/common.props @@ -1,6 +1,6 @@ - 0.1.0 + 0.2.0 ElectronNET.Core Gregor Biswanger, Florian Rappl, softworkz Electron.NET diff --git a/src/testEnvironments.json b/src/testEnvironments.json new file mode 100644 index 00000000..1208edc7 --- /dev/null +++ b/src/testEnvironments.json @@ -0,0 +1,17 @@ +{ + "version": "1", + "environments": [ + // See https://aka.ms/remotetesting for more details + // about how to configure remote environments. + { + "name": "WSL Ubuntu", + "type": "wsl", + "wslDistribution": "UbuFresh" + } + //{ + // "name": "Docker dotnet/sdk", + // "type": "docker", + // "dockerImage": "mcr.microsoft.com/dotnet/sdk" + //} + ] +} \ No newline at end of file