[Add-on] Delete obsolete add-on DB files 92/218092/5
authorsurya.kumar7 <surya.kumar7@samsung.com>
Tue, 19 Nov 2019 09:05:10 +0000 (14:35 +0530)
committersurya.kumar7 <surya.kumar7@samsung.com>
Wed, 20 Nov 2019 10:10:57 +0000 (15:40 +0530)
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 <surya.kumar7@samsung.com>
wrt_app/addon/common/modules/options.js
wrt_app/addon/common/utils.js
wrt_app/common/config-search-paths.js
wrt_app/src/addon_manager.js

index b4366ac..f6304d9 100644 (file)
@@ -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
index 76048d0..d8f1c40 100644 (file)
@@ -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);
 }
index f059b43..8f6f739 100644 (file)
@@ -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') {
index c9bbee9..6492b88 100644 (file)
@@ -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');