From: surya.kumar7 Date: Tue, 19 Nov 2019 09:05:10 +0000 (+0530) Subject: [Add-on] Delete obsolete add-on DB files X-Git-Tag: accepted/tizen/5.5/unified/20191122.012336^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9b3c463db2dbfc2e42148287185ea5a0410378f0;p=platform%2Fframework%2Fweb%2Fwrtjs.git [Add-on] Delete obsolete add-on DB files 1. Once installed add-on info has been gathered, add-on db folder will be filtered to remove DBs of uninstalled or expired add-ons 2. Introduced a clearAll API to 'options' module Change-Id: I84d3f271be53d66eae3689bb37c98c8a228e1815 Signed-off-by: surya.kumar7 --- diff --git a/wrt_app/addon/common/modules/options.js b/wrt_app/addon/common/modules/options.js index b4366ac..f6304d9 100644 --- a/wrt_app/addon/common/modules/options.js +++ b/wrt_app/addon/common/modules/options.js @@ -1,58 +1,84 @@ 'use strict'; const fs = require('fs'); -const path = require('path'); const utils = require('../utils'); -const REPO_PATH = path.join(require('os').homedir(), 'data/electron/runtime_addon/'); +const REPO_PATH = require('path').join(require('os').homedir(), 'data/electron/runtime_addon/'); const DB_FILE = '_db.json'; -module.exports = { - get: function (key) { - const addon_name = utils.getPackageID(); - if (!addon_name) { - console.error(`Package ID not found`); - return undefined; - } +function getDBPath() { + const addon_name = utils.getPackageID(); + if (addon_name) { const DB_PATH = REPO_PATH + addon_name + DB_FILE; console.log(`DB_PATH: ${DB_PATH}`); + return DB_PATH; + } else { + console.error('Package ID not found'); + return ''; + } +} + +function get(key) { + const DB_PATH = getDBPath(); + if (!DB_PATH) + return undefined; + try { + const fileContents = fs.readFileSync(DB_PATH); + const jsonObject = JSON.parse(fileContents); + console.log(`Read value: ${JSON.stringify(jsonObject)}`); + return jsonObject[key]; + } catch (err) { + console.log(`An error has occurred: ${err}`); + return undefined; + } +} + +function set(key, value) { + const DB_PATH = getDBPath(); + if (!DB_PATH) + return false; + try { + let jsonObject; try { const fileContents = fs.readFileSync(DB_PATH); - const jsonObject = JSON.parse(fileContents); - console.log(`Read value: ${JSON.stringify(jsonObject)}`); - return jsonObject[key]; - } catch (err) { - console.log(`An error has occurred: ${err}`); - return undefined; + jsonObject = JSON.parse(fileContents); + console.log(`Current value: ${JSON.stringify(jsonObject)}`); + } catch { + console.log(`Add-on DB file doesn't exist`); + jsonObject = {}; } - }, + jsonObject[key] = value; + console.log(`New value: ${JSON.stringify(jsonObject)}`); + const jsonString = JSON.stringify(jsonObject); + fs.writeFileSync(DB_PATH, jsonString); + return true; + } catch (err) { + console.log(`An error has occurred: ${err}`); + return false; + } +} - set: function (key, value) { - const addon_name = utils.getPackageID(); - if (!addon_name) { - console.error(`Package ID not found`); - return false; - } - const DB_PATH = REPO_PATH + addon_name + DB_FILE; - console.log(`DB_PATH: ${DB_PATH}`); - try { - let jsonObject; - try { - const fileContents = fs.readFileSync(DB_PATH); - jsonObject = JSON.parse(fileContents); - console.log(`Current value: ${JSON.stringify(jsonObject)}`); - } catch { - console.log(`Add-on DB file doesn't exist`); - jsonObject = {}; - } - jsonObject[key] = value; - console.log(`New value: ${JSON.stringify(jsonObject)}`); - const jsonString = JSON.stringify(jsonObject); - fs.writeFileSync(DB_PATH, jsonString); - return true; - } catch (err) { - console.log(`An error has occurred: ${err}`); - return false; - } +function clearAll() { + const DB_PATH = getDBPath(); + if (!DB_PATH) + return false; + try { + fs.statSync(DB_PATH); + } catch (err) { + console.log(`An error has occurred: ${err}`); + return true; } + try { + fs.unlinkSync(DB_PATH); + } catch (err) { + console.log(`An error has occurred: ${err}`); + return false; + } + return true; +} + +module.exports = { + clearAll, + get, + set } \ No newline at end of file diff --git a/wrt_app/addon/common/utils.js b/wrt_app/addon/common/utils.js index 76048d0..d8f1c40 100644 --- a/wrt_app/addon/common/utils.js +++ b/wrt_app/addon/common/utils.js @@ -2,7 +2,7 @@ const keyTerm = 'globalapps'; const delimiter = '/'; function extractID(line) { - let keyTermAt = line.search(keyTerm); + let keyTermAt = line.indexOf(keyTerm); let delimiterAt = line.indexOf(delimiter, keyTermAt); return line.substr(delimiterAt + 1, 10); } diff --git a/wrt_app/common/config-search-paths.js b/wrt_app/common/config-search-paths.js index f059b43..8f6f739 100644 --- a/wrt_app/common/config-search-paths.js +++ b/wrt_app/common/config-search-paths.js @@ -1,9 +1,8 @@ 'use strict'; -const path = require('path'); const Module = require('module'); const originalResolveFilename = Module._resolveFilename; -const ADDONS_PATH = path.join(__dirname, '..', 'addon', process.type, 'addonapi.js'); +const ADDONS_PATH = require('path').join(__dirname, '..', 'addon', process.type, 'addonapi.js'); Module._resolveFilename = function (request, parent, isMain) { if (request === 'addonapi') { diff --git a/wrt_app/src/addon_manager.js b/wrt_app/src/addon_manager.js index c9bbee9..6492b88 100644 --- a/wrt_app/src/addon_manager.js +++ b/wrt_app/src/addon_manager.js @@ -277,18 +277,37 @@ class AddonManager { } } + let addons_pkgids_ = []; for (let addon of adnPkgs) { - if (addon_list) { - for (let tmpAddon of addon_list) { - if (tmpAddon.name == addon.name) { - console.log('already in db'); - adnPkgs[adnPkgs.indexOf(addon)].activate = - tmpAddon.activate; - } + addons_pkgids_.push(addon.pkgid); + for (let tmpAddon of addon_list) { + if (tmpAddon.name == addon.name) { + console.log('already in db'); + adnPkgs[adnPkgs.indexOf(addon)].activate = + tmpAddon.activate; } } } + // Removes obsolete add-on DB files + try { + const DB_FILES = '_db.json'; + tmpfs.readdirSync(ADN_PATH).forEach((file) => { + if (file != ADDONS_DB_FILE && file.endsWith(DB_FILES)) { + let id = file.substr(0, file.indexOf(DB_FILES)); + if (addons_pkgids_.indexOf(id) === -1) { + try { + tmpfs.unlinkSync(path.join(ADN_PATH, file)); + } catch (err) { + console.log(`${file} deletion failed`); + } + } + } + }); + } catch (err) { + console.log(`An error occurred: ${err}`); + } + var fd; try { fd = tmpfs.openSync(db_path, 'w');