Commit Graph

127 Commits

Author SHA1 Message Date
Pierre Arnaud
52744a1922 Final cleanup: Suppress remaining debug output
- Removed '|| ' prefix from ProcessRunner stdout/stderr redirection
  * Changed to Debug.WriteLine (only visible when debugger attached)
- Suppressed [Startup] timing messages in StartupManager
  * Moved to Debug.WriteLine for diagnostic purposes
- Suppressed 'No testhost detected' messages
- Added logging configuration to suppress ASP.NET Watch debug messages
  * Microsoft.AspNetCore.Watch set to Warning level

Result: Clean console output in development with only meaningful messages.
Timing and debug traces still available when debugger is attached.
2026-01-31 14:27:34 +01:00
Pierre Arnaud
03da5cd7cb Phase 4: Replace Console output with Debug.WriteLine in diagnostic code
- Replaced Console.WriteLine with System.Diagnostics.Debug.WriteLine in:
  * LaunchOrderDetector (probe scoring)
  * UnpackagedDetector (probe scoring)
  * ElectronProcessActive (StartInternal traces)
- Removed '[StartInternal]: after run:' trace
- Debug.WriteLine only outputs when debugger is attached

These were the noisiest debugging traces. Other Console.WriteLine usage
in StartupManager, ProcessRunner, etc. would require ILogger injection
which is a larger architectural change deferred for now.
2026-01-31 11:19:28 +01:00
Pierre Arnaud
0ee2bbe31c Refactor debugger detection to use shared DebuggerHelper
Created a new DebuggerHelper class with Lazy<bool> initialization that is
shared by both LaunchOrderDetector and UnpackagedDetector. This eliminates
code duplication and provides a cleaner, more maintainable solution.

- Added DebuggerHelper.cs with lazy-initialized IsAttached property
- Refactored LaunchOrderDetector to use DebuggerHelper
- Refactored UnpackagedDetector to use DebuggerHelper
- Removed nullable bool pattern in favor of Lazy<bool>
2026-01-31 09:38:26 +01:00
Pierre Arnaud
0a23659196 Phase 1b: Optimize startup detection for faster .NET initialization
Performance optimizations to startup detection:
- Reduced GatherBuildInfo: >1000ms → 7ms (99% faster!)
- Reduced CollectProcessData: →  86ms
- Reduced DetectAppTypeAndStartup: → 91ms
- Total StartupManager.Initialize: → 91ms (down from >1 second)

Electron startup also improved significantly:
- Module loading: 719ms → 108ms (85% faster!)
- SignalR connection: 884ms → 403ms (54% faster!)
- Total Electron startup: 2.3s → 700ms (70% faster!)

Optimizations applied:

1. Directory checks (UnpackagedDetector):
   - Changed GetDirectories().Any() to direct Directory.Exists()
   - Avoids expensive directory enumeration
   - Saves ~200-500ms on slow disks

2. Debugger state caching:
   - Cache Debugger.IsAttached result in static field
   - Avoids multiple expensive debugger checks
   - Used by both UnpackagedDetector and LaunchOrderDetector
   - Saves ~50-100ms per check

3. Added timing measurements:
   - Added Stopwatch to StartupManager.Initialize()
   - Detailed timing for each initialization phase
   - Visibility into startup performance

Results:
- .NET startup detection: >1000ms → 91ms
- Electron module loading: 719ms → 108ms
- SignalR connection: 884ms → 403ms
- **Total improvement: ~70% faster startup**

The combination of faster directory checks, cached debugger state,
and parallel module loading (from previous commit) results in
sub-second startup times in development mode.
2026-01-30 23:02:13 +01:00
Pierre Arnaud
be609a513e Refactor: Introduce IFacade interface for SocketIO and SignalR facades
- Create IFacade interface defining common API for SocketIO and SignalR
- Update SocketIoFacade to implement IFacade
- Update SignalRFacade to implement IFacade (add Connect no-op)
- Update RuntimeControllerBase.Socket to return IFacade
- Update RuntimeControllerAspNetBase.Socket to return IFacade
- Update RuntimeControllerDotNetFirst.Socket to return IFacade
- Update ElectronNetRuntime.GetSocket() to return IFacade
- Update BridgeConnector.Socket to return IFacade

This enables polymorphic usage of both facades throughout the codebase
and prepares for full Electron API integration with SignalR mode.
2026-01-30 13:03:19 +01:00
Pierre Arnaud
e29a3bc27a Fix IsUnpackaged extension to include UnpackedDotnetFirstSignalR 2026-01-30 12:34:42 +01:00
Pierre Arnaud
054f5b1c4c Complete Phase 5: Add SignalR startup detection and port 0 configuration 2026-01-30 12:10:49 +01:00
Pierre Arnaud
7f2ea4839e Add PackagedDotnetFirstSignalR and UnpackedDotnetFirstSignalR startup methods 2026-01-30 11:57:40 +01:00
softworkz
30037fce69 Fix ElectronSingleInstance handling 2025-12-18 15:52:56 +01:00
softworkz
9d0378798b ElectronProcessActive: Add check for platform mismatch 2025-12-15 13:22:53 +01:00
softworkz
1d6ef7a250 ElectronProcessActive: Mark binaries as executable when debugging 2025-12-15 12:18:42 +01:00
softworkz
33da428c45 Fix build after PR merge
Re-adding .net6 caused the collection expression to fail
2025-12-12 01:39:02 +01:00
Florian Rappl
49eaa5e129 Merge pull request #973 from davidroth/set-menu-items
Add dynamic tray menu update functionality
2025-12-11 22:58:06 +01:00
softworkz
0d732ce99e Partially revert "Drop .NET 6.0, default to .NET 10.0 and update dependencies" 2025-12-11 22:35:45 +01:00
David Roth
218b99808b Add dynamic tray menu update functionality
Introduced a `SetMenuItems` method in `Tray.cs` to enable updating the tray's context menu dynamically. This method clears existing menu items, adds new ones, and registers click handlers. Added XML documentation for the method.
2025-12-11 18:04:31 +01:00
David Roth
1baa5c6200 Drop .NET 6.0, default to .NET 10.0 and update dependencies
Updated all projects to target .NET 10.0, removing support for .NET 6.0. Upgraded key dependencies, including:
- `Microsoft.Build` and `Microsoft.Build.Tasks.Core` to 18.0.2.
- `Nuke.Common` to 10.1.0.
- `System.Drawing.Common` to 10.0.1.
- `System.Text.Json` to 10.0.1.

Removed `NoWarn` configurations for .NET 6.0 in `ElectronNET.AspNet.csproj`. Reformatted the `Copy` task in `ElectronNET.Build.csproj` for readability. Updated `.pubxml` files and other project files to reflect the framework upgrade.
2025-12-11 07:25:07 +01:00
softworkz
c97f914e7a Introduce TimeSpan extensions 2025-12-07 11:20:43 +01:00
softworkz
9bb2adca78 Use 3s timeout for GetUserAgentAsync and updat test 2025-12-06 20:53:15 +01:00
softworkz
7c8eeef225 GetPrintersAsync: Increase timeout 2025-12-06 20:04:23 +01:00
agracio
4ee11aaeae removing properties 2025-12-06 11:58:30 +00:00
agracio
7eaf84a021 attempting to fix some tests on CI 2025-12-04 19:07:26 +00:00
agracio
90f5f5dbe2 attempting to fix some tests on CI 2025-12-04 18:38:12 +00:00
agracio
dae521180f adding WebContents APIs for Zoom, Audio and DevTools 2025-12-04 17:52:01 +00:00
softworkz
3821ca60ea getPrinters: Increase timeout 2025-11-22 02:27:44 +01:00
softworkz
59887cce5f Guard deserialization error 2025-11-22 02:24:32 +01:00
softworkz
77834d0f2e Drop workaround via DescriptinoAttribute: No longer needed 2025-11-22 02:24:32 +01:00
softworkz
6761119241 Update all model classes to Electron API 39.2 2025-11-22 02:24:32 +01:00
softworkz
1815951092 BrowserWindowOptions; Fix default for FullScreenable
Electron's default is true
2025-11-20 02:56:00 +01:00
Florian Rappl
ef41329a91 Merge pull request #938 from softworkz/submit_ipc_types
Fix API break: public API must not expose JsonElement objects
2025-11-17 16:27:56 +01:00
softworkz
55c035323b Use non-generic TaskCompletionSource where applicable 2025-11-17 13:58:47 +01:00
softworkz
2e5c6200a6 ShowItemInFolderAsync: Fix endless hang 2025-11-17 13:58:47 +01:00
softworkz
be518a7a10 IpcMain: Properly handle Ipc message params (always 2-elem array) 2025-11-17 13:57:04 +01:00
softworkz
9e9558b837 SocketIoFacade: Remove unused method
It's not needed for compatibility since SocketIoFacade is internal
2025-11-17 13:18:41 +01:00
softworkz
8ff875435b Fix API break: public API must not expose JsonElement objects
This changes deserialization to the way how it was with
Json.Net: Only .net primitive types are exposed publicly
2025-11-17 13:17:01 +01:00
softworkz
0580942a59 ElectronNET API: Add platform support attributes 2025-11-16 02:53:28 +01:00
softworkz
a30239e3a6 Update electron start 2025-11-16 00:30:07 +01:00
softworkz
8e7892ebd4 Fix whitespace formatting 2025-11-15 13:52:19 +01:00
softworkz
385dcfbf52 ApiBase: Code style and whitespace 2025-11-15 10:21:18 +01:00
softworkz
515430ff96 ApiBase: Rename PropertyGet to more generic Invocator 2025-11-15 10:21:18 +01:00
Florian Rappl
10bf461b51 Prepare for Blazor support 2025-11-14 17:38:55 +01:00
agracio
6fa65aa149 adding block statements to if 2025-11-12 20:20:13 +00:00
agracio
c6ff957d9a rebase from develop, add timeouts to tests and attempt to skip NativeImageTests on Linux 2025-11-12 14:42:43 +00:00
agracio
546668a2c0 refactoring events API, replacing task code with calls to ApiBase. 2025-11-12 10:43:32 +00:00
Florian Rappl
979cf72d4c Merge pull request #920 from Denny09310/feature/using-once
feat: Add "Once" socket listener registration for one-time handlers
2025-11-10 22:29:01 +01:00
softworkz
f89f2e7591 SocketIOFacade: Add missing locking on .Off calls 2025-11-10 21:29:16 +01:00
Denny09310
9a0a494bc5 fix: missing "Once" changes, rollback to "On" on Notification 2025-11-10 11:27:32 +01:00
Denny09310
adc1e81743 fix: simplified add/remove of socket listener through usage of "Once" 2025-11-10 10:40:51 +01:00
Denny09310
d8062aae00 fix: scale factor can be a double 2025-11-10 10:40:19 +01:00
Denny09310
0522bc425b fix: using correct deserialization type instead JsonElement for everyting except mixed arrays 2025-11-09 15:46:33 +01:00
Denny09310
168eceac8c fix: removed unused JsonPropertyName as ElectronJson.Options as by default camel case 2025-11-09 15:17:42 +01:00