Monotone-Parent: 55136d300cf8d13c53cb1e7978c4915fba81f463
Monotone-Revision: a13f784df474c62818bf303f9bee4b03e811641b

Monotone-Author: flachapelle@inverse.ca
Monotone-Date: 2008-09-05T19:07:16
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Francis Lachapelle 2008-09-05 19:07:16 +00:00
parent ee8570423a
commit 163a60e07f
5 changed files with 92 additions and 37 deletions

View File

@ -32,6 +32,7 @@
- (WOResponse *) createFolderAction;
- (WOResponse *) renameFolderAction;
- (WOResponse *) deleteFolderAction;
- (WOResponse *) deleteMessagesAction;
- (WOResponse *) expungeAction;
- (WOResponse *) emptyTrashAction;
- (WOResponse *) subscribeAction;

View File

@ -36,6 +36,7 @@
#import <SoObjects/Mailer/SOGoMailFolder.h>
#import <SoObjects/Mailer/SOGoTrashFolder.h>
#import <SoObjects/Mailer/SOGoMailAccount.h>
#import <SoObjects/Mailer/SOGoMailObject.h>
#import <SoObjects/SOGo/NSObject+Utilities.h>
#import <SoObjects/SOGo/SOGoUser.h>
@ -181,6 +182,46 @@
return response;
}
- (WOResponse *) deleteMessagesAction
{
SOGoMailFolder *co;
SOGoMailObject *mail;
WOResponse *response;
NSArray *uids;
NSString *value, *uid;
NSException *error;
unsigned int i;
co = [self clientObject];
value = [[context request] formValueForKey: @"uid"];
response = nil;
if ([value length] > 0)
{
uids = [value componentsSeparatedByString: @","];
for (i = 0; i < [uids count]; i++)
{
uid = [uids objectAtIndex: i];
mail = [co lookupName: uid inContext: context acquire: NO];
if (mail)
{
error = [mail trashInContext: context];
if (error)
{
response = [self responseWithStatus: 500];
[response appendContentString: [NSString stringWithFormat: @"Can't trash message %@/%@", [co nameInContainer], uid]];
break;
}
}
}
}
if (response == nil)
response = [self responseWith204];
return response;
}
- (WOResponse *) _setFolderPurpose: (NSString *) purpose
{
SOGoMailFolder *co;

View File

@ -136,6 +136,11 @@
actionClass = "UIxMailFolderActions";
actionName = "deleteFolder";
};
deleteMessages = {
protectedBy = "View";
actionClass = "UIxMailFolderActions";
actionName = "deleteMessages";
};
setAsDraftsFolder = {
protectedBy = "View";
actionClass = "UIxMailFolderActions";

View File

@ -416,8 +416,7 @@ TD.mailer_fieldvalue a
}
TR.deleted TD
{ display: none;
/* text-decoration: line-through; -- alternative display */ }
{ /* text-decoration: line-through; -- alternative display */ }
img.mailer_imagecontent
{

View File

@ -237,20 +237,25 @@ function onDocumentKeydown(event) {
}
function deleteSelectedMessages(sender) {
var messageList = $("messageList");
var rows = messageList.down("TBODY").getSelectedNodes();
var messageList = $("messageList").down("TBODY");
var rows = messageList.getSelectedNodes();
var uids = new Array(); // message IDs
var paths = new Array(); // row IDs
if (rows.length > 0) {
for (var i = 0; i < rows.length; i++) {
var url;
var rowId = rows[i].readAttribute("id").substr(4);
var messageId = Mailer.currentMailbox + "/" + rowId;
url = ApplicationBaseURL + messageId + "/trash";
var uid = rows[i].readAttribute("id").substr(4);
var path = Mailer.currentMailbox + "/" + uid;
deleteMessageRequestCount++;
rows[i].addClassName("deleted");
var data = { "id": rowId, "mailbox": Mailer.currentMailbox, "messageId": messageId };
triggerAjaxRequest(url, deleteSelectedMessagesCallback, data);
rows[i].hide();
uids.push(uid);
paths.push(path);
}
var url = ApplicationBaseURL + Mailer.currentMailbox + "/deleteMessages";
var parameters = "uid=" + uids.join(",");
var data = { "id": uids, "mailbox": Mailer.currentMailbox, "path": paths };
triggerAjaxRequest(url, deleteSelectedMessagesCallback, data, parameters,
{ "Content-type": "application/x-www-form-urlencoded" });
}
else
window.alert(labels["Please select a message."]);
@ -261,31 +266,33 @@ function deleteSelectedMessages(sender) {
function deleteSelectedMessagesCallback(http) {
if (isHttpStatus204(http.status)) {
var data = http.callbackData;
deleteCachedMessage(data["messageId"]);
deleteMessageRequestCount--;
if (Mailer.currentMailbox == data["mailbox"]) {
var div = $('messageContent');
if (Mailer.currentMessages[Mailer.currentMailbox] == data["id"]) {
div.update();
Mailer.currentMessages[Mailer.currentMailbox] = null;
}
if (deleteMessageRequestCount == 0) {
var row = $("row_" + data["id"]);
var nextRow = row.next("tr");
if (!nextRow)
nextRow = row.previous("tr");
// row.addClassName("deleted"); // when we'll offer "mark as deleted"
if (nextRow) {
Mailer.currentMessages[Mailer.currentMailbox] = nextRow.getAttribute("id").substr(4);
nextRow.selectElement();
loadMessage(Mailer.currentMessages[Mailer.currentMailbox]);
}
refreshCurrentFolder();
}
}
}
else
log ("deleteSelectedMessagesCallback: problem during ajax request " + http.status);
for (var i = 0; i < data["path"].length; i++) {
deleteCachedMessage(data["path"][i]);
deleteMessageRequestCount--;
if (Mailer.currentMailbox == data["mailbox"]) {
var div = $('messageContent');
if (Mailer.currentMessages[Mailer.currentMailbox] == data["id"][i]) {
div.update();
Mailer.currentMessages[Mailer.currentMailbox] = null;
}
if (deleteMessageRequestCount == 0) {
var row = $("row_" + data["id"][i]);
var nextRow = row.next("tr");
if (!nextRow)
nextRow = row.previous("tr");
// row.addClassName("deleted"); // when we'll offer "mark as deleted"
if (nextRow) {
Mailer.currentMessages[Mailer.currentMailbox] = nextRow.getAttribute("id").substr(4);
nextRow.selectElement();
loadMessage(Mailer.currentMessages[Mailer.currentMailbox]);
}
refreshCurrentFolder();
}
}
}
}
else
log ("deleteSelectedMessagesCallback: problem during ajax request " + http.status);
}
function moveMessages(rowIds, folder) {
@ -332,13 +339,15 @@ function onMenuDeleteMessage(event) {
}
function deleteMessage(url, id, mailbox, messageId) {
var data = { "id": id, "mailbox": mailbox, "messageId": messageId };
var data = { "id": new Array(id), "mailbox": mailbox, "path": new Array(messageId) };
deleteMessageRequestCount++;
triggerAjaxRequest(url, deleteSelectedMessagesCallback, data);
}
function deleteMessageWithDelay(url, id, mailbox, messageId) {
/* this is called by UIxMailPopupView with window.opener */
var row = $("row_" + id);
if (row) row.hide();
setTimeout("deleteMessage('" +
url + "', '" +
id + "', '" +