1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-23 09:48:00 +01:00

many mail changes with new features, thanks Christian

This commit is contained in:
Martin Stubenschrott
2008-05-26 10:28:24 +00:00
parent bf239c2db2
commit f7da09aaf9
4 changed files with 120 additions and 5 deletions

View File

@@ -12,6 +12,7 @@ Inactive/former developers:
Patches (in no special order): Patches (in no special order):
* Lukas Mai * Lukas Mai
* Guido Van Hoecke
* Daniel Trstenjak (various things with hints) * Daniel Trstenjak (various things with hints)
* M.Terada (suggest engines) * M.Terada (suggest engines)
* Muthu Kannan (ctrl-v support) * Muthu Kannan (ctrl-v support)

View File

@@ -2,6 +2,7 @@
<b>Note:</b> If you don't wish to appear on this list when making a donation, please tell me. <b>Note:</b> If you don't wish to appear on this list when making a donation, please tell me.
2008: 2008:
* Dotan Cohen
* Daniel Schaffrath * Daniel Schaffrath
* Sam Griffin * Sam Griffin
* Ivan Pantuyev * Ivan Pantuyev

View File

@@ -362,6 +362,24 @@ liberator.Completion = function () //{{{
return [0, buildLongestStartingSubstring(completions, filter)]; return [0, buildLongestStartingSubstring(completions, filter)];
}, },
mail: function (filter)
{
var completions = [];
var folders = liberator.mail.getFolders();
for (var folder in folders)
{
completions.push([folders[folder].server.prettyName + ": "
+ folders[folder].name,
"Unread: " + folders[folder].getNumUnread(false)]);
}
if (!filter)
return [0, completions];
var mapped = completions.map(function (node) {
return [[node[0]], node[1]];
});
return [0, buildLongestCommonSubstring(mapped, filter)];
},
option: function (filter, special, unfiltered) option: function (filter, special, unfiltered)
{ {
substrings = []; substrings = [];

View File

@@ -145,6 +145,58 @@ liberator.Mail = function () //{{{
return parent; return parent;
} }
function selectUnreadFolder(backwards, count)
{
count = (count > 0 ) ? count : 1;
var direction = backwards ? -1 : 1;
var tree = GetFolderTree();
var c = tree.currentIndex;
var i = direction;
var folder;
while (count > 0 && (c + i) < tree.view.rowCount && (c + i) >= 0)
{
var resource = GetFolderResource(tree, (c + i)).QueryInterface(Components.interfaces.nsIMsgFolder);
if (!resource.isServer && resource.getNumUnread(false))
{
count -= 1;
folder = i;
}
i += direction;
}
if (!folder || count > 0)
liberator.beep();
else
tree.view.selection.timedSelect(c + folder, tree._selectDelay);
}
function composeNewMail(args) {
var params = Components.classes["@mozilla.org/messengercompose/composeparams;1"]
.createInstance(Components.interfaces.nsIMsgComposeParams);
params.composeFields = Components.classes["@mozilla.org/messengercompose/composefields;1"]
.createInstance(Components.interfaces.nsIMsgCompFields);
if (args) {
if (args.originalMsg)
params.originalMsgURI = args.originalMsg;
if (args.to)
params.composeFields.to = args.to;
if (args.cc)
params.composeFields.cc = args.cc;
if (args.bcc)
params.composeFields.bcc = args.bcc;
if (args.newsgroups)
params.composeFields.newsgroups = args.newsgroups;
if (args.subject)
params.composeFields.subject = args.subject;
}
params.type = Components.interfaces.nsIMsgCompType.New
var msgComposeService = Components.classes["@mozilla.org/messengercompose;1"].getService();
msgComposeService = msgComposeService.QueryInterface(Components.interfaces.nsIMsgComposeService);
msgComposeService.OpenComposeWindowWithParams(null, params);
}
/////////////////////////////////////////////////////////////////////////////}}} /////////////////////////////////////////////////////////////////////////////}}}
////////////////////// OPTIONS ///////////////////////////////////////////////// ////////////////////// OPTIONS /////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{ /////////////////////////////////////////////////////////////////////////////{{{
@@ -198,6 +250,7 @@ liberator.Mail = function () //{{{
function () { return true; }, function () { return true; },
{ flags: liberator.Mappings.flags.ALLOW_EVENT_ROUTING }); { flags: liberator.Mappings.flags.ALLOW_EVENT_ROUTING });
// TODO: change to "t" probably
liberator.mappings.add(modes, ["x"], liberator.mappings.add(modes, ["x"],
"Select thread", "Select thread",
function () { gDBView.ExpandAndSelectThreadByIndex(GetThreadTree().currentIndex, false) }); function () { gDBView.ExpandAndSelectThreadByIndex(GetThreadTree().currentIndex, false) });
@@ -266,7 +319,20 @@ liberator.Mail = function () //{{{
// SENDING MESSAGES // SENDING MESSAGES
liberator.mappings.add(modes, ["m"], liberator.mappings.add(modes, ["m"],
"Compose a new message", "Compose a new message",
function () { goOpenNewMessage(); }); function () { composeNewMail(); });
liberator.mappings.add(modes, ["M"],
"Compose a new message to the sender of selected mail",
function ()
{
try
{
var args = new Object();
args.to = gDBView.hdrForFirstSelectedMessage.mime2DecodedAuthor;
composeNewMail(args);
}
catch (e) { liberator.beep(); }
});
liberator.mappings.add(modes, ["r"], liberator.mappings.add(modes, ["r"],
"Reply to sender", "Reply to sender",
@@ -396,6 +462,14 @@ liberator.Mail = function () //{{{
}, },
{ flags: liberator.Mappings.flags.COUNT }); { flags: liberator.Mappings.flags.COUNT });
liberator.mappings.add(modes, ["<C-N>"],
"Go to next mailbox with unread messages",
function (count)
{
selectUnreadFolder(false, count)
},
{ flags: liberator.Mappings.flags.COUNT });
liberator.mappings.add(modes, ["<C-p>"], liberator.mappings.add(modes, ["<C-p>"],
"Select previous folder", "Select previous folder",
function (count) function (count)
@@ -412,6 +486,14 @@ liberator.Mail = function () //{{{
}, },
{ flags: liberator.Mappings.flags.COUNT }); { flags: liberator.Mappings.flags.COUNT });
liberator.mappings.add(modes, ["<C-P>"],
"Go to previous mailbox with unread messages",
function (count)
{
selectUnreadFolder(true, count)
},
{ flags: liberator.Mappings.flags.COUNT });
// THREADING // THREADING
liberator.mappings.add(modes, ["za"], liberator.mappings.add(modes, ["za"],
"Toggle thread collapsed/expanded", "Toggle thread collapsed/expanded",
@@ -526,15 +608,24 @@ liberator.Mail = function () //{{{
liberator.echoerr("Folder \"" + args + "\" does not exist"); liberator.echoerr("Folder \"" + args + "\" does not exist");
else else
SelectFolder(folder.URI); SelectFolder(folder.URI);
},
{
completer: function (filter) { return liberator.completion.mail(filter); }
}); });
liberator.commands.add(["copy[to]"], liberator.commands.add(["copy[to]"],
"Copy selected messages", "Copy selected messages",
function (args, special) { moveOrCopy(true, args); }); function (args, special) { moveOrCopy(true, args); },
{
completer: function (filter) { return liberator.completion.mail(filter); }
});
liberator.commands.add(["move[to]"], liberator.commands.add(["move[to]"],
"Move selected messages", "Move selected messages",
function (args, special) { moveOrCopy(false, args); }); function (args, special) { moveOrCopy(false, args); },
{
completer: function (filter) { return liberator.completion.mail(filter); }
});
liberator.commands.add(["empty[trash]"], liberator.commands.add(["empty[trash]"],
"Empty trash of the current account", "Empty trash of the current account",
@@ -566,7 +657,7 @@ liberator.Mail = function () //{{{
////////////////////// PUBLIC SECTION ////////////////////////////////////////// ////////////////////// PUBLIC SECTION //////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{ /////////////////////////////////////////////////////////////////////////////{{{
return { return {
get currentAccount() { return this.currentFolder.rootFolder; }, get currentAccount() { return this.currentFolder.rootFolder; },
@@ -594,8 +685,12 @@ liberator.Mail = function () //{{{
if ((resource.isServer && !includeServers) || (!resource.isServer && !includeMsgFolders)) if ((resource.isServer && !includeServers) || (!resource.isServer && !includeMsgFolders))
continue; continue;
var folderString = resource.server.prettyName + ": " + resource.name;
if (resource.prettiestName.toLowerCase().indexOf(filter.toLowerCase()) >= 0) if (resource.prettiestName.toLowerCase().indexOf(filter.toLowerCase()) >= 0)
folders.push(resource); folders.push(resource);
else if (folderString.toLowerCase().indexOf(filter.toLowerCase()) >= 0)
folders.push(resource);
} }
return folders; return folders;
}, },