Functioning options page

This commit is contained in:
2018-10-28 15:51:10 -07:00
parent cbdd1e3231
commit b19d1a0038
7 changed files with 168 additions and 35 deletions

View File

@@ -11,6 +11,10 @@ class FolderActionsProvider extends ExtensionCommon.EventEmitter {
super();
this.extension = extension;
this.options = {
consoleDebug: 0,
alsoCompact: 0
};
}
get type() {
@@ -56,11 +60,11 @@ class FolderActionsProvider extends ExtensionCommon.EventEmitter {
this.factory = factory.QueryInterface(Ci.nsIFactory);
registrar.registerFactory(
this.classID, `Cloud file provider for ${this.extension.id}`, contractID, this.factory
this.classID, `Folder Actions provider for ${this.extension.id}`, contractID, this.factory
);
XPCOMUtils.categoryManager.addCategoryEntry(
"cloud-files", this.extension.id, contractID, false, true
"folder-actions", this.extension.id, contractID, false, true
);
}
@@ -68,7 +72,7 @@ class FolderActionsProvider extends ExtensionCommon.EventEmitter {
let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
registrar.unregisterFactory(this.classID, this.factory);
XPCOMUtils.categoryManager.deleteCategoryEntry("cloud-files", this.extension.id, false);
XPCOMUtils.categoryManager.deleteCategoryEntry("folder-actions", this.extension.id, false);
}
}
@@ -91,10 +95,18 @@ this.folder_actions = class extends ExtensionAPI {
}
}
debugMsg(msg) {
if (this.provider.options.consoleDebug > 0) {
console.log(msg);
}
}
getFolderInfo() {
let data = [];
let self = this;
toArray(fixIterator(MailServices.accounts.accounts,Components.interfaces.nsIMsgAccount)).map(function(account) {
toArray(fixIterator(MailServices.accounts.accounts,Components.interfaces.nsIMsgAccount)).
map(function(account) {
let info = {
server: null,
type: null,
@@ -107,13 +119,13 @@ this.folder_actions = class extends ExtensionAPI {
let find_flagged_folders = function(folder,inf) {
if (folder.getFlag(Ci.nsMsgFolderFlags.Trash)) {
console.log("Folder: " + folder.URI + " has Trash flag ");
self.debugMsg("Folder: " + folder.URI + " has Trash flag ");
inf.trashFolder = folder;
console.log(folder);
self.debugMsg(folder);
} else if (folder.getFlag(Ci.nsMsgFolderFlags.Junk)) {
console.log("Folder: " + folder.URI + " has Junk flag ");
self.debugMsg("Folder: " + folder.URI + " has Junk flag ");
inf.junkFolder = folder;
console.log(folder);
self.debugMsg(folder);
} else {
if (folder.hasSubFolders) {
toArray(fixIterator(folder.subFolders, Ci.nsMsgFolder)).map(function (f) {
@@ -135,7 +147,7 @@ this.folder_actions = class extends ExtensionAPI {
});
data.push(info);
});
console.log(data);
this.debugMsg(data);
return data;
}
@@ -147,29 +159,32 @@ this.folder_actions = class extends ExtensionAPI {
return {
folder_actions: {
emptyFolder: function(folderName) {
let finfo = self.getFolderInfo();
},
emptyTrashFolders: function() {
let finfo = self.getFolderInfo();
finfo.map(function(info) {
if (info.trashFolder) {
console.log("emptyTrashFolders: Considering " + info.trashFolder.URI);
console.log("emptyTrashFolders: canDeleteMessages? " + info.trashFolder.canDeleteMessages);
console.log("emptyTrashFolders: hasSubFolders? " + info.trashFolder.hasSubFolders);
console.log(info.trashFolder);
self.debugMsg("emptyTrashFolders: Considering " + info.trashFolder.URI);
self.debugMsg("emptyTrashFolders: canDeleteMessages? " + info.trashFolder.canDeleteMessages);
self.debugMsg("emptyTrashFolders: hasSubFolders? " + info.trashFolder.hasSubFolders);
self.debugMsg(info.trashFolder);
info.trashFolder.emptyTrash(null,null);
}
});
},
emptyJunkFolders: function() {
let finfo = self.getFolderInfo();
finfo.map(function(info) {
if (info.junkFolder) {
console.log("emptyTrashFolders: Considering " + info.junkFolder.URI);
console.log("emptyTrashFolders: canDeleteMessages? " + info.junkFolder.canDeleteMessages);
console.log("emptyTrashFolders: hasSubFolders? " + info.junkFolder.hasSubFolders);
console.log(info.junkFolder);
self.debugMsg("emptyTrashFolders: Considering " + info.junkFolder.URI);
self.debugMsg("emptyTrashFolders: canDeleteMessages? " + info.junkFolder.canDeleteMessages);
self.debugMsg("emptyTrashFolders: hasSubFolders? " + info.junkFolder.hasSubFolders);
self.debugMsg(info.junkFolder);
var junk_msgs = Cc["@mozilla.org/array;1"]
.createInstance(Ci.nsIMutableArray);
var enumerator = info.junkFolder.messages;
@@ -183,6 +198,10 @@ this.folder_actions = class extends ExtensionAPI {
}
}
});
},
setOptions: function(options) {
self.provider.options = Object.assign(self.provider.options, options);
}
}
};

View File

@@ -21,16 +21,16 @@
"namespace": "folder_actions",
"events": [
{
"name": "onEmptyFolder",
"name": "onEmptyTrash",
"type": "function",
"description": "Fired when a folder is emptied",
"parameters": [
{
"name": "folderName",
"$ref": "MailFolder",
"description": "The folder to be emptied"
}
]
"description": "Fired when Trash folders are emptied",
"parameters": []
},
{
"name": "onEmptyJunk",
"type": "function",
"description": "Fired when Junk folders are emptied",
"parameters": []
}
],
"types": [
@@ -44,18 +44,37 @@
"description": "Name of the folder to be emptied"
}
}
},
{
"id": "ApiOptions",
"type": "object",
"description": "Folder API options",
"properties": {
"consoleDebug": {
"type": "integer",
"minimum": 0,
"optional": true,
"description": "If set to 1, debug messages are printed out in console log"
},
"alsoCompact": {
"type": "integer",
"minimum": 0,
"optional": true,
"description": "If set to 1, also compact folder after emptying"
}
}
}
],
"functions": [
{
"name": "emptyFolder",
"name": "setOptions",
"type": "function",
"description": "Empties specified mail folder",
"description": "Sets options for this API",
"parameters": [
{
"name": "folderName",
"$ref": "MailFolder",
"description": "The mail folder to empty"
"name": "options",
"$ref": "ApiOptions",
"description": "API Options object"
}
]
},