2020-01-12 15:09:47 +01:00
|
|
|
var SysTrayX = {
|
2020-04-21 21:38:44 +02:00
|
|
|
startupState: undefined,
|
|
|
|
|
|
2020-12-05 15:18:30 +01:00
|
|
|
restorePositions: false,
|
|
|
|
|
startupWindowPositions: [],
|
|
|
|
|
|
2020-06-05 19:37:15 +02:00
|
|
|
hideDefaultIcon: false,
|
|
|
|
|
|
2020-04-04 16:51:13 +02:00
|
|
|
platformInfo: undefined,
|
2020-04-04 19:34:19 +02:00
|
|
|
|
2020-04-27 23:31:41 +02:00
|
|
|
browserInfo: undefined,
|
|
|
|
|
|
2020-04-04 19:34:19 +02:00
|
|
|
version: "0",
|
2020-01-12 15:09:47 +01:00
|
|
|
};
|
2020-01-04 23:47:26 +01:00
|
|
|
|
|
|
|
|
SysTrayX.Messaging = {
|
2020-05-03 23:39:02 +02:00
|
|
|
accounts: [],
|
2020-08-29 20:18:40 +02:00
|
|
|
folderTree: {},
|
2020-05-09 17:10:54 +02:00
|
|
|
countType: 0,
|
2020-08-02 21:32:09 +02:00
|
|
|
closeType: 1,
|
2020-05-09 17:10:54 +02:00
|
|
|
filters: undefined,
|
2021-08-08 21:52:33 +02:00
|
|
|
unread: {},
|
2020-01-11 22:08:11 +01:00
|
|
|
|
2020-04-04 19:34:19 +02:00
|
|
|
init: function () {
|
2020-12-05 15:18:30 +01:00
|
|
|
// Send the startup positions?
|
|
|
|
|
if (SysTrayX.restorePositions) {
|
|
|
|
|
SysTrayX.Link.postSysTrayXMessage({
|
|
|
|
|
positions: SysTrayX.startupWindowPositions,
|
|
|
|
|
});
|
2020-11-28 14:51:06 +01:00
|
|
|
}
|
|
|
|
|
|
2020-12-31 16:43:02 +01:00
|
|
|
// Minimize on startup handled by Companion app as backup
|
|
|
|
|
if (SysTrayX.startupState == "minimized") {
|
|
|
|
|
SysTrayX.Link.postSysTrayXMessage({ window: "minimized_all_startup" });
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-03 17:45:20 +02:00
|
|
|
// Lookout for storage changes
|
2020-01-22 23:14:46 +01:00
|
|
|
browser.storage.onChanged.addListener(SysTrayX.Messaging.storageChanged);
|
|
|
|
|
|
2020-06-14 23:20:29 +02:00
|
|
|
// Send the platform info to app
|
|
|
|
|
SysTrayX.Messaging.sendLocale();
|
|
|
|
|
|
2020-04-27 23:31:41 +02:00
|
|
|
// Send the platform info to app
|
|
|
|
|
SysTrayX.Messaging.sendPlatformInfo();
|
|
|
|
|
|
|
|
|
|
// Send the browser info to app
|
|
|
|
|
SysTrayX.Messaging.sendBrowserInfo();
|
|
|
|
|
|
2020-04-04 19:34:19 +02:00
|
|
|
// Send version to app
|
|
|
|
|
SysTrayX.Messaging.sendVersion();
|
|
|
|
|
|
2020-06-05 19:37:15 +02:00
|
|
|
// Send hide default icon preference
|
|
|
|
|
SysTrayX.Messaging.sendHideDefaultIcon();
|
|
|
|
|
|
2020-01-22 23:14:46 +01:00
|
|
|
// Send preferences to app
|
|
|
|
|
SysTrayX.Messaging.sendPreferences();
|
|
|
|
|
|
2021-08-10 19:58:16 +02:00
|
|
|
if (SysTrayX.browserInfo.majorVersion < 91) {
|
|
|
|
|
// Set TB versionn
|
|
|
|
|
const version = SysTrayX.browserInfo.version.split(".")[0];
|
|
|
|
|
browser.folderChange.setVersion(Number(version));
|
|
|
|
|
|
|
|
|
|
// Catch the unread / new mails
|
|
|
|
|
browser.folderChange.onUnreadMailChange.addListener(function (unread) {
|
|
|
|
|
SysTrayX.Messaging.unreadCb(unread);
|
|
|
|
|
});
|
2020-05-09 18:04:04 +02:00
|
|
|
|
2021-08-10 19:58:16 +02:00
|
|
|
browser.folderChange.onFolderChange.addListener(function (
|
|
|
|
|
rootFolder,
|
|
|
|
|
parentFolder,
|
|
|
|
|
folder,
|
|
|
|
|
added
|
|
|
|
|
) {
|
|
|
|
|
SysTrayX.Messaging.updateFilters(
|
|
|
|
|
rootFolder,
|
|
|
|
|
parentFolder,
|
|
|
|
|
folder,
|
|
|
|
|
added
|
|
|
|
|
);
|
|
|
|
|
});
|
2020-08-21 21:02:07 +02:00
|
|
|
|
2021-08-10 19:58:16 +02:00
|
|
|
// Set the count type in the folderChange listener
|
|
|
|
|
browser.folderChange.setCountType(Number(SysTrayX.Messaging.countType));
|
2020-05-09 17:10:54 +02:00
|
|
|
|
2021-08-10 19:58:16 +02:00
|
|
|
// Set the filters in the folderChange listener
|
|
|
|
|
browser.folderChange.setFilters(SysTrayX.Messaging.filters);
|
|
|
|
|
} 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.listenerFolderInfoChanged
|
|
|
|
|
);
|
|
|
|
|
}
|
2020-05-09 17:10:54 +02:00
|
|
|
|
2020-02-03 23:05:20 +01:00
|
|
|
// Try to catch the window state
|
2020-02-24 23:00:45 +01:00
|
|
|
browser.windows.onFocusChanged.addListener(SysTrayX.Window.focusChanged);
|
2021-08-10 19:58:16 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
listenerFolderCreated: function (createdFolder) {
|
|
|
|
|
console.debug("Folder created: " + JSON.stringify(createdFolder));
|
2021-08-08 17:34:42 +02:00
|
|
|
|
2021-08-10 20:13:33 +02:00
|
|
|
const found = isParentFolderInFilters(createdFolder);
|
2021-08-10 19:58:16 +02:00
|
|
|
if (found) {
|
|
|
|
|
addFolderToFilters(createdFolder);
|
|
|
|
|
}
|
2021-08-08 17:34:42 +02:00
|
|
|
},
|
|
|
|
|
|
2021-08-10 19:58:16 +02:00
|
|
|
listenerFolderRenamed: function (originalFolder, renameFolder) {
|
|
|
|
|
console.debug("Folder renamed from: " + JSON.stringify(originalFolder));
|
|
|
|
|
console.debug("Folder renamed to: " + JSON.stringify(renameFolder));
|
2021-08-10 20:13:33 +02:00
|
|
|
|
|
|
|
|
deleteFolderFromFilters(originalFolder);
|
|
|
|
|
|
|
|
|
|
const found = isParentFolderInFilters(renameFolder);
|
|
|
|
|
if (found) {
|
|
|
|
|
addFolderToFilters(renameFolder);
|
|
|
|
|
}
|
2021-08-10 19:58:16 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
listenerFolderDeleted: function (deletedFolder) {
|
|
|
|
|
console.debug("Folder deleted: " + JSON.stringify(deletedFolder));
|
|
|
|
|
|
2021-08-10 20:13:33 +02:00
|
|
|
deleteFolderFromFilters(deletedFolder);
|
2021-08-10 19:58:16 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
listenerFolderInfoChanged: function (folder, folderInfo) {
|
2021-08-08 17:34:42 +02:00
|
|
|
console.debug("Folder: " + JSON.stringify(folder));
|
|
|
|
|
console.debug("FolderInfo: " + JSON.stringify(folderInfo));
|
2021-08-08 21:52:33 +02:00
|
|
|
|
|
|
|
|
if (folderInfo.unreadMessageCount !== undefined) {
|
|
|
|
|
if (SysTrayX.Messaging.unread[folder.accountId] === undefined) {
|
|
|
|
|
SysTrayX.Messaging.unread[folder.accountId] = {};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SysTrayX.Messaging.unread[folder.accountId][folder.path] =
|
|
|
|
|
folderInfo.unreadMessageCount;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
console.debug("Unread: " + JSON.stringify(SysTrayX.Messaging.unread));
|
|
|
|
|
|
|
|
|
|
let count = 0;
|
|
|
|
|
SysTrayX.Messaging.filters.forEach((filter) => {
|
|
|
|
|
const accountId = filter.folder.accountId;
|
|
|
|
|
const path = filter.folder.path;
|
|
|
|
|
|
|
|
|
|
// console.debug("FilterId: " + accountId);
|
|
|
|
|
// console.debug("FilterPath: " + path);
|
|
|
|
|
|
|
|
|
|
if (SysTrayX.Messaging.unread[accountId] !== undefined) {
|
|
|
|
|
if (SysTrayX.Messaging.unread[accountId][path] !== undefined) {
|
|
|
|
|
console.debug(
|
|
|
|
|
"Match found, count: " + SysTrayX.Messaging.unread[accountId][path]
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
count = count + SysTrayX.Messaging.unread[accountId][path];
|
|
|
|
|
} else if (
|
|
|
|
|
SysTrayX.Messaging.unread[accountId][path.toUpperCase()] !== undefined
|
|
|
|
|
) {
|
|
|
|
|
console.debug(
|
|
|
|
|
"Match found, count: " +
|
|
|
|
|
SysTrayX.Messaging.unread[accountId][path.toUpperCase()]
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
count =
|
|
|
|
|
count + SysTrayX.Messaging.unread[accountId][path.toUpperCase()];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
console.debug("Total count: " + count);
|
|
|
|
|
|
|
|
|
|
SysTrayX.Link.postSysTrayXMessage({ unreadMail: count });
|
2020-01-04 23:47:26 +01:00
|
|
|
},
|
2020-01-11 22:08:11 +01:00
|
|
|
|
2020-05-10 20:55:27 +02:00
|
|
|
onCloseButton: function () {
|
2020-06-21 11:12:49 +02:00
|
|
|
SysTrayX.Link.postSysTrayXMessage({ window: "minimized_all" });
|
|
|
|
|
/*
|
2020-05-10 20:55:27 +02:00
|
|
|
browser.windows.update(browser.windows.WINDOW_ID_CURRENT, {
|
|
|
|
|
state: "minimized",
|
|
|
|
|
});
|
2020-06-21 11:12:49 +02:00
|
|
|
*/
|
2020-05-05 16:44:37 +02:00
|
|
|
},
|
|
|
|
|
|
2020-01-22 23:14:46 +01:00
|
|
|
//
|
|
|
|
|
// Handle a storage change
|
|
|
|
|
//
|
2020-04-04 19:34:19 +02:00
|
|
|
storageChanged: function (changes, area) {
|
2020-01-22 23:14:46 +01:00
|
|
|
// Get the new preferences
|
|
|
|
|
|
2020-05-09 17:10:54 +02:00
|
|
|
if ("filters" in changes && changes["filters"].newValue) {
|
|
|
|
|
SysTrayX.Messaging.filters = changes["filters"].newValue;
|
2020-05-12 21:38:03 +02:00
|
|
|
|
2021-08-10 19:58:16 +02:00
|
|
|
if (SysTrayX.browserInfo.majorVersion < 91) {
|
|
|
|
|
browser.folderChange.setFilters(SysTrayX.Messaging.filters);
|
|
|
|
|
} else {
|
|
|
|
|
console.debug("StorageChanged filters not available");
|
|
|
|
|
}
|
2020-04-03 17:45:20 +02:00
|
|
|
}
|
|
|
|
|
|
2020-08-09 20:22:19 +02:00
|
|
|
if ("closeType" in changes && changes["closeType"].newValue) {
|
|
|
|
|
SysTrayX.Messaging.closeType = changes["closeType"].newValue;
|
|
|
|
|
|
|
|
|
|
browser.windowEvent.setCloseType(Number(SysTrayX.Messaging.closeType));
|
2020-05-10 20:55:27 +02:00
|
|
|
|
2020-08-09 20:22:19 +02:00
|
|
|
if (SysTrayX.Messaging.closeType !== "0") {
|
2020-05-10 20:55:27 +02:00
|
|
|
browser.windowEvent.onCloseButtonClick.addListener(
|
|
|
|
|
SysTrayX.Messaging.onCloseButton
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
browser.windowEvent.onCloseButtonClick.removeListener(
|
|
|
|
|
SysTrayX.Messaging.onCloseButton
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-09 17:10:54 +02:00
|
|
|
if ("countType" in changes && changes["countType"].newValue) {
|
|
|
|
|
SysTrayX.Messaging.countType = changes["countType"].newValue;
|
|
|
|
|
|
2021-08-10 19:58:16 +02:00
|
|
|
if (SysTrayX.browserInfo.majorVersion < 91) {
|
|
|
|
|
browser.folderChange.setCountType(Number(SysTrayX.Messaging.countType));
|
|
|
|
|
} else {
|
|
|
|
|
console.debug("StorageChanged counttype not available");
|
|
|
|
|
}
|
2020-04-03 17:45:20 +02:00
|
|
|
}
|
|
|
|
|
|
2020-01-22 23:14:46 +01:00
|
|
|
if ("addonprefchanged" in changes && changes["addonprefchanged"].newValue) {
|
|
|
|
|
//
|
|
|
|
|
// Send new preferences to the app
|
|
|
|
|
//
|
|
|
|
|
SysTrayX.Messaging.sendPreferences();
|
|
|
|
|
|
|
|
|
|
// Reset flag
|
|
|
|
|
browser.storage.sync.set({
|
2020-04-04 19:34:19 +02:00
|
|
|
addonprefchanged: false,
|
2020-01-22 23:14:46 +01:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
2020-01-13 23:22:11 +01:00
|
|
|
//
|
2020-01-22 23:14:46 +01:00
|
|
|
// Callback for unReadMessages
|
2020-01-13 23:22:11 +01:00
|
|
|
//
|
2020-04-04 19:34:19 +02:00
|
|
|
unreadCb: function (count) {
|
2020-01-22 23:14:46 +01:00
|
|
|
SysTrayX.Link.postSysTrayXMessage({ unreadMail: count });
|
2020-01-11 22:08:11 +01:00
|
|
|
},
|
|
|
|
|
|
2020-08-21 21:02:07 +02:00
|
|
|
//
|
|
|
|
|
// Callback for folder changes
|
|
|
|
|
//
|
2020-10-05 22:30:34 +02:00
|
|
|
updateFilters: function (rootFolder, parentFolder, folder, added) {
|
2020-08-29 20:18:40 +02:00
|
|
|
const oldFolders = SysTrayX.Messaging.folderTree[rootFolder];
|
|
|
|
|
const oldPaths = getFolderPaths(oldFolders);
|
|
|
|
|
|
2020-10-05 22:30:34 +02:00
|
|
|
browser.accounts.list().then(
|
|
|
|
|
(accounts) => {
|
|
|
|
|
this.updateFiltersCallback(
|
|
|
|
|
rootFolder,
|
|
|
|
|
parentFolder,
|
|
|
|
|
folder,
|
|
|
|
|
added,
|
|
|
|
|
oldFolders,
|
|
|
|
|
oldPaths,
|
|
|
|
|
accounts
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
() => console.log("Failed to get the accounts")
|
|
|
|
|
);
|
|
|
|
|
},
|
2020-08-29 20:18:40 +02:00
|
|
|
|
2020-10-05 22:30:34 +02:00
|
|
|
updateFiltersCallback: function (
|
|
|
|
|
rootFolder,
|
|
|
|
|
parentFolder,
|
|
|
|
|
folder,
|
|
|
|
|
added,
|
|
|
|
|
oldFolders,
|
|
|
|
|
oldPaths,
|
|
|
|
|
accounts
|
|
|
|
|
) {
|
2020-08-29 20:18:40 +02:00
|
|
|
// Get new folder tree
|
|
|
|
|
const folderTree = getFolderTree(accounts, SysTrayX.browserInfo);
|
|
|
|
|
const newFolders = folderTree[rootFolder];
|
|
|
|
|
const newPaths = getFolderPaths(newFolders);
|
2020-10-05 22:30:34 +02:00
|
|
|
const changes = findFolderPathsDiff(oldPaths, newPaths).filter((change) =>
|
|
|
|
|
change.endsWith(parentFolder + "/" + folder)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (changes.length === 1 && added) {
|
|
|
|
|
// Folder has beeen added
|
2020-08-29 20:18:40 +02:00
|
|
|
|
2020-10-05 22:30:34 +02:00
|
|
|
const addedFolder = changes[0];
|
|
|
|
|
|
|
|
|
|
// Is parent selected?
|
|
|
|
|
const parentAddedFolder = addedFolder.substring(
|
|
|
|
|
0,
|
|
|
|
|
addedFolder.lastIndexOf("/")
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const parentSelected = findFolderPath(
|
|
|
|
|
SysTrayX.Messaging.filters,
|
|
|
|
|
parentAddedFolder
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (parentSelected) {
|
|
|
|
|
// Add the new folder to the filters
|
|
|
|
|
|
|
|
|
|
const newFilter = {
|
|
|
|
|
...parentSelected,
|
|
|
|
|
folder: {
|
|
|
|
|
...parentSelected.folder,
|
|
|
|
|
path: changes[0],
|
|
|
|
|
name: changes[0].substring(changes[0].lastIndexOf("/") + 1),
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
SysTrayX.Messaging.filters.filter(
|
|
|
|
|
(filter) => filter.folder.path === newFilter.folder.path
|
|
|
|
|
).length === 0
|
|
|
|
|
) {
|
|
|
|
|
SysTrayX.Messaging.filters.push(newFilter);
|
|
|
|
|
|
|
|
|
|
// Store the new filters
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
filters: SysTrayX.Messaging.filters,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if (changes.length === 1 && !added) {
|
|
|
|
|
// Folder has been removed, remove also all children
|
|
|
|
|
|
|
|
|
|
const filters = SysTrayX.Messaging.filters.filter(
|
|
|
|
|
(filter) => !filter.folder.path.startsWith(changes[0])
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (filters.length !== SysTrayX.Messaging.filters.length) {
|
|
|
|
|
// Remove found filters (and children) from the filters
|
|
|
|
|
SysTrayX.Messaging.filters = filters;
|
|
|
|
|
|
|
|
|
|
// Store the new filters
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
filters: SysTrayX.Messaging.filters,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-08-29 20:18:40 +02:00
|
|
|
|
|
|
|
|
// Store the new accounts and folder tree
|
|
|
|
|
SysTrayX.Messaging.accounts = accounts;
|
|
|
|
|
SysTrayX.Messaging.folderTree = folderTree;
|
2020-08-21 21:02:07 +02:00
|
|
|
},
|
|
|
|
|
|
2020-04-27 23:31:41 +02:00
|
|
|
sendBrowserInfo: function () {
|
|
|
|
|
const info = SysTrayX.browserInfo;
|
2020-05-02 14:49:05 +02:00
|
|
|
SysTrayX.Link.postSysTrayXMessage({ browserInfo: info });
|
2020-04-27 23:31:41 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
sendPlatformInfo: function () {
|
|
|
|
|
const info = SysTrayX.platformInfo;
|
2020-05-02 14:49:05 +02:00
|
|
|
SysTrayX.Link.postSysTrayXMessage({ platformInfo: info });
|
2020-04-27 23:31:41 +02:00
|
|
|
},
|
|
|
|
|
|
2020-04-04 19:34:19 +02:00
|
|
|
sendVersion: function () {
|
|
|
|
|
SysTrayX.Link.postSysTrayXMessage({ version: SysTrayX.version });
|
|
|
|
|
},
|
|
|
|
|
|
2020-06-05 19:37:15 +02:00
|
|
|
sendHideDefaultIcon: function () {
|
|
|
|
|
SysTrayX.Link.postSysTrayXMessage({
|
|
|
|
|
hideDefaultIcon: SysTrayX.hideDefaultIcon,
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
2020-06-14 23:20:29 +02:00
|
|
|
sendLocale: function () {
|
|
|
|
|
const locale = browser.i18n.getUILanguage();
|
|
|
|
|
|
|
|
|
|
SysTrayX.Link.postSysTrayXMessage({
|
|
|
|
|
locale: locale,
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
2020-04-04 19:34:19 +02:00
|
|
|
sendPreferences: function () {
|
2020-01-23 23:28:52 +01:00
|
|
|
const getter = browser.storage.sync.get([
|
2020-01-22 23:14:46 +01:00
|
|
|
"debug",
|
2020-04-07 17:19:02 +02:00
|
|
|
"minimizeType",
|
2020-06-28 23:23:12 +02:00
|
|
|
"closeType",
|
2020-02-29 19:04:43 +01:00
|
|
|
"startMinimized",
|
2020-12-20 13:05:27 +01:00
|
|
|
"restorePositions",
|
2020-05-22 22:54:10 +02:00
|
|
|
"defaultIconType",
|
|
|
|
|
"defaultIconMime",
|
|
|
|
|
"defaultIcon",
|
2020-06-03 22:46:46 +02:00
|
|
|
"hideDefaultIcon",
|
2020-01-22 23:14:46 +01:00
|
|
|
"iconType",
|
|
|
|
|
"iconMime",
|
2020-04-04 19:34:19 +02:00
|
|
|
"icon",
|
2020-04-05 14:39:19 +02:00
|
|
|
"showNumber",
|
|
|
|
|
"numberColor",
|
2020-05-26 22:39:25 +02:00
|
|
|
"numberSize",
|
2020-12-11 20:57:30 +01:00
|
|
|
"numberAlignment",
|
|
|
|
|
"numberMargins",
|
2020-05-09 17:10:54 +02:00
|
|
|
"countType",
|
2020-12-06 00:36:31 +01:00
|
|
|
"theme",
|
2020-01-22 23:14:46 +01:00
|
|
|
]);
|
|
|
|
|
getter.then(this.sendPreferencesStorage, this.onSendPreferecesStorageError);
|
|
|
|
|
},
|
2020-01-12 15:09:47 +01:00
|
|
|
|
2020-04-04 19:34:19 +02:00
|
|
|
sendPreferencesStorage: function (result) {
|
2020-01-23 23:28:52 +01:00
|
|
|
const debug = result.debug || "false";
|
2021-01-03 22:01:20 +01:00
|
|
|
const minimizeType = result.minimizeType || "1";
|
2020-08-02 16:59:53 +02:00
|
|
|
const closeType = result.closeType || "1";
|
2020-03-01 23:43:01 +01:00
|
|
|
const startMinimized = result.startMinimized || "false";
|
2020-12-20 13:05:27 +01:00
|
|
|
const restorePositions = result.restorePositions || "false";
|
2020-05-22 22:54:10 +02:00
|
|
|
const defaultIconType = result.defaultIconType || "0";
|
|
|
|
|
const defaultIconMime = result.defaultIconMime || "image/png";
|
|
|
|
|
const defaultIcon = result.defaultIcon || [];
|
2020-06-04 17:58:27 +02:00
|
|
|
const hideDefaultIcon = result.hideDefaultIcon || "false";
|
2020-01-23 23:28:52 +01:00
|
|
|
const iconType = result.iconType || "0";
|
|
|
|
|
const iconMime = result.iconMime || "image/png";
|
|
|
|
|
const icon = result.icon || [];
|
2020-04-05 14:39:19 +02:00
|
|
|
const showNumber = result.showNumber || "true";
|
2020-12-06 00:36:31 +01:00
|
|
|
let numberColor = result.numberColor || "#000000";
|
2020-06-13 21:31:28 +02:00
|
|
|
const numberSize = result.numberSize || "10";
|
2020-12-11 20:57:30 +01:00
|
|
|
const numberAlignment = result.numberAlignment || "4";
|
|
|
|
|
const numberMargins = result.numberMargins || {
|
|
|
|
|
left: 0,
|
|
|
|
|
top: 0,
|
|
|
|
|
right: 0,
|
|
|
|
|
bottom: 0,
|
|
|
|
|
};
|
2020-05-09 17:10:54 +02:00
|
|
|
const countType = result.countType || "0";
|
2020-12-06 00:36:31 +01:00
|
|
|
const theme = result.theme || "0";
|
|
|
|
|
|
|
|
|
|
if (theme == "0" && numberColor == "#ffffff") {
|
|
|
|
|
numberColor = "#000000";
|
|
|
|
|
} else if (theme == "1" && numberColor == "#000000") {
|
|
|
|
|
numberColor = "#ffffff";
|
|
|
|
|
}
|
2020-01-22 23:14:46 +01:00
|
|
|
|
|
|
|
|
// Send it to the app
|
|
|
|
|
SysTrayX.Link.postSysTrayXMessage({
|
|
|
|
|
preferences: {
|
|
|
|
|
debug: debug,
|
2020-04-07 17:19:02 +02:00
|
|
|
minimizeType: minimizeType,
|
2020-06-28 23:23:12 +02:00
|
|
|
closeType: closeType,
|
2020-02-29 19:04:43 +01:00
|
|
|
startMinimized: startMinimized,
|
2020-12-20 13:05:27 +01:00
|
|
|
restorePositions: restorePositions,
|
2020-05-22 22:54:10 +02:00
|
|
|
defaultIconType: defaultIconType,
|
|
|
|
|
defaultIconMime: defaultIconMime,
|
|
|
|
|
defaultIcon: defaultIcon,
|
2020-06-03 22:46:46 +02:00
|
|
|
hideDefaultIcon: hideDefaultIcon,
|
2020-01-22 23:14:46 +01:00
|
|
|
iconType: iconType,
|
|
|
|
|
iconMime: iconMime,
|
2020-04-04 19:34:19 +02:00
|
|
|
icon: icon,
|
2020-04-05 14:39:19 +02:00
|
|
|
showNumber: showNumber,
|
|
|
|
|
numberColor: numberColor,
|
2020-05-26 22:39:25 +02:00
|
|
|
numberSize: numberSize,
|
2020-12-11 20:57:30 +01:00
|
|
|
numberAlignment: numberAlignment,
|
|
|
|
|
numberMargins: numberMargins,
|
2020-05-09 17:10:54 +02:00
|
|
|
countType: countType,
|
2020-12-06 00:36:31 +01:00
|
|
|
theme: theme,
|
2020-04-04 19:34:19 +02:00
|
|
|
},
|
2020-01-22 23:14:46 +01:00
|
|
|
});
|
2020-04-21 21:38:44 +02:00
|
|
|
|
|
|
|
|
if (SysTrayX.startupState) {
|
|
|
|
|
// Send startup state after the prefs
|
|
|
|
|
// so the hide is handled conform the prefs
|
2020-06-28 13:03:53 +02:00
|
|
|
if (SysTrayX.startupState === "minimized") {
|
|
|
|
|
SysTrayX.Link.postSysTrayXMessage({ window: "minimized_all" });
|
|
|
|
|
//SysTrayX.Link.postSysTrayXMessage({ window: SysTrayX.startupState });
|
|
|
|
|
}
|
2020-04-21 21:38:44 +02:00
|
|
|
|
|
|
|
|
SysTrayX.startupState = undefined;
|
|
|
|
|
}
|
2020-01-11 22:08:11 +01:00
|
|
|
},
|
|
|
|
|
|
2020-04-04 19:34:19 +02:00
|
|
|
onSendIconStorageError: function (error) {
|
2020-01-22 23:14:46 +01:00
|
|
|
console.log(`GetIcon Error: ${error}`);
|
2020-01-11 22:08:11 +01:00
|
|
|
},
|
|
|
|
|
|
2020-04-04 19:34:19 +02:00
|
|
|
onGetAccountsStorageError: function (error) {
|
2020-01-22 23:14:46 +01:00
|
|
|
console.log(`GetAccounts Error: ${error}`);
|
2020-04-04 19:34:19 +02:00
|
|
|
},
|
2020-01-12 15:09:47 +01:00
|
|
|
};
|
2020-01-11 22:08:11 +01:00
|
|
|
|
2020-01-13 23:22:11 +01:00
|
|
|
//
|
2020-01-22 23:14:46 +01:00
|
|
|
// Link object. Handles the native messaging to the system tray app
|
2020-01-13 23:22:11 +01:00
|
|
|
//
|
|
|
|
|
SysTrayX.Link = {
|
|
|
|
|
portSysTrayX: undefined,
|
|
|
|
|
|
2020-04-04 19:34:19 +02:00
|
|
|
init: function () {
|
2020-01-22 23:14:46 +01:00
|
|
|
// Connect to the app
|
2020-01-13 23:22:11 +01:00
|
|
|
this.portSysTrayX = browser.runtime.connectNative("SysTray_X");
|
|
|
|
|
|
|
|
|
|
// Listen for messages from the app.
|
|
|
|
|
this.portSysTrayX.onMessage.addListener(
|
|
|
|
|
SysTrayX.Link.receiveSysTrayXMessage
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
|
2020-04-04 19:34:19 +02:00
|
|
|
postSysTrayXMessage: function (object) {
|
2020-01-22 23:14:46 +01:00
|
|
|
// Send object (will be stringified by postMessage)
|
|
|
|
|
SysTrayX.Link.portSysTrayX.postMessage(object);
|
2020-01-13 23:22:11 +01:00
|
|
|
},
|
|
|
|
|
|
2020-04-04 19:34:19 +02:00
|
|
|
receiveSysTrayXMessage: function (response) {
|
2020-02-29 19:04:43 +01:00
|
|
|
if (response["shutdown"]) {
|
2020-05-10 20:55:27 +02:00
|
|
|
browser.windowEvent.onCloseButtonClick.removeListener(
|
|
|
|
|
SysTrayX.Messaging.onCloseButton
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
SysTrayX.Link.postSysTrayXMessage({ shutdown: "true" });
|
2020-02-29 19:04:43 +01:00
|
|
|
}
|
|
|
|
|
|
2020-06-07 16:19:39 +02:00
|
|
|
const kdeIntegration = response["kdeIntegration"];
|
|
|
|
|
if (kdeIntegration) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
kdeIntegration: kdeIntegration,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-05 15:18:30 +01:00
|
|
|
const positions = response["positions"];
|
|
|
|
|
if (positions) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
windowPositions: positions,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-22 23:14:46 +01:00
|
|
|
if (response["preferences"]) {
|
|
|
|
|
// Store the preferences from the app
|
2020-05-22 22:54:10 +02:00
|
|
|
const defaultIconMime = response["preferences"].defaultIconMime;
|
|
|
|
|
if (defaultIconMime) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
defaultIconMime: defaultIconMime,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const defaultIcon = response["preferences"].defaultIcon;
|
|
|
|
|
if (defaultIcon) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
defaultIcon: defaultIcon,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const defaultIconType = response["preferences"].defaultIconType;
|
|
|
|
|
if (defaultIconType) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
defaultIconType: defaultIconType,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-03 22:46:46 +02:00
|
|
|
const hideDefaultIcon = response["preferences"].hideDefaultIcon;
|
|
|
|
|
if (hideDefaultIcon) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
hideDefaultIcon: hideDefaultIcon,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-23 23:28:52 +01:00
|
|
|
const iconMime = response["preferences"].iconMime;
|
2020-01-22 23:14:46 +01:00
|
|
|
if (iconMime) {
|
|
|
|
|
browser.storage.sync.set({
|
2020-04-04 19:34:19 +02:00
|
|
|
iconMime: iconMime,
|
2020-01-22 23:14:46 +01:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-23 23:28:52 +01:00
|
|
|
const icon = response["preferences"].icon;
|
2020-01-22 23:14:46 +01:00
|
|
|
if (icon) {
|
|
|
|
|
browser.storage.sync.set({
|
2020-04-04 19:34:19 +02:00
|
|
|
icon: icon,
|
2020-01-22 23:14:46 +01:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-23 23:28:52 +01:00
|
|
|
const iconType = response["preferences"].iconType;
|
2020-01-22 23:14:46 +01:00
|
|
|
if (iconType) {
|
|
|
|
|
browser.storage.sync.set({
|
2020-04-04 19:34:19 +02:00
|
|
|
iconType: iconType,
|
2020-01-22 23:14:46 +01:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-05 14:39:19 +02:00
|
|
|
const showNumber = response["preferences"].showNumber;
|
|
|
|
|
if (showNumber) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
showNumber: showNumber,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const numberColor = response["preferences"].numberColor;
|
|
|
|
|
if (numberColor) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
numberColor: numberColor,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-26 22:39:25 +02:00
|
|
|
const numberSize = response["preferences"].numberSize;
|
|
|
|
|
if (numberSize) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
numberSize: numberSize,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-11 20:57:30 +01:00
|
|
|
const numberAlignment = response["preferences"].numberAlignment;
|
|
|
|
|
if (numberAlignment) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
numberAlignment: numberAlignment,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const numberMargins = response["preferences"].numberMargins;
|
|
|
|
|
if (numberMargins) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
numberMargins: numberMargins,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-09 17:10:54 +02:00
|
|
|
const countType = response["preferences"].countType;
|
|
|
|
|
if (countType) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
countType: countType,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-07 17:19:02 +02:00
|
|
|
const minimizeType = response["preferences"].minimizeType;
|
|
|
|
|
if (minimizeType) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
minimizeType: minimizeType,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-28 23:23:12 +02:00
|
|
|
const closeType = response["preferences"].closeType;
|
|
|
|
|
if (closeType) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
closeType: closeType,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-02-29 19:04:43 +01:00
|
|
|
const startMinimized = response["preferences"].startMinimized;
|
|
|
|
|
if (startMinimized) {
|
|
|
|
|
browser.storage.sync.set({
|
2020-04-04 19:34:19 +02:00
|
|
|
startMinimized: startMinimized,
|
2020-02-18 00:24:31 +01:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-20 13:05:27 +01:00
|
|
|
const restorePositions = response["preferences"].restorePositions;
|
|
|
|
|
if (restorePositions) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
restorePositions: restorePositions,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-06 00:36:31 +01:00
|
|
|
const theme = response["preferences"].theme;
|
|
|
|
|
if (theme) {
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
theme: theme,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-23 23:28:52 +01:00
|
|
|
const debug = response["preferences"].debug;
|
2020-01-22 23:14:46 +01:00
|
|
|
if (debug) {
|
|
|
|
|
browser.storage.sync.set({
|
2020-04-04 19:34:19 +02:00
|
|
|
debug: debug,
|
2020-01-22 23:14:46 +01:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-04-04 19:34:19 +02:00
|
|
|
},
|
2020-01-13 23:22:11 +01:00
|
|
|
};
|
|
|
|
|
|
2020-02-03 23:05:20 +01:00
|
|
|
SysTrayX.Window = {
|
2020-04-04 19:34:19 +02:00
|
|
|
focusChanged: function (windowId) {
|
|
|
|
|
browser.windows.getCurrent().then((win) => {
|
2020-02-03 23:05:20 +01:00
|
|
|
SysTrayX.Link.postSysTrayXMessage({ window: win.state });
|
|
|
|
|
});
|
2020-04-04 19:34:19 +02:00
|
|
|
},
|
2020-02-03 23:05:20 +01:00
|
|
|
};
|
|
|
|
|
|
2020-01-24 22:20:30 +01:00
|
|
|
async function start() {
|
2020-02-29 20:36:08 +01:00
|
|
|
// Get the prefered start state
|
|
|
|
|
const state = await getStartupState();
|
|
|
|
|
|
2021-04-03 22:18:28 +02:00
|
|
|
// if (state == "minimized") {
|
|
|
|
|
// browser.windows.update(browser.windows.WINDOW_ID_CURRENT, {
|
|
|
|
|
// state: "minimized",
|
|
|
|
|
// });
|
|
|
|
|
// }
|
2020-02-29 19:04:43 +01:00
|
|
|
|
2020-04-21 21:38:44 +02:00
|
|
|
SysTrayX.startupState = state;
|
|
|
|
|
|
2020-12-05 15:18:30 +01:00
|
|
|
// Restore window positions
|
|
|
|
|
const restorePositions = await getRestorePositionsState();
|
|
|
|
|
|
|
|
|
|
if (restorePositions == "true") {
|
|
|
|
|
SysTrayX.restorePositions = true;
|
|
|
|
|
|
|
|
|
|
// Get the start window positions
|
|
|
|
|
SysTrayX.startupWindowPositions = await getStartupWindowPositions();
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-02 21:32:09 +02:00
|
|
|
// Get the close type
|
|
|
|
|
SysTrayX.Messaging.closeType = await getCloseType();
|
|
|
|
|
browser.windowEvent.setCloseType(Number(SysTrayX.Messaging.closeType));
|
|
|
|
|
|
2020-05-10 20:55:27 +02:00
|
|
|
// Intercept close button?
|
2020-08-09 20:22:19 +02:00
|
|
|
if (SysTrayX.Messaging.closeType !== "0") {
|
2020-05-10 20:55:27 +02:00
|
|
|
browser.windowEvent.onCloseButtonClick.addListener(
|
|
|
|
|
SysTrayX.Messaging.onCloseButton
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-05 19:37:15 +02:00
|
|
|
// Hide the default icon
|
|
|
|
|
const hideDefaultIcon = await getHideDefaultIcon();
|
|
|
|
|
SysTrayX.hideDefaultIcon = hideDefaultIcon;
|
|
|
|
|
|
2020-03-22 21:26:42 +01:00
|
|
|
// Set platform
|
|
|
|
|
SysTrayX.platformInfo = await browser.runtime
|
|
|
|
|
.getPlatformInfo()
|
2020-04-04 19:34:19 +02:00
|
|
|
.then((info) => info);
|
2020-04-21 21:38:44 +02:00
|
|
|
|
2020-03-22 21:26:42 +01:00
|
|
|
console.log("OS: " + SysTrayX.platformInfo.os);
|
|
|
|
|
console.log("Arch: " + SysTrayX.platformInfo.arch);
|
|
|
|
|
console.log("Nack-Arch: " + SysTrayX.platformInfo.nacl_arch);
|
|
|
|
|
|
2020-04-11 23:31:22 +02:00
|
|
|
// Store platform info
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
platformInfo: SysTrayX.platformInfo,
|
|
|
|
|
});
|
|
|
|
|
|
2020-04-27 23:31:41 +02:00
|
|
|
// Set browser
|
|
|
|
|
SysTrayX.browserInfo = await browser.runtime
|
|
|
|
|
.getBrowserInfo()
|
|
|
|
|
.then((info) => info);
|
|
|
|
|
|
2020-05-05 16:44:37 +02:00
|
|
|
const version = SysTrayX.browserInfo.version.split(".");
|
|
|
|
|
SysTrayX.browserInfo.majorVersion = version[0];
|
|
|
|
|
SysTrayX.browserInfo.minorVersion = version[1];
|
|
|
|
|
|
2020-04-27 23:31:41 +02:00
|
|
|
console.log("Browser: " + SysTrayX.browserInfo.name);
|
|
|
|
|
console.log("Vendor: " + SysTrayX.browserInfo.vendor);
|
|
|
|
|
console.log("Version: " + SysTrayX.browserInfo.version);
|
|
|
|
|
console.log("Build: " + SysTrayX.browserInfo.buildID);
|
|
|
|
|
|
|
|
|
|
// Store browser info
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
browserInfo: SysTrayX.browserInfo,
|
|
|
|
|
});
|
|
|
|
|
|
2020-06-07 16:19:39 +02:00
|
|
|
// Reset KDE integration
|
|
|
|
|
browser.storage.sync.set({
|
|
|
|
|
kdeIntegration: true,
|
|
|
|
|
});
|
|
|
|
|
|
2020-04-04 16:51:13 +02:00
|
|
|
// Get addon version
|
|
|
|
|
SysTrayX.version = browser.runtime.getManifest().version;
|
2020-04-04 19:34:19 +02:00
|
|
|
console.log("Addon version: " + SysTrayX.version);
|
2020-04-04 16:51:13 +02:00
|
|
|
|
2020-02-29 19:04:43 +01:00
|
|
|
// Init defaults before everything
|
2020-01-24 22:20:30 +01:00
|
|
|
await getDefaultIcon();
|
2020-05-22 22:54:10 +02:00
|
|
|
await getIcon();
|
2020-01-11 22:08:11 +01:00
|
|
|
|
2020-05-03 23:39:02 +02:00
|
|
|
// Get all accounts
|
2021-08-08 17:34:42 +02:00
|
|
|
if (SysTrayX.browserInfo.majorVersion < 91) {
|
|
|
|
|
SysTrayX.Messaging.accounts = await browser.accounts.list();
|
|
|
|
|
} else {
|
|
|
|
|
console.debug("Getting accounts with folders");
|
|
|
|
|
|
|
|
|
|
const includeFolders = true;
|
|
|
|
|
SysTrayX.Messaging.accounts = await browser.accounts.list(includeFolders);
|
|
|
|
|
}
|
2020-05-03 23:39:02 +02:00
|
|
|
|
2020-08-29 20:18:40 +02:00
|
|
|
// Get folder tree
|
|
|
|
|
SysTrayX.Messaging.folderTree = getFolderTree(
|
|
|
|
|
SysTrayX.Messaging.accounts,
|
|
|
|
|
SysTrayX.browserInfo
|
|
|
|
|
);
|
|
|
|
|
|
2020-05-13 21:24:29 +02:00
|
|
|
// Get the filters (needs the accounts)
|
2020-05-12 21:38:03 +02:00
|
|
|
SysTrayX.Messaging.filters = await getFilters();
|
2020-05-09 17:10:54 +02:00
|
|
|
|
|
|
|
|
// Get the count type
|
|
|
|
|
SysTrayX.Messaging.countType = await getCountType();
|
|
|
|
|
|
2021-08-08 17:34:42 +02:00
|
|
|
// Test new API calls TB91
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
const folder = {
|
|
|
|
|
accountId: "account1",
|
|
|
|
|
path: "/Inbox",
|
|
|
|
|
};
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
const folder = {
|
|
|
|
|
accountId: "account1",
|
|
|
|
|
name: "Inbox",
|
|
|
|
|
path: "/Inbox",
|
|
|
|
|
type: "inbox",
|
|
|
|
|
subFolders: [],
|
|
|
|
|
};
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
const mailFolderInfo = await browser.folders.getFolderInfo(folder);
|
|
|
|
|
console.debug("MailFolderInfo: " + JSON.stringify(mailFolderInfo));
|
|
|
|
|
*/
|
|
|
|
|
|
2020-01-24 22:20:30 +01:00
|
|
|
// Setup the link first
|
|
|
|
|
SysTrayX.Link.init();
|
|
|
|
|
|
|
|
|
|
// Main start
|
|
|
|
|
SysTrayX.Messaging.init();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
console.log("Starting SysTray-X");
|
2020-01-04 23:47:26 +01:00
|
|
|
|
2020-01-24 22:20:30 +01:00
|
|
|
// Start the add-on
|
|
|
|
|
start();
|