From: liwei Date: Mon, 25 Jul 2022 11:50:05 +0000 (+0800) Subject: [WRTjs][VD] Get add-on info in local manifest file X-Git-Tag: accepted/tizen/unified/20220810.135739^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F30%2F278730%2F6;p=platform%2Fframework%2Fweb%2Fwrtjs.git [WRTjs][VD] Get add-on info in local manifest file Now app direct launch performance, get add-on using pkgmgr api, it cost some time(depend on installed app count), so TV plan to optimize this logic, when add-on is installed, vd-wgt-backend save mainifest.json to '/home/ owner/apps_rw/xwalk-service/addon/tizenid(***.***)/', then web app directly launch or wrt-loader launch, we can get add-on info from these mainfest files directly, it will only cost little time. Change-Id: If1ee7fc1777220dd9f6ff8af3d5c007c2c24441c Signed-off-by: liwei --- diff --git a/wrt_app/src/addon_manager.ts b/wrt_app/src/addon_manager.ts index 299bdce..dd8dfd9 100644 --- a/wrt_app/src/addon_manager.ts +++ b/wrt_app/src/addon_manager.ts @@ -39,6 +39,7 @@ interface AddonInfo { } const ADN_PATH = path.join(os.homedir(), 'data/electron/runtime_addon'); +const INSTALLED_ADN_MANIFEST_PATH = path.join(os.homedir(), 'apps_rw/xwalk-service/addon'); const MANIFEST_FILE = 'manifest.json'; const ADDONS_DB_FILE = 'addons_db.json'; @@ -159,11 +160,22 @@ class AddonManager { this.addonList = list; } + private getInstalledAddonManifest(): void { + if (!fs.existsSync(INSTALLED_ADN_MANIFEST_PATH)) + return; + fs.readdirSync(INSTALLED_ADN_MANIFEST_PATH).forEach((file) => { + console.log('in xwalkservice directory, add-on : ' + file); + let manifestPath = path.join(os.homedir(), 'apps_rw', file, '/shared/res'); + let pkgname = path.join(file); + this.checkAddon(manifestPath, pkgname); + }); + } + initialize(): boolean { wrt.on('addon-installed', (event: any, pathList: string[]) => { for (let path of pathList) { console.log('addon-installed at ' + path); - this.checkAddon(path); + this.checkAddon(path, ''); } this.updateDB(); }); @@ -172,7 +184,12 @@ class AddonManager { console.log('addon-unistalled named ' + id); }); - wrt.requestAddonList(); + if (wrt.tv) { + this.getInstalledAddonManifest(); + this.updateDB(); + } else { + wrt.requestAddonList(); + } return this.isAddonAvailable(); } @@ -274,7 +291,7 @@ class AddonManager { this.eventManager.emit(eventName, ...args); } - private checkAddon(appPath: string) { + private checkAddon(appPath: string, pkgname: string) { let manifest; try { let manifestPath = path.join(appPath, MANIFEST_FILE); @@ -285,11 +302,14 @@ class AddonManager { } let arr = appPath.split("/"); - let index = 0; - for (let i in arr) { - if (arr[i] == 'shared') { - index = Number(i) - 1; - break; + if(pkgname === '') { + for (let i in arr) { + if (arr[i] == 'shared') { + let index = 0; + index = Number(i) - 1; + pkgname = arr[index]; + break; + } } } @@ -298,7 +318,7 @@ class AddonManager { name: manifest.name, isChromeExtension, path: isChromeExtension ? appPath : path.join(appPath, manifest.main), - pkgid: arr[index], + pkgid: pkgname, activate: true }); }