applied comments and fix bug where the folded threads were saved only after refreshing the entire page

This commit is contained in:
Alexandre Cloutier
2014-08-13 18:39:33 -04:00
parent c5f9dd086b
commit 59023da7f0
2 changed files with 52 additions and 48 deletions

View File

@@ -145,7 +145,7 @@
return response;
}
- (id) markMessageCollapseAction
- (void) collapseAction: (BOOL) isCollapsing
{
NSMutableDictionary *moduleSettings, *threadsCollapsed;
NSMutableArray *mailboxThreadsCollapsed;
@@ -159,67 +159,59 @@
currentAccount = [[[[self clientObject] container] container] nameInContainer];
keyForMsgUIDs = [NSString stringWithFormat:@"/%@/%@", currentAccount, currentMailbox];
// Check if the module threadsCollapsed is created in the userSettings
if ([moduleSettings objectForKey:@"threadsCollapsed"])
if (isCollapsing)
{
// Check if the currentMailbox already have other threads saved and add the new collapsed thread
threadsCollapsed = [moduleSettings objectForKey:@"threadsCollapsed"];
if ([threadsCollapsed objectForKey:keyForMsgUIDs])
// Check if the module threadsCollapsed is created in the userSettings
if ((threadsCollapsed = [moduleSettings objectForKey:@"threadsCollapsed"]))
{
mailboxThreadsCollapsed = [threadsCollapsed objectForKey:keyForMsgUIDs];
if (![mailboxThreadsCollapsed containsObject:msguid])
// Check if the currentMailbox already have other threads saved and add the new collapsed thread
if ((mailboxThreadsCollapsed = [threadsCollapsed objectForKey:keyForMsgUIDs]))
if (![mailboxThreadsCollapsed containsObject:msguid])
[mailboxThreadsCollapsed addObject:msguid];
else
{
mailboxThreadsCollapsed = [NSMutableArray arrayWithObject:msguid];
[threadsCollapsed setObject:mailboxThreadsCollapsed forKey:keyForMsgUIDs];
}
}
else
{
// Created the module threadsCollapsed and add the new collapsed thread
mailboxThreadsCollapsed = [NSMutableArray arrayWithObject:msguid];
[threadsCollapsed setObject:mailboxThreadsCollapsed forKey:keyForMsgUIDs];
threadsCollapsed = [NSMutableDictionary dictionaryWithObject:mailboxThreadsCollapsed forKey:keyForMsgUIDs];
[moduleSettings setObject:threadsCollapsed forKey: @"threadsCollapsed"];
}
}
else
{
// Created the module threadsCollapsed and add the new collapsed thread
mailboxThreadsCollapsed = [NSMutableArray arrayWithObject:msguid];
threadsCollapsed = [NSMutableDictionary dictionaryWithObject:mailboxThreadsCollapsed forKey:keyForMsgUIDs];
[moduleSettings setObject:threadsCollapsed forKey: @"threadsCollapsed"];
// Check if the module threadsCollapsed is created in the userSettings
if ((threadsCollapsed = [moduleSettings objectForKey:@"threadsCollapsed"]))
{
// Check if the currentMailbox already have other threads saved and remove the uncollapsed thread
if ((mailboxThreadsCollapsed = [threadsCollapsed objectForKey:keyForMsgUIDs]))
{
[mailboxThreadsCollapsed removeObject:msguid];
if ([mailboxThreadsCollapsed count] == 0)
[threadsCollapsed removeObjectForKey:keyForMsgUIDs];
}
}
// TODO : Manage errors
}
[us synchronize];
}
- (id) markMessageCollapseAction
{
[self collapseAction: YES];
return [self responseWith204];
}
- (id) markMessageUncollapseAction
{
NSMutableDictionary *moduleSettings, *threadsCollapsed;
NSMutableArray *mailboxThreadsCollapsed;
NSString *msguid, *currentMailbox, *currentAccount, *keyForMsgUIDs;
SOGoUserSettings *us;
us = [[context activeUser] userSettings];
moduleSettings = [us objectForKey: @"Mail"];
msguid = [[self clientObject] nameInContainer];
currentMailbox = [[[self clientObject] container] nameInContainer];
currentAccount = [[[[self clientObject] container] container] nameInContainer];
keyForMsgUIDs = [NSString stringWithFormat:@"/%@/%@", currentAccount, currentMailbox];
// Check if the module threadsCollapsed is created in the userSettings
if ([moduleSettings objectForKey:@"threadsCollapsed"])
{
// Check if the currentMailbox already have other threads saved and remove the uncollapsed thread
threadsCollapsed = [moduleSettings objectForKey:@"threadsCollapsed"];
if ([threadsCollapsed objectForKey:keyForMsgUIDs])
{
mailboxThreadsCollapsed = [threadsCollapsed objectForKey:keyForMsgUIDs];
[mailboxThreadsCollapsed removeObject:msguid];
if ([mailboxThreadsCollapsed count] == 0)
[threadsCollapsed removeObjectForKey:keyForMsgUIDs];
[us synchronize];
}
}
// TODO : Manage errors
[self collapseAction: NO];
return [self responseWith204];
}

View File

@@ -248,17 +248,28 @@ function mailListToggleMessageThread(row, cell) {
// Update the dictionnary of the collapsed threads
var mailbox = Mailer.currentMailbox;
var url = ApplicationBaseURL + encodeURI(mailbox) + "/" + msguid + "/" + action;
var data = { "currentMailbox": Mailer.currentMailbox, "msguid": msguid };
var callbackData = { "currentMailbox": Mailer.currentMailbox, "msguid": msguid, "action": action};
triggerAjaxRequest(url, mailListToggleMessageCollapseCallback);
triggerAjaxRequest(url, mailListToggleMessageCollapseCallback, callbackData);
}
function mailListToggleMessageCollapseCallback(http) {
var data = http.callbackData;
if (!isHttpStatus204(http.status)) {
if (isHttpStatus204(http.status)) {
if (data.action == "markMessageCollapse") {
if (cachedThreadsCollapsed[data.currentMailbox])
cachedThreadsCollapsed[data.currentMailbox].push(data.msguid);
else
cachedThreadsCollapsed[data.currentMailbox] = [data.msguid];
}
else {
var index = cachedThreadsCollapsed[data.currentMailbox].indexOf(data.msguid);
cachedThreadsCollapsed[data.currentMailbox].splice(index, 1);
}
}
else {
log("Message Collapse Failed (" + http.status + "): " + http.statusText);
}
//Mailer.dataTable.invalidate(data["msguid"], true);
}
@@ -948,6 +959,7 @@ function openMailbox(mailbox, reload) {
* Called from SOGoDataTable.render()
*/
var show = false;
var cachedThreadsCollapsed = UserSettings.Mail.threadsCollapsed;
function messageListCallback(row, data, isNew) {
var currentMessage = Mailer.currentMessages[Mailer.currentMailbox];
@@ -961,9 +973,9 @@ function messageListCallback(row, data, isNew) {
row.addClassName('_selected');
if (data['Thread']) {
if (UserSettings.Mail.threadsCollapsed) {
if (cachedThreadsCollapsed) {
var mailbox = Mailer.currentMailbox;
var collapsedList = UserSettings.Mail.threadsCollapsed[mailbox];
var collapsedList = cachedThreadsCollapsed[mailbox];
if (collapsedList != undefined && collapsedList.indexOf(row.id.split("_")[1]) != -1) {
row.addClassName('closedThread');
show = true;