- Adjusted the success signal emission in the `restartFarmControlAfterUpdate` function to ensure the application quits and restarts correctly during in-app updates.
- Added a conditional check to control the progress success indication based on the update state, improving the user experience during installations.
- Added a 3-second sleep before clearing leftover installation directories, allowing for smoother transitions during the update process and reducing potential conflicts with file locks.
- Updated `mainWindow.js` to include a 'quit' action in the IPC handlers, allowing the application to close gracefully.
- Added a new `WindowAppMenu` component to manage application menu items, including options for 'About', 'Check For Updates', and 'Quit'.
- Refactored `DashboardNavigation` to integrate the new `WindowAppMenu`, improving the user interface for non-macOS platforms.
- Adjusted window control handling in `window.js` to support the new menu actions, ensuring consistent behavior across the application.
- Added a temporary path change to avoid renaming issues during the update process, ensuring smoother transitions between old and new installations.
- Implemented a retry mechanism for renaming the old installation directory, increasing reliability in scenarios where files are locked.
- Enhanced logging to provide clearer feedback during the installation and renaming steps, improving user experience.
- Updated the `swapUpdateStaging` macro to streamline the update process by swapping the old and new versions of Farm Control more efficiently.
- Introduced a cleanup step to remove leftover `.old` directories from previous updates, enhancing the installer’s reliability.
- Improved logging for better visibility during the update and removal processes, ensuring users are informed of actions taken.
- Introduced new macros `tryRenameProbe` and `waitForInstallDirWritable` to enhance the update process by ensuring files are accessible before replacement.
- Updated the `swapUpdateStaging` macro to include checks for file locks and implement a retry mechanism for directory removal, improving reliability during updates.
- Enhanced detail logging for better visibility during the update process.
- Updated `applyApplicationMenu` and `setupApplicationMenuEvents` functions to return early if the platform is not macOS, ensuring that menu features are only available on macOS.
- Adjusted the `createMainWindow` function to conditionally call menu setup functions based on the operating system, improving cross-platform compatibility.
- Updated the NSIS installer to support side-by-side updates, allowing the running application to remain active while a new version is staged in a separate directory.
- Modified the installation directory handling to ensure the correct paths are used for shortcuts and registry entries.
- Enhanced the update process to include a retry mechanism for folder swaps, improving reliability during updates.
- Adjusted comments and documentation for clarity on the update process and its implications.
- Introduced `fix-macos-headerpad.mjs` to address issues with Mach-O headerpad in x64 binaries, preventing corruption during code signing.
- Updated `ensure-electrobun-core.mjs` to call the new headerpad fix function, ensuring compatibility with macOS environments.
- This change resolves issue #485 by freeing load-command slots before signing binaries, enhancing stability on Intel Macs.
- Modified the `ExeCommand` in `msi-wrapped.wxs` to log installation updates to the correct per-user directory.
- Added removal actions for update files and directories during uninstallation to maintain a clean environment.
- Updated `package.json` to include `msiWrapped` configuration for MSI installer generation.
- Introduced `msi-wrapped.wxs` file to define the MSI wrapper around the NSIS setup, enabling silent updates.
- Created `build-windows-msi.ps1` script to automate the MSI building process, integrating with the existing build workflow.
- Modified `finalize-desktop-artifacts.mjs` to call the new MSI build function, ensuring both NSIS and MSI installers are generated during the build process.
- Updated `AppUpdateProvider` to handle errors during startup checks for app updates and duplicate installations, improving robustness.
- Refactored logic to ensure duplicate installation checks are integrated into the update process, providing clearer feedback to users.
- Adjusted modal visibility conditions for duplicate installation prompts to streamline user experience.
- Implemented `onCheckForUpdatesRequest` in `ElectronContext` to handle update requests from the renderer.
- Updated `AppUpdateProvider` to utilize the new check for updates functionality.
- Added "Check For Updates..." option in the desktop menu to trigger the update check.
- Enhanced event handling in the main window to support the new update check action, improving user experience for application updates.
- Replaced getElectronVersion with getAppEngine in the About component to retrieve the app engine type.
- Updated state management to reflect the app engine instead of the Electron version.
- Adjusted UI elements to display the app engine type, enhancing clarity for users regarding the application environment.
- Added `ElectronContext` to the `NotificationProvider` to access the `isElectron` state.
- Updated the notification center's styling to conditionally apply a top margin based on whether the app is running in an Electron environment, enhancing the UI for better responsiveness.
- Introduced `getAppEngine` method in the Electron context to retrieve the current app update engine.
- Updated the Settings component to manage and display the app update engine, allowing users to select between 'Native' and 'Chromium'.
- Enhanced the app update logic to persist the selected engine and ensure proper handling during updates.
- Improved UI in the NewAppUpdate component to show the engine type associated with updates.
- Refactored app update settings management to include engine normalization and validation.
- Added checks in the Electron context to prevent navigation to '/favicon.ico', improving the handling of unwanted requests.
- Enhanced logging for navigation events to provide better visibility into the navigation process.
- Changed the version specification for `electrobun` from caret (^) to exact version for consistency.
- Added `rcedit` as a new dependency with its version specified as 4.0.1.
- Updated `@types/node` dependency to version 25.2.0 for compatibility improvements.
- Changed the version specification for `electrobun` in `package.json` and `bun.lock` from caret (^) to exact version to ensure consistent builds.
- Enhanced `electrobun.config.ts` by adding path handling for reading `package.json`, improving file resolution and compatibility with module imports.
- Deleted the logic for checking and applying the installer icon for macOS packages, streamlining the build process.
- This change simplifies the artifact finalization workflow by eliminating unnecessary steps related to the installer icon.
- Introduced `bundleCEF` configuration to control CEF bundling in the build process.
- Updated `Jenkinsfile` to support separate builds for CEF and native applications on Windows and macOS.
- Modified `build-macos.mjs` and `finalize-desktop-artifacts.mjs` to incorporate CEF bundling logic and adjust artifact naming accordingly.
- Enhanced logging to indicate CEF bundling status during builds, improving transparency in the build process.
- Adjusted the class name logic in the `DashboardNavigation` component to conditionally apply the 'electrobun-webkit-app-region-drag' or 'electrobun-webkit-app-region-no-drag' class based on the fullscreen state, enhancing the user interface for electron applications.
- Updated `isFullscreen` to `isFullScreen` for consistency with context naming conventions.
- Adjusted class logic in the navigation wrapper to reflect the updated variable name, ensuring proper styling application.
- Updated `DashboardNavigation` to conditionally render controls based on authentication and platform.
- Improved user experience by displaying a "Farm Control" message when controls are hidden.
- Enhanced CSS for the electron navigation wrapper to include z-index and user-select properties for better UI handling.
- Added `isFullscreen` context to `DashboardNavigation` for improved UI responsiveness.
- Updated navigation class logic to conditionally apply styles based on fullscreen state.
- Refined window control logic in `window.js` to handle maximize/unmaximize actions more reliably, including asynchronous state synchronization on Windows.
- Introduced adjustments for window frame dimensions in `windows-work-area.js` to account for Win32 DWM overhangs, ensuring accurate maximized state detection and clamping.
- Replaced references to launcher.exe with FarmControl.exe in the installer script, ensuring consistency in application execution.
- Added taskkill command to stop running FarmControl processes during installation.
- Updated shortcut creation to point to FarmControl.exe for both desktop and start menu.
- Enhanced cleanup process to remove old executable backups and ensure proper application state after updates.
- Refactored updater logic to check for the presence of FarmControl.exe, improving application launch reliability.
- Introduced `uninstaller.ico` and `farmcontroluninstaller.png` assets for the uninstaller.
- Updated `farmcontrol.nsi` to define and use the uninstaller icon.
- Modified build scripts to copy and handle the uninstaller icon during the packaging process.
- Enhanced pre-build script to include the uninstaller icon in the required assets check.
- Deleted the `msiWrapped` configuration from `package.json` and removed the associated `msi-wrapped.wxs` file to streamline the packaging process.
- Eliminated the `build-windows-msi.ps1` script, which was previously used for generating MSI installers, as part of the transition to a simpler installation method.
- Updated the `finalize-desktop-artifacts.mjs` script to remove references to the MSI build process, ensuring a cleaner artifact finalization workflow.
- Introduced a new script `generate-app-icons.mjs` to automate the generation of application and installer icons.
- Updated error messages in the Windows MSI build script and the finalize artifacts script to reference the new icon generation command.
- Refactored the pre-build process to call the new icon generation script, ensuring required icons are created before building.
- Implemented a new function to restart Farm Control after a successful installation, triggered by the `/RESTARTFC` option.
- Enhanced the installer script to wait for the application to close before relaunching, improving user experience during updates.
- Updated the app update process to conditionally schedule a restart based on the platform, ensuring compatibility with macOS.
- Added a delay in the app update process to ensure the UI reflects completion before quitting.
- Updated the Windows launcher resolution logic to prefer the installed launcher, improving post-update behavior.
- Refactored the restart script to use `.cmd` extension and optimized process handling for better reliability.
- Added support for silent installation mode.
- Implemented detailed progress logging during installation phases, including status updates and percentage completion.
- Refactored the handling of previous installations to ensure smoother updates and in-app upgrade processes.
- Updated error handling for installation failures, providing clearer feedback to users.
- Removed the `fixShortcutWorkingDir` macro to simplify the shortcut creation logic.
- Updated `createDesktopShortcut` and `createStartMenuShortcut` macros to directly set the output path for shortcuts, enhancing clarity and maintainability.
- Changed the installer extension from `.exe` to `.msi` for better compatibility with Windows Installer.
- Refactored validation functions to ensure proper handling of MSI packages.
- Improved logging and progress tracking during installation, providing clearer feedback on the installation status.
- Updated the installer script to manage previous installations more effectively, allowing for smoother upgrades.
- Removed redundant window state synchronization calls in `applyWindowsStartupWindowState` to streamline the startup process.
- Updated the `clampWindowToWorkArea` function to adjust the window frame dimensions, ensuring proper fitting within the work area.
- Introduced a retry mechanism in the `patchExecutable` function to handle transient errors when patching executables, allowing up to 6 attempts with exponential backoff.
- Updated the patching process to create a temporary copy of the executable before applying changes, reducing the risk of file locks by antivirus software.
- Improved logging to provide clearer feedback on patching attempts and failures.
- Removed the use of `chdirSync` in favor of `process.chdir` for changing the working directory, improving compatibility with the Node.js environment.
- Streamlined the code for ensuring the correct working directory is set before launching the application on Windows.
- Deleted the `grant-users-access.nsh` script as user access permissions are now managed directly within the installer, streamlining the installation process for standard users.
- Updated `package.json` to change installation scope from `perMachine` to `perUser`, allowing installations for standard users without admin rights.
- Modified `farmcontrol.nsi` to adjust installation directory and registry keys to use `HKCU` instead of `HKLM`, improving accessibility for non-admin users.
- Refined `installer.nsh` and related scripts to ensure proper handling of the farmcontrol URI handler and shortcuts, aligning with the new user access model.
- Removed references to the `grant-users-access.nsh` script, as user access permissions are now managed directly within the installer.
- Modified the Windows installer script to change the command for the farmcontrol URI handler from `deeplink.exe` to `bun.exe` executing `deeplink.js`, improving the handling of deep links.
- Updated the build script to output `deeplink.js` instead of `deeplink.exe`, aligning with the new execution method.
- Adjusted the PowerShell script to check for the presence of `deeplink.js` instead of `deeplink.exe`, ensuring the correct file is validated during the staging process.
- Refined the patching script to remove references to `deeplink.exe`, streamlining the target executables for patching.
- Replaced the dynamic executable discovery with a predefined set of target executables (`launcher.exe`, `deeplink.exe`) for clarity.
- Added checks to skip missing executables and improved error handling during the patching process, enhancing robustness and user feedback.
- Added a new macro in `grant-users-access.nsh` to grant standard users read and execute access to the installation directory, enhancing accessibility for non-admin users.
- Updated `installer.nsh` to include the new macro during installation, ensuring proper permissions are set.
- Changed the output file from `deeplink.js` to `deeplink.exe` in the build process, improving the executable handling for the application.
- Refactored the installer script to ensure the correct command is used for the farmcontrol URI handler, enhancing functionality.
- Introduced a new script, `patch-windows-binaries.mjs`, to set the requested execution level for Windows binaries, improving security and compliance.