From 59023da7f00010c44ff026019d93009ff908d13e Mon Sep 17 00:00:00 2001 From: Alexandre Cloutier Date: Wed, 13 Aug 2014 18:39:33 -0400 Subject: [PATCH] applied comments and fix bug where the folded threads were saved only after refreshing the entire page --- UI/MailerUI/UIxMailActions.m | 76 ++++++++++++++----------------- UI/WebServerResources/MailerUI.js | 24 +++++++--- 2 files changed, 52 insertions(+), 48 deletions(-) diff --git a/UI/MailerUI/UIxMailActions.m b/UI/MailerUI/UIxMailActions.m index 27e5e9a8f..3ff8832f3 100644 --- a/UI/MailerUI/UIxMailActions.m +++ b/UI/MailerUI/UIxMailActions.m @@ -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]; } diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index d80268e24..d28d92c99 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -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;