Add new folder change methods

This commit is contained in:
Ximi1970
2021-08-10 19:58:16 +02:00
parent d02b639574
commit ad664153cc
2 changed files with 150 additions and 29 deletions

View File

@@ -55,6 +55,7 @@ SysTrayX.Messaging = {
// Send preferences to app
SysTrayX.Messaging.sendPreferences();
if (SysTrayX.browserInfo.majorVersion < 91) {
// Set TB versionn
const version = SysTrayX.browserInfo.version.split(".")[0];
browser.folderChange.setVersion(Number(version));
@@ -70,7 +71,12 @@ SysTrayX.Messaging = {
folder,
added
) {
SysTrayX.Messaging.updateFilters(rootFolder, parentFolder, folder, added);
SysTrayX.Messaging.updateFilters(
rootFolder,
parentFolder,
folder,
added
);
});
// Set the count type in the folderChange listener
@@ -78,17 +84,48 @@ SysTrayX.Messaging = {
// Set the filters in the folderChange listener
browser.folderChange.setFilters(SysTrayX.Messaging.filters);
// Try to catch the window state
browser.windows.onFocusChanged.addListener(SysTrayX.Window.focusChanged);
} else {
browser.folders.onCreated.addListener(
SysTrayX.Messaging.listenerFolderCreated
);
browser.folders.onRenamed.addListener(
SysTrayX.Messaging.listenerFolderRenamed
);
browser.folders.onDeleted.addListener(
SysTrayX.Messaging.listenerFolderDeleted
);
// Test new API from TB91
browser.folders.onFolderInfoChanged.addListener(
SysTrayX.Messaging.listenerTest
SysTrayX.Messaging.listenerFolderInfoChanged
);
}
// Try to catch the window state
browser.windows.onFocusChanged.addListener(SysTrayX.Window.focusChanged);
},
listenerTest: function (folder, folderInfo) {
listenerFolderCreated: function (createdFolder) {
console.debug("Folder created: " + JSON.stringify(createdFolder));
const found = isParentFilteredFolder(createdFolder);
if (found) {
addFolderToFilters(createdFolder);
}
},
listenerFolderRenamed: function (originalFolder, renameFolder) {
console.debug("Folder renamed from: " + JSON.stringify(originalFolder));
console.debug("Folder renamed to: " + JSON.stringify(renameFolder));
},
listenerFolderDeleted: function (deletedFolder) {
console.debug("Folder deleted: " + JSON.stringify(deletedFolder));
deleteFilteredFolder(deletedFolder);
},
listenerFolderInfoChanged: function (folder, folderInfo) {
console.debug("Folder: " + JSON.stringify(folder));
console.debug("FolderInfo: " + JSON.stringify(folderInfo));
@@ -155,7 +192,11 @@ SysTrayX.Messaging = {
if ("filters" in changes && changes["filters"].newValue) {
SysTrayX.Messaging.filters = changes["filters"].newValue;
if (SysTrayX.browserInfo.majorVersion < 91) {
browser.folderChange.setFilters(SysTrayX.Messaging.filters);
} else {
console.debug("StorageChanged filters not available");
}
}
if ("closeType" in changes && changes["closeType"].newValue) {
@@ -177,7 +218,11 @@ SysTrayX.Messaging = {
if ("countType" in changes && changes["countType"].newValue) {
SysTrayX.Messaging.countType = changes["countType"].newValue;
if (SysTrayX.browserInfo.majorVersion < 91) {
browser.folderChange.setCountType(Number(SysTrayX.Messaging.countType));
} else {
console.debug("StorageChanged counttype not available");
}
}
if ("addonprefchanged" in changes && changes["addonprefchanged"].newValue) {

View File

@@ -503,3 +503,79 @@ async function getCloseType() {
const getCloseType = browser.storage.sync.get("closeType");
return await getCloseType.then(getCloseTypeCb, onCloseTypeError);
}
// Helper funcs for TB91 and later folder handling
// Check if a folder is in the filter list
function isFilteredFolder(folder) {
return (
SysTrayX.Messaging.filters.filter(
(filter) =>
filter.folder.accountId === folder.accountId &&
(filter.folder.path === folder.path ||
filter.folder.path.toUpperCase() === folder.path)
).length !== 0
);
}
// Check if the parent folder of a folder is in the filter list
function isParentFilteredFolder(folder) {
const parentPath = folder.path.substring(0, folder.path.lastIndexOf("/"));
return (
SysTrayX.Messaging.filters.filter(
(filter) =>
filter.folder.accountId === folder.accountId &&
(filter.folder.path === parentPath ||
filter.folder.path.toUpperCase() === parentPath)
).length !== 0
);
}
// Delete a folder from the filter list
function deleteFilteredFolder(deleteFolder) {
const newFilters = SysTrayX.Messaging.filters.filter(
(filter) =>
!(
filter.folder.accountId === deleteFolder.accountId &&
(filter.folder.path === deleteFolder.path ||
filter.folder.path.toUpperCase() === deleteFolder.path)
)
);
// Store the new filters
browser.storage.sync.set({
filters: newFilters,
});
}
// Get the account name from an id
function getAccountName(id) {
const account = SysTrayX.Messaging.accounts.filter(
(account) => account.id === id
)[0];
return account.name;
}
// Add a folder to the filter list
function addFolderToFilters(newFolder) {
const folder = {
...newFolder,
accountName: getAccountName(newFolder.accountId),
version: SysTrayX.version,
};
const filter = {
unread: true,
folder: folder,
};
const newFilters = SysTrayX.Messaging.filters;
newFilters.push(filter);
// Store the new filters
browser.storage.sync.set({
filters: newFilters,
});
}