From 9736a3a95b0b92be55ad31059bccbe694b8ba2ff Mon Sep 17 00:00:00 2001 From: "hyunduk.kim" Date: Wed, 11 Sep 2019 17:35:16 +0900 Subject: [PATCH] [Addon] Addon Package Handling - Check installed addon pkg list and add it in addons_db.json - Uninstall addon package requested from Addon Setting App This should work with commit below in chromium-efl : https://review.tizen.org/gerrit/213786 Change-Id: Ic4c9d29ff423d045fce1c300602f719cd6ded9e8 Signed-off-by: hyunduk.kim --- wrt_app/src/addon_manager.js | 78 ++++++++++++++++++++++++++++++++++++ wrt_app/src/runtime.js | 16 +++++++- 2 files changed, 92 insertions(+), 2 deletions(-) diff --git a/wrt_app/src/addon_manager.js b/wrt_app/src/addon_manager.js index c41c5a04..83696ccb 100644 --- a/wrt_app/src/addon_manager.js +++ b/wrt_app/src/addon_manager.js @@ -223,6 +223,84 @@ class AddonManager { static getAddonsPath() { return ADN_PATH; } + + static isAddon(path) { + let tmpPath = require('path'); + let mani_path = tmpPath.join(path, MANIFEST_FILE); + let db_path = tmpPath.join(ADN_PATH, ADDONS_DB_FILE); + let tmpfs = require('fs'); + let json; + try { + json = JSON.parse(tmpfs.readFileSync(mani_path)); + } catch (e) { + console.log('fail to read manifest'); + return false; + } + + let addon = new Object(); + addon.name = json.name; + addon.version = json.version; + addon.settings = json.settings; + addon.description = json.description; + addon.path = path; + let arr = path.split("/"); + let index = 0; + for (let i in arr) { + if (arr[i] == 'shared') { + index = i - 1; + break; + } + } + addon.pkgid = arr[index]; + addon.type = 'WRT'; + addon.activate = true; + + let addon_list = []; + try { + addon_list = JSON.parse(tmpfs.readFileSync(db_path)); + } catch (e) { + try { + tmpfs.statSync(ADN_PATH); + } catch (e) { + console.log('db path not exist'); + let path_dep1 = tmpPath.join(require('os').homedir(), + 'data/electron'); + let path_dep2 = tmpPath.join(path_dep1, 'runtime_addon'); + // fs.mkdirSync didn't work to create the directory recursively + // even with recursive as true. + // That's why creating a directory one by one here. + tmpfs.mkdirSync(path_dep1, {recursive: true}); + tmpfs.mkdirSync(path_dep2, {recursive: true}); + } + } + + let allowPush = true; + if (addon_list) { + for (let i in addon_list) { + let tmpAddon = addon_list[i]; + if (tmpAddon.name == addon.name) { + console.log('already in db'); + allowPush = false; + break; + } + } + } + if (allowPush) { + addon_list.push(addon); + } + + var fd; + try { + fd = tmpfs.openSync(db_path, 'w'); + } catch (e) { + console.log('db file open error'); + return false; + } + fs.writeSync(fd, JSON.stringify(addon_list)); + fs.closeSync(fd); + fs.chmodSync(db_path, 0o666); + return true; + } } module.exports = AddonManager; diff --git a/wrt_app/src/runtime.js b/wrt_app/src/runtime.js index 659f742f..dc693910 100755 --- a/wrt_app/src/runtime.js +++ b/wrt_app/src/runtime.js @@ -174,6 +174,16 @@ class Runtime { console.log('low-memory'); _this.webApplication.lowMemory(); }); + wrt.on('wgt-installed', function(event, path) { + console.log('wgt-installed at ' + path); + if (AddonManager.isAddon(path)) { + console.log('Addon is updated on DB'); + } + }); + wrt.on('addon-uninstalled', function(event, id) { + console.log('addon-unistalled named ' + id); + }); + wrt.getInstalledPkg(); } handleIpcMessages() { var _this = this; @@ -182,9 +192,11 @@ class Runtime { _this.addonManager.build(); return _this.addonManager.activate(app, name); }); - ipcMain.on(IPC_MESSAGE.ADDONS.UNINSTALLED, (sender, name) => { + ipcMain.on(IPC_MESSAGE.ADDONS.UNINSTALLED, (sender, name, pkg) => { console.log('handleIpcMessages: UNINSTALLED ' + name); - return _this.addonManager.deactivate(app, name); + _this.addonManager.deactivate(app, name); + wrt.reqUninstallPkg(pkg); + return true; }); ipcMain.on(IPC_MESSAGE.ADDONS.ACTIVATE, (sender, name) => { console.log('handleIpcMessages: ACTIVATE ' + name); -- 2.34.1