]> git.wh0rd.org - chrome-ext/tabs-backup.git/blobdiff - background.js
make it mine
[chrome-ext/tabs-backup.git] / background.js
index 0f8a06cf202c259bd46b7df012bfd16f56bcd7a8..4ba12fa3db836b144cc10e1203cd25ed2f5ef3a1 100644 (file)
@@ -1,24 +1,26 @@
+// Create a backup on first install (or if storage is wiped for some reason.
+chrome.storage.local.get(function(items) {
+       // Setup defaults.
+       if (items.prefs_max_backup_items === undefined) {
+               chrome.storage.local.set({prefs_max_backup_items: 10});
+       }
+       if (items.prefs_backup_timer === undefined) {
+               chrome.storage.local.set({prefs_backup_timer: 30});
+       }
 
-// Set default values if needed
-if (!localStorage.prefsMaxBackupItems) {
-       localStorage.prefsMaxBackupItems = "10";
-}
-
-if (!localStorage.prefsBackupTimer) {
-       localStorage.prefsBackupTimer = "30";
-}
-
-if (!localStorage.lastBackupTime) {
-       localStorage.lastBackupTime = -1;
+       // If a backup exists already, nothing to do.
+       if (items.backups_list) {
+               return;
+       }
 
        // Create a backup now
        var d = new Date();
        var formattedDate = date_format (d);
 
-       backupNow(true, formattedDate, function(success, backupName, backupObj) {
+       backupNow(true, formattedDate, function({success, backupName, backupObj}) {
                // backup completed
        });
-}
+});
 
 function initAlarm () {
        //console.log("initAlarm");
@@ -28,8 +30,10 @@ function initAlarm () {
        // Clear any previous alarm
        chrome.alarms.clearAll();
 
-       var timerMinutes = parseInt(localStorage.prefsBackupTimer);
-       chrome.alarms.create(BACKUP_ALARM_NAME, {periodInMinutes: timerMinutes});
+       chrome.storage.local.get(function(items) {
+               const timerMinutes = items.prefs_backup_timer;
+               chrome.alarms.create(BACKUP_ALARM_NAME, {periodInMinutes: timerMinutes});
+       });
 }
 
 initAlarm();
@@ -42,7 +46,7 @@ function onAlarm (alarm) {
 
        // if last backup time != lastTabsEdit
        //      perform automatic backup
-               backupNow(true, formattedDate, function(success, backupName, backupObj) {
+               backupNow(true, formattedDate, function({success, backupName, backupObj}) {
                        // automatic backup completed
                        var popupViews = chrome.extension.getViews({type: "popup"});
                        if (popupViews.length > 0) {
@@ -86,13 +90,13 @@ function backupNowManual (callbackDone) {
 }
 
 function deleteOldestBackup () {
-       chrome.storage.local.get("backups_list", function(items) {
+       chrome.storage.local.get(function(items) {
                if(!items.backups_list) {
                        return;
                }
 
                var backupsList = items.backups_list;
-               var numItemsToDelete = backupsList.length - parseInt(localStorage.prefsMaxBackupItems);
+               var numItemsToDelete = backupsList.length - items.prefs_max_backup_items;
                if (numItemsToDelete > 0) {
                        var i = 0;
                        var loopFunc = function () {
@@ -180,7 +184,7 @@ function backupNow(isAutomatic, backupName, callbackDone) {
                        // only show a single window.
                        if (windowTabs.length == 1) {
                                const tab = windowTabs[0];
-                               if (tab.title == 'New Tab' && tab.url == 'chrome://newtab/')
+                               if (tab.url == 'chrome://newtab/')
                                        continue;
                        }
 
@@ -221,12 +225,12 @@ function backupNow(isAutomatic, backupName, callbackDone) {
                                //alert ("Error: " + chrome.runtime.lastError.message);
                                updateBrowserActionIcon (1);
 
-                               callbackDone(false);
+                               callbackDone({success: false});
                        } else {
                                console.log("backup saved");
                                //alert("Backup saved successfully!");
 
-                               chrome.storage.local.get("backups_list", function(items) {
+                               chrome.storage.local.get(function(items) {
                                        var backupsList = [];
                                        if(items.backups_list) {
                                                backupsList = items.backups_list;
@@ -242,14 +246,18 @@ function backupNow(isAutomatic, backupName, callbackDone) {
                                                if (chrome.runtime.lastError) {
                                                        console.log ("Error saving backups_list: " + chrome.runtime.lastError.message);
                                                        updateBrowserActionIcon (1);
-                                                       callbackDone(false);
+                                                       callbackDone({success: false});
                                                } else {
                                                        console.log("Backups list saved successfully");
 
                                                        updateBrowserActionIcon (0);
-                                                       callbackDone(true, backupName, fullBackup);
+                                                       callbackDone({
+                                                               success: true,
+                                                               backupName,
+                                                               backupObj: fullBackup,
+                                                       });
 
-                                                       if (backupsList.length > parseInt(localStorage.prefsMaxBackupItems)) {
+                                                       if (backupsList.length > items.prefs_max_backup_items) {
                                                                deleteOldestBackup();
                                                        }
                                                }
@@ -275,7 +283,7 @@ function updateBrowserActionIcon (status) {
                        break;
        }
 
-       chrome.browserAction.setIcon({path: icon});
+       chrome.action.setIcon({path: icon});
 }
 
 function deleteBackup (backupName, callback) {
@@ -407,3 +415,32 @@ function restoreNow(backupName) {
                }
        });
 }
+
+/**
+ * Callback from other pages (like the popup).
+ */
+chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
+       console.log(`Got message from ${sender.id}: action=${request.action}`, request);
+
+       let asyncResponse = false;
+       switch (request?.action) {
+               case 'initAlarm':
+                       initAlarm();
+                       break;
+
+               case 'restoreNow':
+                       restoreNow(...request.args);
+                       break;
+
+               case 'deleteBackup':
+                       deleteBackup(...request.args, sendResponse);
+                       asyncResponse = true;
+                       break;
+
+               case 'backupNowManual':
+                       backupNowManual(sendResponse);
+                       asyncResponse = true;
+                       break;
+       }
+       return asyncResponse;
+});