mirror of
https://github.com/Ximi1970/systray-x.git
synced 2025-11-14 01:06:05 +01:00
Add new folder change methods
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user