From d8b7994f3bc8df6ba5831017e068d1961e9a7927 Mon Sep 17 00:00:00 2001 From: Marius456 Date: Sun, 14 Jan 2024 19:53:33 +0200 Subject: [PATCH 1/5] feat: update from webos emulator to simulator --- packages/sdk-webos/src/deviceManager.ts | 67 +++++++++++++++---------- 1 file changed, 40 insertions(+), 27 deletions(-) diff --git a/packages/sdk-webos/src/deviceManager.ts b/packages/sdk-webos/src/deviceManager.ts index 4f59000dfb..476e743309 100644 --- a/packages/sdk-webos/src/deviceManager.ts +++ b/packages/sdk-webos/src/deviceManager.ts @@ -16,7 +16,6 @@ import { isSystemWin, isUrlLocalhost, RnvContext, - waitForExecCLI, inquirerPrompt, ExecOptionsPresets, } from '@rnv/core'; @@ -38,30 +37,23 @@ export const launchWebOSimulator = (c: RnvContext) => { return Promise.reject(`c.buildConfig.sdks.WEBOS_SDK undefined`); } - const availableEmulatorVersions = getDirectories(path.join(webosSdkPath, 'Emulator')); + const availableEmulatorVersions = getDirectories(path.join(webosSdkPath, 'Simulator')); const ePath = path.join( webosSdkPath, - `Emulator/${availableEmulatorVersions?.[0] || 'v4.0.0'}/LG_webOS_TV_Emulator${ - isSystemWin ? '.exe' : '_RCU.app' - }` + `Simulator/${availableEmulatorVersions?.[0]}/${availableEmulatorVersions?.[0]}${isSystemWin ? '.exe' : '.app'}` ); if (!fsExistsSync(ePath)) { - return Promise.reject(`Can't find emulator at path: ${ePath}`); + return Promise.reject(`Can't find simulator at path: ${ePath}`); } if (isSystemWin) { return executeAsync(c, ePath, { detached: true, stdio: 'ignore' }); } + return executeAsync(c, `${openCommand} ${ePath}`, { detached: true }); }; -// const startHostedServerIfRequired = (c) => { -// if (Context.isWebHostEnabled) { -// return rnvStart(c); -// } -// }; - const parseDevices = (c: RnvContext, devicesResponse: string): Promise> => { const linesArray = devicesResponse .split('\n') @@ -100,6 +92,41 @@ const parseDevices = (c: RnvContext, devicesResponse: string): Promise { + logTask('launchAppOnSimulator'); + + const webosSdkPath = getRealPath(c, c.buildConfig?.sdks?.WEBOS_SDK); + + if (!webosSdkPath) { + return Promise.reject(`c.buildConfig.sdks.WEBOS_SDK undefined`); + } + + const availableEmulatorVersions = getDirectories(path.join(webosSdkPath, 'Simulator')); + console.log(!availableEmulatorVersions.length); + if (!availableEmulatorVersions.length) { + return Promise.reject(`Can't find simulator at path: ${path.join(webosSdkPath, 'Simulator')}`); + } + + let selectedOption; + if (availableEmulatorVersions.length > 1) { + ({ selectedOption } = await inquirerPrompt({ + name: 'selectedOption', + type: 'list', + choices: availableEmulatorVersions, + warningMessage: `Found several installed simulators. Choose which one to use:`, + })); + } else { + selectedOption = availableEmulatorVersions[0]; + logInfo(`Found simulator ${selectedOption} at path: ${path.join(webosSdkPath, 'Simulator')}`); + } + const regex = /[+-]?\d+(\.\d+)?/g; + const version = selectedOption.match(regex)[0]; + + await execCLI(c, CLI_WEBOS_ARES_LAUNCH, `-s ${version} ${appPath}`); +}; + +// Used for actual devices const installAndLaunchApp = async (c: RnvContext, target: string, appPath: string, tId: string) => { try { await execCLI(c, CLI_WEBOS_ARES_INSTALL, `--device ${target} ${appPath}`); @@ -138,17 +165,6 @@ export const listWebOSTargets = async (c: RnvContext) => { return true; }; -const waitForEmulatorToBeReady = async (c: RnvContext) => { - const devicesResponse = await execCLI(c, CLI_WEBOS_ARES_DEVICE_INFO, '-D'); - const devices = await parseDevices(c, devicesResponse); - const emulator = devices.filter((d) => !d.isDevice)[0]; - if (!emulator) throw new Error('No WebOS emulator configured'); - - return waitForExecCLI(c, CLI_WEBOS_ARES_DEVICE_INFO, `-d ${emulator.name}`, (res) => - typeof res === 'string' ? res.includes('modelName') : res - ); -}; - export const runWebosSimOrDevice = async (c: RnvContext) => { const { device } = c.program; @@ -162,7 +178,6 @@ export const runWebosSimOrDevice = async (c: RnvContext) => { return Promise.reject(`Cannot determine getPlatformProjectDir value`); } const tOut = path.join(platDir, 'output'); - const tSim = c.program.target || 'emulator'; const configFilePath = path.join(tDir, 'appinfo.json'); // logTask(`runWebOS:${target}:${isHosted}`, chalk().grey); @@ -238,9 +253,7 @@ export const runWebosSimOrDevice = async (c: RnvContext) => { return installAndLaunchApp(c, response.chosenDevice, appPath, tId); } } else { - await launchWebOSimulator(c); - await waitForEmulatorToBeReady(c); - return installAndLaunchApp(c, tSim, appPath, tId); + return launchAppOnSimulator(c, platDir); } } else { // Target specified, using that From 2b4194463e11cfc4c79e80671979c61b265c2479 Mon Sep 17 00:00:00 2001 From: Marius456 Date: Mon, 15 Jan 2024 10:30:45 +0200 Subject: [PATCH 2/5] feat: added linux support --- packages/sdk-webos/src/deviceManager.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/sdk-webos/src/deviceManager.ts b/packages/sdk-webos/src/deviceManager.ts index 476e743309..744241db16 100644 --- a/packages/sdk-webos/src/deviceManager.ts +++ b/packages/sdk-webos/src/deviceManager.ts @@ -18,6 +18,7 @@ import { RnvContext, inquirerPrompt, ExecOptionsPresets, + isSystemLinux, } from '@rnv/core'; import { WebosDevice } from './types'; import { @@ -41,7 +42,9 @@ export const launchWebOSimulator = (c: RnvContext) => { const ePath = path.join( webosSdkPath, - `Simulator/${availableEmulatorVersions?.[0]}/${availableEmulatorVersions?.[0]}${isSystemWin ? '.exe' : '.app'}` + `Simulator/${availableEmulatorVersions?.[0]}/${availableEmulatorVersions?.[0]}${ + isSystemWin ? '.exe' : isSystemLinux ? '.appimage' : '.app' + }` ); if (!fsExistsSync(ePath)) { From e650c326b86fa58d4032594a4a99bcb665da6c8d Mon Sep 17 00:00:00 2001 From: Marius456 Date: Tue, 16 Jan 2024 15:06:36 +0200 Subject: [PATCH 3/5] feat: added warnings --- packages/sdk-webos/src/deviceManager.ts | 26 ++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/packages/sdk-webos/src/deviceManager.ts b/packages/sdk-webos/src/deviceManager.ts index 744241db16..16d095c307 100644 --- a/packages/sdk-webos/src/deviceManager.ts +++ b/packages/sdk-webos/src/deviceManager.ts @@ -19,6 +19,8 @@ import { inquirerPrompt, ExecOptionsPresets, isSystemLinux, + isSystemMac, + logError, } from '@rnv/core'; import { WebosDevice } from './types'; import { @@ -100,15 +102,24 @@ const launchAppOnSimulator = async (c: RnvContext, appPath: string) => { logTask('launchAppOnSimulator'); const webosSdkPath = getRealPath(c, c.buildConfig?.sdks?.WEBOS_SDK); + const simulatorDirPath = path.join(webosSdkPath, 'Simulator'); if (!webosSdkPath) { return Promise.reject(`c.buildConfig.sdks.WEBOS_SDK undefined`); } - const availableEmulatorVersions = getDirectories(path.join(webosSdkPath, 'Simulator')); - console.log(!availableEmulatorVersions.length); + const webOS_cli_version = await execCLI(c, CLI_WEBOS_ARES_LAUNCH, `-V`); + + const regex = /\d+(\.\d+)?/g; + const webOS_cli_version_number = Number(webOS_cli_version.match(regex)[0]); + if (webOS_cli_version_number < 1.12) { + return logError(`Your webOS TV CLI version is ${webOS_cli_version_number}. You need to update it up to >=1.12`); + } + + const availableEmulatorVersions = getDirectories(simulatorDirPath); + if (!availableEmulatorVersions.length) { - return Promise.reject(`Can't find simulator at path: ${path.join(webosSdkPath, 'Simulator')}`); + return Promise.reject(`Can't find simulator at path: ${simulatorDirPath}`); } let selectedOption; @@ -121,11 +132,16 @@ const launchAppOnSimulator = async (c: RnvContext, appPath: string) => { })); } else { selectedOption = availableEmulatorVersions[0]; - logInfo(`Found simulator ${selectedOption} at path: ${path.join(webosSdkPath, 'Simulator')}`); + logInfo(`Found simulator ${selectedOption} at path: ${simulatorDirPath}`); } - const regex = /[+-]?\d+(\.\d+)?/g; const version = selectedOption.match(regex)[0]; + if (isSystemMac) { + logInfo( + `If you encounter damaged simulator error, run this command line: xattr -c ${simulatorDirPath}/${selectedOption}/${selectedOption}.app` + ); + } + await execCLI(c, CLI_WEBOS_ARES_LAUNCH, `-s ${version} ${appPath}`); }; From 976d6e0a71450741e3ecc4f5232e7dea4fa2e89c Mon Sep 17 00:00:00 2001 From: Marius456 Date: Tue, 16 Jan 2024 16:05:34 +0200 Subject: [PATCH 4/5] fix: small bugs --- packages/sdk-webos/src/deviceManager.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/sdk-webos/src/deviceManager.ts b/packages/sdk-webos/src/deviceManager.ts index 16d095c307..7d6a382c95 100644 --- a/packages/sdk-webos/src/deviceManager.ts +++ b/packages/sdk-webos/src/deviceManager.ts @@ -102,16 +102,17 @@ const launchAppOnSimulator = async (c: RnvContext, appPath: string) => { logTask('launchAppOnSimulator'); const webosSdkPath = getRealPath(c, c.buildConfig?.sdks?.WEBOS_SDK); - const simulatorDirPath = path.join(webosSdkPath, 'Simulator'); if (!webosSdkPath) { return Promise.reject(`c.buildConfig.sdks.WEBOS_SDK undefined`); } + const simulatorDirPath = path.join(webosSdkPath, 'Simulator'); + const webOS_cli_version = await execCLI(c, CLI_WEBOS_ARES_LAUNCH, `-V`); const regex = /\d+(\.\d+)?/g; - const webOS_cli_version_number = Number(webOS_cli_version.match(regex)[0]); + const webOS_cli_version_number = Number(webOS_cli_version.match(regex)?.at(0)); if (webOS_cli_version_number < 1.12) { return logError(`Your webOS TV CLI version is ${webOS_cli_version_number}. You need to update it up to >=1.12`); } From c95c65be7f5f95e44c5683cbf39c350d28fc0e66 Mon Sep 17 00:00:00 2001 From: Marius456 Date: Wed, 17 Jan 2024 11:03:30 +0200 Subject: [PATCH 5/5] fix: added semver to compare versions --- packages/sdk-webos/src/deviceManager.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/sdk-webos/src/deviceManager.ts b/packages/sdk-webos/src/deviceManager.ts index 7d6a382c95..b0f11d59b1 100644 --- a/packages/sdk-webos/src/deviceManager.ts +++ b/packages/sdk-webos/src/deviceManager.ts @@ -31,6 +31,7 @@ import { CLI_WEBOS_ARES_SETUP_DEVICE, CLI_WEBOS_ARES_DEVICE_INFO, } from './constants'; +import semver from 'semver'; export const launchWebOSimulator = (c: RnvContext) => { logTask('launchWebOSimulator'); @@ -111,10 +112,15 @@ const launchAppOnSimulator = async (c: RnvContext, appPath: string) => { const webOS_cli_version = await execCLI(c, CLI_WEBOS_ARES_LAUNCH, `-V`); - const regex = /\d+(\.\d+)?/g; - const webOS_cli_version_number = Number(webOS_cli_version.match(regex)?.at(0)); - if (webOS_cli_version_number < 1.12) { - return logError(`Your webOS TV CLI version is ${webOS_cli_version_number}. You need to update it up to >=1.12`); + const webOS_cli_version_number = semver.coerce(webOS_cli_version); + + if (!webOS_cli_version_number) { + return logError(`Couldn't find webOS TV CLI. WebOS TV simulator requires webOS TV CLI 1.12 or higher.`, true); + } else if (semver.lt(webOS_cli_version_number, '1.12.0')) { + return logError( + `WebOS TV simulator requires webOS TV CLI 1.12 or higher. You are using webOS TV CLI ${webOS_cli_version_number}.`, + true + ); } const availableEmulatorVersions = getDirectories(simulatorDirPath); @@ -135,8 +141,9 @@ const launchAppOnSimulator = async (c: RnvContext, appPath: string) => { selectedOption = availableEmulatorVersions[0]; logInfo(`Found simulator ${selectedOption} at path: ${simulatorDirPath}`); } - const version = selectedOption.match(regex)[0]; + const regex = /\d+(\.\d+)?/g; + const version = selectedOption.match(regex)[0]; if (isSystemMac) { logInfo( `If you encounter damaged simulator error, run this command line: xattr -c ${simulatorDirPath}/${selectedOption}/${selectedOption}.app`