0b51d133a4
Move legacy Steam-related docs into documentation/archived and add a new UPLOAD-ITCH.md describing how to publish builds to itch.io with Butler. Update top-level README to state official releases will be on itch.io. Remove Steam-specific UI/features: drop steamCloudOptIn from first-run preferences, remove the Steam Cloud teaser and summary from the setup flow, and adjust settings/setup copy to reference handheld devices and non‑Steam distribution. Also make a small wording tweak in the plugins doc about rendererPreload.
95 lines
4.0 KiB
Markdown
95 lines
4.0 KiB
Markdown
# Electron Upgrade Feature - Bug Fixes
|
|
|
|
## Problem Identified
|
|
The upgrade feature was downloading and installing new Electron versions successfully, but the app always showed the old version (1.0.0) after restart because:
|
|
|
|
1. **Version Source Issue**: The app was reading `app.getVersion()` which gets the version from `package.json` at startup time
|
|
2. **Package.json Not Re-read**: Even after npm installed a new Electron version, the app didn't re-read the updated `package.json`
|
|
3. **Runtime Display**: The About tab showed the bundled Electron version (37.x) which is baked into the binary at build time
|
|
|
|
## Solutions Implemented
|
|
|
|
### 1. **New Helper Function: `getInstalledElectronVersion()`**
|
|
- Reads `package.json` directly every time it's called (not cached)
|
|
- Extracts the actual installed Electron version from `devDependencies`
|
|
- Handles both stable (`electron`) and nightly (`electron-nightly`) packages
|
|
- Strips version specifiers (^, ~, etc.) to get the clean version number
|
|
- Falls back to `app.getVersion()` if reading fails
|
|
|
|
```javascript
|
|
function getInstalledElectronVersion() {
|
|
try {
|
|
const packageJsonPath = path.join(__dirname, 'package.json');
|
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
|
|
const electronDep = packageJson.devDependencies?.electron;
|
|
const electronNightlyDep = packageJson.devDependencies?.['electron-nightly'];
|
|
|
|
if (electronDep) {
|
|
return electronDep.replace(/^\D+/, '');
|
|
}
|
|
if (electronNightlyDep) {
|
|
return electronNightlyDep.replace(/^\D+/, '');
|
|
}
|
|
return app.getVersion();
|
|
} catch (err) {
|
|
return app.getVersion();
|
|
}
|
|
}
|
|
```
|
|
|
|
### 2. **Updated `get-electron-versions` Handler**
|
|
- Now uses `getInstalledElectronVersion()` instead of `app.getVersion()`
|
|
- Returns the actual installed version that was modified by npm
|
|
- Performs fresh version checks each time (no caching)
|
|
|
|
### 3. **Improved `upgrade-electron` Handler**
|
|
- Increased `maxBuffer` to handle large npm output
|
|
- Added cleanup logic to remove the old Electron variant when switching types
|
|
- Removes `electron` when upgrading to `nightly`
|
|
- Removes `electron-nightly` when upgrading to `stable`
|
|
- Better error logging to debug npm failures
|
|
- Returns clearer messages about installation status
|
|
|
|
### 4. **Enhanced UI/UX in settings.js**
|
|
- Added more descriptive status text ("Downloading and installing..." instead of just "Upgrading...")
|
|
- Disables all controls during upgrade to prevent multiple clicks
|
|
- Reduced restart delay from 2000ms to 1500ms for faster feedback
|
|
- Better error handling with proper cleanup of disabled states
|
|
|
|
## How It Works Now
|
|
|
|
1. **User clicks "Check for Updates"**
|
|
- Queries npm registry for latest version
|
|
- Uses `getInstalledElectronVersion()` to read current version from `package.json`
|
|
- Compares versions and shows if update is available
|
|
|
|
2. **User clicks "Upgrade Electron"**
|
|
- Confirms action
|
|
- Runs `npm install --save-dev electron@latest` (or `electron-nightly@latest`)
|
|
- npm downloads and installs new version
|
|
- Handler removes the other Electron variant from `package.json` if needed
|
|
- Shows success message
|
|
|
|
3. **App Restarts**
|
|
- Uses `app.relaunch()` and `app.quit()`
|
|
- When app relaunches, it:
|
|
- Loads new Electron binary from `node_modules`
|
|
- Runs new Electron version
|
|
- Settings page shows correct new version on next check
|
|
|
|
## Testing Recommendations
|
|
|
|
1. Test upgrading from stable to nightly version
|
|
2. Test upgrading from nightly back to stable
|
|
3. Verify version display updates after restart
|
|
4. Check that old variant is removed from `package.json`
|
|
5. Verify app runs stably with new Electron version
|
|
|
|
## Notes for Future Development
|
|
|
|
- The About tab displays `process.versions.electron` which is the bundled Chromium version, not the Electron framework version
|
|
- The Electron version we display in the upgrade section comes from `package.json` which is the actual framework version
|
|
- When building with electron-builder, the bundled version becomes fixed until next rebuild
|
|
- For development/testing, the upgrade feature reads live from `package.json`
|