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

View File

@@ -460,9 +460,9 @@ async function getFilters() {
console.debug("Checked filters: " + JSON.stringify(newFilters)); console.debug("Checked filters: " + JSON.stringify(newFilters));
// return newFilters; // return newFilters;
return filters; return filters;
} }
function onFiltersError() { function onFiltersError() {
return undefined; return undefined;
@@ -503,3 +503,79 @@ async function getCloseType() {
const getCloseType = browser.storage.sync.get("closeType"); const getCloseType = browser.storage.sync.get("closeType");
return await getCloseType.then(getCloseTypeCb, onCloseTypeError); 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,
});
}