diff --git a/webext/background.html b/webext/background.html index 073a7dd..c133891 100644 --- a/webext/background.html +++ b/webext/background.html @@ -6,11 +6,12 @@ + + +

Background

Background HTML

- -
diff --git a/webext/background.js b/webext/background.js index f3f6f56..0d7090d 100644 --- a/webext/background.js +++ b/webext/background.js @@ -14,6 +14,7 @@ var SysTrayX = { SysTrayX.Messaging = { accounts: [], + folderTree: {}, countType: 0, closeType: 1, filters: undefined, @@ -56,8 +57,13 @@ SysTrayX.Messaging = { SysTrayX.Messaging.unreadCb(unread); }); - browser.folderChange.onFolderChange.addListener(function () { - SysTrayX.Messaging.updateFilters(); + browser.folderChange.onFolderChange.addListener(function ( + rootFolder, + parentFolder, + folder, + added + ) { + SysTrayX.Messaging.updateFilters(rootFolder, parentFolder, folder, added); }); // Set the count type in the folderChange listener @@ -136,8 +142,36 @@ SysTrayX.Messaging = { // // Callback for folder changes // - updateFilters: function (count) { - console.debug("Folder changed"); + updateFilters: async function (rootFolder, parentFolder, folder, added) { + console.debug("Folder changed account: " + rootFolder); + console.debug("Folder changed parent folder: " + parentFolder); + console.debug("Folder changed folder: " + folder); + + if (added) { + console.debug("Folder changed : added"); + } else { + console.debug("Folder changed : removed"); + } + + const oldFolders = SysTrayX.Messaging.folderTree[rootFolder]; + const oldPaths = getFolderPaths(oldFolders); + + // Get new accounts for the changes + const accounts = await browser.accounts.list(); + + // Get new folder tree + const folderTree = getFolderTree(accounts, SysTrayX.browserInfo); + const newFolders = folderTree[rootFolder]; + const newPaths = getFolderPaths(newFolders); + const changes = findFolderPathsDiff(oldPaths, newPaths); + + console.debug("Folder paths old: " + JSON.stringify(oldPaths)); + console.debug("Folder paths new: " + JSON.stringify(newPaths)); + console.debug("Folder changes: " + JSON.stringify(changes)); + + // Store the new accounts and folder tree + SysTrayX.Messaging.accounts = accounts; + SysTrayX.Messaging.folderTree = folderTree; }, sendBrowserInfo: function () { @@ -497,6 +531,12 @@ async function start() { // Get all accounts SysTrayX.Messaging.accounts = await browser.accounts.list(); + // Get folder tree + SysTrayX.Messaging.folderTree = getFolderTree( + SysTrayX.Messaging.accounts, + SysTrayX.browserInfo + ); + // Get the filters (needs the accounts) SysTrayX.Messaging.filters = await getFilters(); diff --git a/webext/js/folderChange.js b/webext/js/folderChange.js index 82102a8..2e57e84 100644 --- a/webext/js/folderChange.js +++ b/webext/js/folderChange.js @@ -89,8 +89,8 @@ var folderChange = class extends ExtensionCommon.ExtensionAPI { // function that removes those listeners. To have the event fire in your extension, // call fire.async. register(fire) { - function callback(event,added) { - return fire.async(added); + function callback(event, rootFolder, parentFolder, folder, added) { + return fire.async(rootFolder, parentFolder, folder, added); } SysTrayX.addOnFolderChange(callback); @@ -201,13 +201,25 @@ var SysTrayX = { OnItemAdded(parentItem, item) { if (SysTrayX.callbackOnFolderChange) { - SysTrayX.callbackOnFolderChange("folder-changed", true); + SysTrayX.callbackOnFolderChange( + "folder-changed", + parentItem.rootFolder.prettyName, + parentItem.prettyName, + item.prettyName, + true + ); } }, OnItemRemoved(parentItem, item) { if (SysTrayX.callbackOnFolderChange) { - SysTrayX.callbackOnFolderChange("folder-changed", false); + SysTrayX.callbackOnFolderChange( + "folder-changed", + parentItem.rootFolder.prettyName, + parentItem.prettyName, + item.prettyName, + false + ); } }, diff --git a/webext/schema_folderchange.json b/webext/schema_folderchange.json index 1dfe0d4..48f57dd 100644 --- a/webext/schema_folderchange.json +++ b/webext/schema_folderchange.json @@ -74,13 +74,24 @@ "type": "function", "description": "Fires when there is a folder added or removed.", "parameters": [ + { + "name": "rootFolder", + "type": "string" + }, + { + "name": "parentFolder", + "type": "string" + }, + { + "name": "folder", + "type": "string" + }, { "name": "added", "type": "boolean" } ] } - ] } ]