See ChangeLog.

Monotone-Parent: e41b77fddf24412874484346ccb32080911c93bc
Monotone-Revision: 81d97c694c2b068327505b3735f75782c70eaa6e

Monotone-Author: flachapelle@inverse.ca
Monotone-Date: 2011-05-03T14:05:08
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Francis Lachapelle 2011-05-03 14:05:08 +00:00
parent 8f2bd77694
commit 647d46368c
3 changed files with 88 additions and 67 deletions

View file

@ -1,3 +1,13 @@
2011-05-03 Francis Lachapelle <flachapelle@inverse.ca>
* UI/WebServerResources/generic.js (onRowClick): in some cases
under ID, the event is trigger on the dragging identifier
and must be ignored.
* UI/WebServerResources/MailerUI.js (deleteSelectedMessages): we no
longer wait for the callback before invalidating the caches.
(mailListToggleMessagesRead): idem.
2011-04-28 Ludovic Marcotte <lmarcotte@inverse.ca> 2011-04-28 Ludovic Marcotte <lmarcotte@inverse.ca>
* SoObjects/SOGo/SQLSource.{h,m}: Added resources support, * SoObjects/SOGo/SQLSource.{h,m}: Added resources support,

View file

@ -203,7 +203,8 @@ function openMessageWindowsForSelection(action, firstOnly) {
return false; return false;
} }
/* Triggered when clicking on the read/unread dot of a message row */ /* Triggered when clicking on the read/unread dot of a message row or
* through the contextual menu. */
function mailListToggleMessagesRead(row) { function mailListToggleMessagesRead(row) {
var selectedRowsId = []; var selectedRowsId = [];
if (row) { if (row) {
@ -233,6 +234,9 @@ function mailListToggleMessagesRead(row) {
var msguid = selectedRowsId[i].split('_')[1]; var msguid = selectedRowsId[i].split('_')[1];
markMailInWindow(window, msguid, markread); markMailInWindow(window, msguid, markread);
// Assume ajax request will succeed and invalidate data cache now.
Mailer.dataTable.invalidate(msguid, true);
var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/" var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/"
+ msguid + "/" + action; + msguid + "/" + action;
@ -242,6 +246,7 @@ function mailListToggleMessagesRead(row) {
} }
} }
/*
function mailListMarkMessage(event) { function mailListMarkMessage(event) {
mailListToggleMessagesRead(); mailListToggleMessagesRead();
@ -249,15 +254,11 @@ function mailListMarkMessage(event) {
return false; return false;
} }
*/
function mailListMarkMessageCallback(http) { function mailListMarkMessageCallback(http) {
var data = http.callbackData; var data = http.callbackData;
if (isHttpStatus204(http.status) if (!isHttpStatus204(http.status)) {
|| http.status == 304) { // In some cases, Safari returns a 304 even
// though SOGo returns a 204!
Mailer.dataTable.invalidate(data["msguid"], true);
}
else {
log("Message Mark Failed (" + http.status + "): " + http.statusText); log("Message Mark Failed (" + http.status + "): " + http.statusText);
Mailer.dataTable.invalidate(data["msguid"], false); Mailer.dataTable.invalidate(data["msguid"], false);
} }
@ -393,6 +394,7 @@ function deleteSelectedMessages(sender) {
return false; return false;
var messageList = $("messageListBody").down("TBODY"); var messageList = $("messageListBody").down("TBODY");
var messageContent = $("messageContent");
var rowIds = messageList.getSelectedNodesId(); var rowIds = messageList.getSelectedNodesId();
var uids = new Array(); // message IDs var uids = new Array(); // message IDs
var paths = new Array(); // row IDs var paths = new Array(); // row IDs
@ -418,6 +420,44 @@ function deleteSelectedMessages(sender) {
uids.push(uid); uids.push(uid);
paths.push(path); paths.push(path);
deleteMessageRequestCount++; deleteMessageRequestCount++;
deleteCachedMessage(path);
if (Mailer.currentMessages[Mailer.currentMailbox] == uid) {
messageContent.innerHTML = '';
Mailer.currentMessages[Mailer.currentMailbox] = null;
}
if (i+1 == rowIds.length) {
// Select next message
var row = $("row_" + uid);
var nextRow = false;
if (row) {
nextRow = row.next("tr");
if (!nextRow.id.startsWith('row_'))
nextRow = row.previous("tr");
// row.addClassName("deleted"); // when we'll offer "mark as deleted"
if (nextRow.id.startsWith('row_')) {
Mailer.currentMessages[Mailer.currentMailbox] = nextRow.id.substr(4);
nextRow.selectElement();
if (loadMessage(Mailer.currentMessages[Mailer.currentMailbox]))
Mailer.dataTable.invalidate(Mailer.currentMessages[Mailer.currentMailbox], true);
}
}
else {
messageContent.innerHTML = '';
}
Mailer.dataTable.remove(uid);
if (nextRow) {
// from generic.js
lastClickedRow = nextRow.rowIndex;
lastClickedRowId = nextRow.id;
}
Mailer.dataTable.refresh();
deleteCachedMailboxByType("trash");
}
else {
Mailer.dataTable.remove(uid);
}
} }
updateMessageListCounter(0 - rowIds.length, true); updateMessageListCounter(0 - rowIds.length, true);
if (unseenCount < 0) { if (unseenCount < 0) {
@ -441,49 +481,9 @@ function deleteSelectedMessages(sender) {
function deleteSelectedMessagesCallback(http) { function deleteSelectedMessagesCallback(http) {
if (isHttpStatus204(http.status)) { if (isHttpStatus204(http.status)) {
var data = http.callbackData; var data = http.callbackData;
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.innerHTML = '';
Mailer.currentMessages[Mailer.currentMailbox] = null;
}
if (deleteMessageRequestCount == 0) {
// Select next message
var row = $("row_" + data["id"][i]);
var nextRow = false;
if (row) {
nextRow = row.next("tr");
if (!nextRow.id.startsWith('row_'))
nextRow = row.previous("tr");
// row.addClassName("deleted"); // when we'll offer "mark as deleted"
if (nextRow.id.startsWith('row_')) {
Mailer.currentMessages[Mailer.currentMailbox] = nextRow.id.substr(4);
nextRow.selectElement();
if (loadMessage(Mailer.currentMessages[Mailer.currentMailbox]))
Mailer.dataTable.invalidate(Mailer.currentMessages[Mailer.currentMailbox], true);
}
}
else {
div.innerHTML = '';
}
Mailer.dataTable.remove(data["id"][i]);
if (nextRow) {
// from generic.js
lastClickedRow = nextRow.rowIndex;
lastClickedRowId = nextRow.id;
}
Mailer.dataTable.refresh();
deleteCachedMailboxByType("trash");
}
else {
Mailer.dataTable.remove(data["id"][i]);
}
}
}
if (data["refreshUnseenCount"]) if (data["refreshUnseenCount"])
// TODO : the unseen count should be returned when calling the batchDelete remote action,
// in order to avoid this extra AJAX call.
getUnseenCountForFolder(data["mailbox"]); getUnseenCountForFolder(data["mailbox"]);
} }
else if (!http.callbackData["withoutTrash"]) { else if (!http.callbackData["withoutTrash"]) {
@ -493,7 +493,9 @@ function deleteSelectedMessagesCallback(http) {
function() { refreshCurrentFolder(); disposeDialog(); }); function() { refreshCurrentFolder(); disposeDialog(); });
} }
else { else {
log ("deleteSelectedMessagesCallback: problem during ajax request " + http.status + " : " + http.responseText); var html = new Element('div').update(http.responseText);
log ("Messages deletion failed (" + http.status + ") : " + html.down('p').innerHTML);
showAlertDialog(_("Operation failed"));
refreshCurrentFolder(); refreshCurrentFolder();
} }
} }
@ -1155,7 +1157,9 @@ function loadMessage(msguid) {
div.innerHTML = ''; div.innerHTML = '';
document.messageAjaxRequest = triggerAjaxRequest(url, document.messageAjaxRequest = triggerAjaxRequest(url,
loadMessageCallback, loadMessageCallback,
{ 'msguid': msguid, 'seenStateHasChanged': seenStateHasChanged }); { 'mailbox': Mailer.currentMailbox,
'msguid': msguid,
'seenStateHasChanged': seenStateHasChanged });
// Warning: We assume the user can set the read/unread flag of the message. // Warning: We assume the user can set the read/unread flag of the message.
markMailInWindow(window, msguid, true); markMailInWindow(window, msguid, true);
} }
@ -1562,20 +1566,24 @@ function loadMessageCallback(http) {
var div = $('messageContent'); var div = $('messageContent');
if (http.status == 200) { if (http.status == 200) {
if (http.callbackData) {
document.messageAjaxRequest = null; document.messageAjaxRequest = null;
var msguid = http.callbackData.msguid;
var mailbox = http.callbackData.mailbox;
if (Mailer.currentMailbox == mailbox &&
Mailer.currentMessages[Mailer.currentMailbox] == msguid) {
div.innerHTML = http.responseText; div.innerHTML = http.responseText;
configureLinksInMessage(); configureLinksInMessage();
resizeMailContent(); resizeMailContent();
configureLoadImagesButton(); configureLoadImagesButton();
configureSignatureFlagImage(); configureSignatureFlagImage();
handleReturnReceipt(); handleReturnReceipt();
if (http.callbackData) {
var cachedMessage = new Array();
var msguid = http.callbackData.msguid;
// Warning: If the user can't set the read/unread flag, it won't // Warning: If the user can't set the read/unread flag, it won't
// be reflected in the view unless we force the refresh. // be reflected in the view unless we force the refresh.
if (http.callbackData.seenStateHasChanged) if (http.callbackData.seenStateHasChanged)
Mailer.dataTable.invalidate(msguid, true); Mailer.dataTable.invalidate(msguid, true);
}
var cachedMessage = new Array();
cachedMessage['idx'] = Mailer.currentMailbox + '/' + msguid; cachedMessage['idx'] = Mailer.currentMailbox + '/' + msguid;
cachedMessage['time'] = (new Date()).getTime(); cachedMessage['time'] = (new Date()).getTime();
cachedMessage['text'] = http.responseText; cachedMessage['text'] = http.responseText;

View file

@ -577,6 +577,9 @@ function onRowClick(event, target) {
// No parent; stop here // No parent; stop here
return true; return true;
} }
else
// Not a list; stop here
return true;
var initialSelection = $(node.parentNode).getSelectedNodesId(); var initialSelection = $(node.parentNode).getSelectedNodesId();
if (initialSelection && initialSelection.length > 0 if (initialSelection && initialSelection.length > 0
@ -1885,7 +1888,7 @@ function showPromptDialog(title, label, callback, defaultValue) {
_("OK"), _("OK"),
callback.bind(input))); callback.bind(input)));
fields.appendChild(createButton(null, fields.appendChild(createButton(null,
"Cancel", _("Cancel"),
disposeDialog)); disposeDialog));
dialog = createDialog(null, dialog = createDialog(null,
title, title,