Functioning options page
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@@ -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"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
Reference in New Issue
Block a user