From 13a18bf40abcd27922c77cc9d25384015c8b4e29 Mon Sep 17 00:00:00 2001 From: liwei Date: Mon, 25 Jul 2022 19:50:05 +0800 Subject: [PATCH] [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 --- wrt_app/src/addon_manager.ts | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) 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 }); } -- 2.7.4