mirror of
https://github.com/arduino/arduino-ide.git
synced 2025-07-08 11:56:36 +00:00
fix: can open IDE from an ino file
Use a fallback frontend app config when starting IDE2 from an ino file (from Explorer, Finder, etc.) and the app config is not yet set. Closes #2209 Signed-off-by: Akos Kitta <a.kitta@arduino.cc>
This commit is contained in:
parent
73b6dc4774
commit
3eef857b48
@ -16,8 +16,8 @@ import { Deferred } from '@theia/core/lib/common/promise-util';
|
|||||||
import { isObject, MaybePromise, Mutable } from '@theia/core/lib/common/types';
|
import { isObject, MaybePromise, Mutable } from '@theia/core/lib/common/types';
|
||||||
import { ElectronSecurityToken } from '@theia/core/lib/electron-common/electron-token';
|
import { ElectronSecurityToken } from '@theia/core/lib/electron-common/electron-token';
|
||||||
import {
|
import {
|
||||||
ElectronMainApplication as TheiaElectronMainApplication,
|
|
||||||
ElectronMainExecutionParams,
|
ElectronMainExecutionParams,
|
||||||
|
ElectronMainApplication as TheiaElectronMainApplication,
|
||||||
} from '@theia/core/lib/electron-main/electron-main-application';
|
} from '@theia/core/lib/electron-main/electron-main-application';
|
||||||
import type { TheiaBrowserWindowOptions } from '@theia/core/lib/electron-main/theia-electron-window';
|
import type { TheiaBrowserWindowOptions } from '@theia/core/lib/electron-main/theia-electron-window';
|
||||||
import { FileUri } from '@theia/core/lib/node/file-uri';
|
import { FileUri } from '@theia/core/lib/node/file-uri';
|
||||||
@ -25,7 +25,7 @@ import { inject, injectable } from '@theia/core/shared/inversify';
|
|||||||
import { URI } from '@theia/core/shared/vscode-uri';
|
import { URI } from '@theia/core/shared/vscode-uri';
|
||||||
import { log as logToFile, setup as setupFileLog } from 'node-log-rotate';
|
import { log as logToFile, setup as setupFileLog } from 'node-log-rotate';
|
||||||
import { fork } from 'node:child_process';
|
import { fork } from 'node:child_process';
|
||||||
import { promises as fs, rm, rmSync } from 'node:fs';
|
import { promises as fs, readFileSync, rm, rmSync } from 'node:fs';
|
||||||
import type { AddressInfo } from 'node:net';
|
import type { AddressInfo } from 'node:net';
|
||||||
import { isAbsolute, join, resolve } from 'node:path';
|
import { isAbsolute, join, resolve } from 'node:path';
|
||||||
import { Sketch } from '../../common/protocol';
|
import { Sketch } from '../../common/protocol';
|
||||||
@ -745,6 +745,19 @@ export class ElectronMainApplication extends TheiaElectronMainApplication {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fallback app config when starting IDE2 from an ino file (from Explorer, Finder, etc.) and the app config is not yet set.
|
||||||
|
// https://github.com/arduino/arduino-ide/issues/2209
|
||||||
|
private _fallbackConfig: FrontendApplicationConfig | undefined;
|
||||||
|
override get config(): FrontendApplicationConfig {
|
||||||
|
if (!this._config) {
|
||||||
|
if (!this._fallbackConfig) {
|
||||||
|
this._fallbackConfig = readFrontendAppConfigSync();
|
||||||
|
}
|
||||||
|
return this._fallbackConfig;
|
||||||
|
}
|
||||||
|
return super.config;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class InterruptWorkspaceRestoreError extends Error {
|
class InterruptWorkspaceRestoreError extends Error {
|
||||||
@ -775,11 +788,8 @@ async function updateFrontendApplicationConfigFromPackageJson(
|
|||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const modulePath = __filename;
|
|
||||||
// must go from `./lib/backend/electron-main.js` to `./package.json` when the app is webpacked.
|
|
||||||
const packageJsonPath = join(modulePath, '..', '..', '..', 'package.json');
|
|
||||||
console.debug(
|
console.debug(
|
||||||
`Checking for frontend application configuration customizations. Module path: ${modulePath}, destination 'package.json': ${packageJsonPath}`
|
`Checking for frontend application configuration customizations. Module path: ${__filename}, destination 'package.json': ${packageJsonPath}`
|
||||||
);
|
);
|
||||||
const rawPackageJson = await fs.readFile(packageJsonPath, {
|
const rawPackageJson = await fs.readFile(packageJsonPath, {
|
||||||
encoding: 'utf8',
|
encoding: 'utf8',
|
||||||
@ -827,6 +837,46 @@ async function updateFrontendApplicationConfigFromPackageJson(
|
|||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const fallbackFrontendAppConfig: FrontendApplicationConfig = {
|
||||||
|
applicationName: 'Arduino IDE',
|
||||||
|
defaultTheme: {
|
||||||
|
light: 'arduino-theme',
|
||||||
|
dark: 'arduino-theme-dark',
|
||||||
|
},
|
||||||
|
defaultIconTheme: 'none',
|
||||||
|
validatePreferencesSchema: false,
|
||||||
|
defaultLocale: '',
|
||||||
|
electron: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
// When the package.json must go from `./lib/backend/electron-main.js` to `./package.json` when the app is webpacked.
|
||||||
|
// Only for production mode!
|
||||||
|
const packageJsonPath = join(__filename, '..', '..', '..', 'package.json');
|
||||||
|
|
||||||
|
function readFrontendAppConfigSync(): FrontendApplicationConfig {
|
||||||
|
if (environment.electron.isDevMode()) {
|
||||||
|
console.debug(
|
||||||
|
'Running in dev mode. Using the fallback fronted application config.'
|
||||||
|
);
|
||||||
|
return fallbackFrontendAppConfig;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const raw = readFileSync(packageJsonPath, { encoding: 'utf8' });
|
||||||
|
const packageJson = JSON.parse(raw);
|
||||||
|
const config = packageJson?.theia?.frontend?.config;
|
||||||
|
if (config) {
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
throw new Error(`Frontend application config not found. ${packageJson}`);
|
||||||
|
} catch (err) {
|
||||||
|
console.error(
|
||||||
|
`Could not read package.json content from ${packageJsonPath}.`,
|
||||||
|
err
|
||||||
|
);
|
||||||
|
return fallbackFrontendAppConfig;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mutates the `toUpdate` argument and returns with it.
|
* Mutates the `toUpdate` argument and returns with it.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user