mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-04-22 21:39:28 +00:00
See ChangeLog
Monotone-Parent: 043af14fd2ae984a7c53179d03394ad062129d22 Monotone-Revision: 32554661a85cc9243d30ced4dbf571eab59b4ea3 Monotone-Author: crobert@inverse.ca Monotone-Date: 2008-10-03T19:01:29 Monotone-Branch: ca.inverse.sogo
This commit is contained in:
17
ChangeLog
17
ChangeLog
@@ -1,3 +1,20 @@
|
||||
2008-10-03 Cyril Robert <crobert@inverse.ca>
|
||||
* SoObjects/Mailer/SOGoMailFolder.m
|
||||
Added copyUIDs and moveUIDs
|
||||
|
||||
* UI/MailerUI/UIxMailActions.m
|
||||
Removed copyAction and moveAction
|
||||
|
||||
* UI/MailerUI/UIxMailFolderActions.m
|
||||
Added copyMessagesAction and moveMessagesAction
|
||||
|
||||
* UI/WebServerResources/MailerUI.js
|
||||
Removed _onMailboxMenuAction
|
||||
Modified onMailboxMenuCopy and onMailboxMenuMove
|
||||
|
||||
Copying/Moving messages is now done with one POST.
|
||||
Fixed bug #1893
|
||||
|
||||
2008-10-02 Cyril Robert <crobert@inverse.ca>
|
||||
|
||||
* SoObjects/Mailer/SOGoMailFolder.m
|
||||
|
||||
@@ -397,6 +397,55 @@ static NSString *spoolFolder = nil;
|
||||
return response;
|
||||
}
|
||||
|
||||
- (WOResponse *) copyUIDs: (NSArray *) uids
|
||||
toFolder: (NSString *) destinationFolder
|
||||
inContext: (id) localContext
|
||||
{
|
||||
NSEnumerator *folders;
|
||||
NSString *currentFolderName;
|
||||
NSMutableString *imapDestinationFolder;
|
||||
NGImap4Client *client;
|
||||
id result;
|
||||
|
||||
imapDestinationFolder = [NSMutableString string];
|
||||
folders = [[destinationFolder componentsSeparatedByString: @"/"] objectEnumerator];
|
||||
currentFolderName = [folders nextObject];
|
||||
while (currentFolderName)
|
||||
{
|
||||
if ([currentFolderName hasPrefix: @"folder"])
|
||||
{
|
||||
[imapDestinationFolder appendString: @"/"];
|
||||
[imapDestinationFolder appendString: [currentFolderName substringFromIndex: 6]];
|
||||
}
|
||||
currentFolderName = [folders nextObject];
|
||||
}
|
||||
|
||||
client = [[self imap4Connection] client];
|
||||
[imap4 selectFolder: [self imap4URL]];
|
||||
|
||||
result = [client copyUids: uids toFolder: imapDestinationFolder];
|
||||
|
||||
if ([[result valueForKey: @"result"] boolValue])
|
||||
result = nil;
|
||||
else
|
||||
result = [NSException exceptionWithHTTPStatus: 500 reason: @"Couldn't copy UIDs."];
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
- (WOResponse *) moveUIDs: (NSArray *) uids
|
||||
toFolder: (NSString *) destinationFolder
|
||||
inContext: (id) localContext
|
||||
{
|
||||
id result;
|
||||
result = [self copyUIDs: uids toFolder: destinationFolder inContext: localContext];
|
||||
|
||||
if ( ![result isNotNull] )
|
||||
result = [self deleteUIDs: uids inContext: localContext];
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSArray *) fetchUIDsMatchingQualifier: (id) _q
|
||||
sortOrdering: (id) _so
|
||||
{
|
||||
|
||||
@@ -89,46 +89,6 @@
|
||||
return [self redirectToLocation: newLocation];
|
||||
}
|
||||
|
||||
- (id) moveAction
|
||||
{
|
||||
NSString *destinationFolder;
|
||||
id response;
|
||||
|
||||
destinationFolder = [[context request] formValueForKey: @"folder"];
|
||||
if ([destinationFolder length] > 0)
|
||||
{
|
||||
response = [[self clientObject] moveToFolderNamed: destinationFolder
|
||||
inContext: context];
|
||||
if (!response)
|
||||
response = [self responseWith204];
|
||||
}
|
||||
else
|
||||
response = [NSException exceptionWithHTTPStatus: 500 /* Server Error */
|
||||
reason: @"No destination folder given"];
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
- (id) copyAction
|
||||
{
|
||||
NSString *destinationFolder;
|
||||
id response;
|
||||
|
||||
destinationFolder = [[context request] formValueForKey: @"folder"];
|
||||
if ([destinationFolder length] > 0)
|
||||
{
|
||||
response = [[self clientObject] copyToFolderNamed: destinationFolder
|
||||
inContext: context];
|
||||
if (!response)
|
||||
response = [self responseWith204];
|
||||
}
|
||||
else
|
||||
response = [NSException exceptionWithHTTPStatus: 500 /* Server Error */
|
||||
reason: @"No destination folder given"];
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/* active message */
|
||||
|
||||
- (id) markMessageUnreadAction
|
||||
|
||||
@@ -236,6 +236,62 @@
|
||||
return response;
|
||||
}
|
||||
|
||||
- (WOResponse *) copyMessagesAction
|
||||
{
|
||||
SOGoMailFolder *co;
|
||||
WOResponse *response;
|
||||
NSArray *uids;
|
||||
NSString *value, *destinationFolder;
|
||||
|
||||
co = [self clientObject];
|
||||
value = [[context request] formValueForKey: @"uid"];
|
||||
destinationFolder = [[context request] formValueForKey: @"folder"];
|
||||
response = nil;
|
||||
|
||||
if ([value length] > 0)
|
||||
{
|
||||
uids = [value componentsSeparatedByString: @","];
|
||||
response = [co copyUIDs: uids toFolder: destinationFolder inContext: context];
|
||||
if (!response)
|
||||
response = [self responseWith204];
|
||||
}
|
||||
else
|
||||
{
|
||||
response = [self responseWithStatus: 500];
|
||||
[response appendContentString: @"Missing 'uid' parameter."];
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
- (WOResponse *) moveMessagesAction
|
||||
{
|
||||
SOGoMailFolder *co;
|
||||
WOResponse *response;
|
||||
NSArray *uids;
|
||||
NSString *value, *destinationFolder;
|
||||
|
||||
co = [self clientObject];
|
||||
value = [[context request] formValueForKey: @"uid"];
|
||||
destinationFolder = [[context request] formValueForKey: @"folder"];
|
||||
response = nil;
|
||||
|
||||
if ([value length] > 0)
|
||||
{
|
||||
uids = [value componentsSeparatedByString: @","];
|
||||
response = [co moveUIDs: uids toFolder: destinationFolder inContext: context];
|
||||
if (!response)
|
||||
response = [self responseWith204];
|
||||
}
|
||||
else
|
||||
{
|
||||
response = [self responseWithStatus: 500];
|
||||
[response appendContentString: @"Missing 'uid' parameter."];
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
- (WOResponse *) _setFolderPurpose: (NSString *) purpose
|
||||
{
|
||||
SOGoMailFolder *co;
|
||||
|
||||
@@ -146,6 +146,16 @@
|
||||
actionClass = "UIxMailFolderActions";
|
||||
actionName = "saveMessages";
|
||||
};
|
||||
copyMessages = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailFolderActions";
|
||||
actionName = "copyMessages";
|
||||
};
|
||||
moveMessages = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailFolderActions";
|
||||
actionName = "moveMessages";
|
||||
};
|
||||
setAsDraftsFolder = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailFolderActions";
|
||||
@@ -211,16 +221,6 @@
|
||||
protectedBy = "View";
|
||||
pageName = "UIxMailPopupView";
|
||||
};
|
||||
move = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailActions";
|
||||
actionName = "move";
|
||||
};
|
||||
copy = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailActions";
|
||||
actionName = "copy";
|
||||
};
|
||||
junk = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailActions";
|
||||
|
||||
@@ -422,45 +422,49 @@ function onMailboxTreeItemClick(event) {
|
||||
Event.stop(event);
|
||||
}
|
||||
|
||||
function _onMailboxMenuAction(menuEntry, error, actionName) {
|
||||
var targetMailbox = menuEntry.mailbox.fullName();
|
||||
var messages = new Array();
|
||||
|
||||
if (targetMailbox == Mailer.currentMailbox)
|
||||
window.alert(labels[error]);
|
||||
else {
|
||||
if (document.menuTarget.tagName == "DIV")
|
||||
// Menu called from message content view
|
||||
messages.push(Mailer.currentMessages[Mailer.currentMailbox]);
|
||||
else if (Object.isArray(document.menuTarget))
|
||||
// Menu called from multiple selection in messages list view
|
||||
messages = $(document.menuTarget).collect(function(row) {
|
||||
return row.getAttribute("id").substr(4);
|
||||
});
|
||||
else
|
||||
// Menu called from one selection in messages list view
|
||||
messages.push(document.menuTarget.getAttribute("id").substr(4));
|
||||
|
||||
var url_prefix = URLForFolderID(Mailer.currentMailbox) + "/";
|
||||
messages.each(function(msgid, i) {
|
||||
var url = url_prefix + msgid + "/" + actionName
|
||||
+ "?folder=" + encodeURIComponent(targetMailbox);
|
||||
triggerAjaxRequest(url, folderRefreshCallback,
|
||||
((i == messages.size() - 1)?Mailer.currentMailbox:""));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function onMailboxMenuMove(event) {
|
||||
_onMailboxMenuAction(this,
|
||||
"Moving a message into its own folder is impossible!",
|
||||
"move");
|
||||
var targetMailbox = this.mailbox.fullName();
|
||||
var messageList = $("messageList").down("TBODY");
|
||||
var rows = messageList.getSelectedNodes();
|
||||
var uids = new Array(); // message IDs
|
||||
var paths = new Array(); // row IDs
|
||||
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
var uid = rows[i].readAttribute("id").substr(4);
|
||||
var path = Mailer.currentMailbox + "/" + uid;
|
||||
rows[i].hide();
|
||||
uids.push(uid);
|
||||
paths.push(path);
|
||||
}
|
||||
var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/moveMessages";
|
||||
var parameters = "uid=" + uids.join(",") + "&folder=" + targetMailbox;
|
||||
var data = { "id": uids, "mailbox": Mailer.currentMailbox, "path": paths, "folder": targetMailbox };
|
||||
triggerAjaxRequest(url, folderRefreshCallback, data, parameters,
|
||||
{ "Content-type": "application/x-www-form-urlencoded" });
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function onMailboxMenuCopy(event) {
|
||||
_onMailboxMenuAction(this,
|
||||
"Copying a message into its own folder is impossible!",
|
||||
"copy");
|
||||
var targetMailbox = this.mailbox.fullName();
|
||||
var messageList = $("messageList").down("TBODY");
|
||||
var rows = messageList.getSelectedNodes();
|
||||
var uids = new Array(); // message IDs
|
||||
var paths = new Array(); // row IDs
|
||||
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
var uid = rows[i].readAttribute("id").substr(4);
|
||||
var path = Mailer.currentMailbox + "/" + uid;
|
||||
uids.push(uid);
|
||||
paths.push(path);
|
||||
}
|
||||
var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/copyMessages";
|
||||
var parameters = "uid=" + uids.join(",") + "&folder=" + targetMailbox;
|
||||
var data = { "id": uids, "mailbox": Mailer.currentMailbox, "path": paths, "folder": targetMailbox };
|
||||
triggerAjaxRequest(url, folderRefreshCallback, data, parameters,
|
||||
{ "Content-type": "application/x-www-form-urlencoded" });
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function refreshMailbox() {
|
||||
@@ -1491,9 +1495,23 @@ function generateMenuForMailbox(mailbox, prefix, callback) {
|
||||
previousMenuDIV.parentNode.removeChild(previousMenuDIV);
|
||||
menuDIV.setAttribute("id", menuID);
|
||||
var menu = document.createElement("ul");
|
||||
menu.style.cssFloat="left";
|
||||
menu.style.styleFloat="left";
|
||||
menuDIV.appendChild(menu);
|
||||
pageContent.appendChild(menuDIV);
|
||||
|
||||
var windowHeight = 0;
|
||||
if ( typeof(window.innerHeight) != "undefined" && window.innerHeight != 0 ) {
|
||||
windowHeight = window.innerHeight;
|
||||
}
|
||||
else {
|
||||
windowHeight = document.body.clientHeight;
|
||||
}
|
||||
var offset = 70;
|
||||
if ( navigator.appVersion.indexOf("Safari") >= 0 ) {
|
||||
offset = 140;
|
||||
}
|
||||
|
||||
var callbacks = new Array();
|
||||
if (mailbox.type != "account") {
|
||||
var newNode = document.createElement("li");
|
||||
@@ -1507,6 +1525,12 @@ function generateMenuForMailbox(mailbox, prefix, callback) {
|
||||
|
||||
var submenuCount = 0;
|
||||
for (var i = 0; i < mailbox.children.length; i++) {
|
||||
if ( menu.offsetHeight > windowHeight-offset ) {
|
||||
menu = document.createElement("ul");
|
||||
menu.style.cssFloat="left";
|
||||
menu.style.styleFloat="left";
|
||||
menuDIV.appendChild(menu);
|
||||
}
|
||||
var child = mailbox.children[i];
|
||||
var newNode = mailboxMenuNode(child.type, child.name);
|
||||
menu.appendChild(newNode);
|
||||
@@ -1521,6 +1545,7 @@ function generateMenuForMailbox(mailbox, prefix, callback) {
|
||||
callbacks.push(callback);
|
||||
}
|
||||
}
|
||||
|
||||
initMenu(menuDIV, callbacks);
|
||||
|
||||
return menuDIV.getAttribute("id");
|
||||
|
||||
@@ -327,7 +327,7 @@ SPAN.toolbarButton:active
|
||||
border-top: 1px solid #fff;
|
||||
border-left: 1px solid #fff;
|
||||
border-right: 1px solid #9e9a92;
|
||||
border-bottom: 1px solid #9e9a92; }
|
||||
/*border-bottom: 1px solid #9e9a92;*/ }
|
||||
|
||||
.menu LI,
|
||||
.popupMenu LI
|
||||
|
||||
Reference in New Issue
Block a user