From 7e26d80c77316c0869470b045a29786efccfdeb2 Mon Sep 17 00:00:00 2001 From: Alexandre Cloutier Date: Tue, 2 Sep 2014 10:11:27 -0400 Subject: [PATCH 1/5] merge conflicts --- UI/MailerUI/UIxMailActions.m | 70 --------------------- UI/MailerUI/UIxMailFolderActions.m | 84 ++++++++++++++++++++++++++ UI/MailerUI/product.plist | 30 ++++----- UI/WebServerResources/MailerUI.js | 97 +++++++++++++++++------------- 4 files changed, 155 insertions(+), 126 deletions(-) diff --git a/UI/MailerUI/UIxMailActions.m b/UI/MailerUI/UIxMailActions.m index b21cd160f..71bb05f8f 100644 --- a/UI/MailerUI/UIxMailActions.m +++ b/UI/MailerUI/UIxMailActions.m @@ -203,74 +203,4 @@ return response; } -- (WOResponse *) addLabelAction -{ - WOResponse *response; - SOGoMailObject *co; - NSException *error; - NSArray *flags; - NSString *flag; - - flag = [[[self->context request] formValueForKey: @"flag"] fromCSSIdentifier]; - co = [self clientObject]; - flags = [NSArray arrayWithObject: flag]; - - error = [co addFlags: flags]; - if (error) - response = (WOResponse *) error; - else - response = [self responseWith204]; - - return response; -} - -- (WOResponse *) removeLabelAction -{ - WOResponse *response; - SOGoMailObject *co; - NSException *error; - NSArray *flags; - NSString *flag; - - flag = [[[self->context request] formValueForKey: @"flag"] fromCSSIdentifier]; - co = [self clientObject]; - flags = [NSArray arrayWithObject: flag]; - - error = [co removeFlags: flags]; - if (error) - response = (WOResponse *) error; - else - response = [self responseWith204]; - - return response; -} - -- (WOResponse *) removeAllLabelsAction -{ - NSMutableArray *flags; - WOResponse *response; - SOGoMailObject *co; - NSException *error; - NSDictionary *v; - - - co = [self clientObject]; - - v = [[[context activeUser] userDefaults] mailLabelsColors]; - - // We always unconditionally remove the Mozilla tags - flags = [NSMutableArray arrayWithObjects: @"$Label1", @"$Label2", @"$Label3", - @"$Label4", @"$Label5", nil]; - - [flags addObjectsFromArray: [v allKeys]]; - - error = [co removeFlags: flags]; - if (error) - response = (WOResponse *) error; - else - response = [self responseWith204]; - - return response; -} - @end diff --git a/UI/MailerUI/UIxMailFolderActions.m b/UI/MailerUI/UIxMailFolderActions.m index 0e1ca9123..877a0ada0 100644 --- a/UI/MailerUI/UIxMailFolderActions.m +++ b/UI/MailerUI/UIxMailFolderActions.m @@ -618,4 +618,88 @@ return response; } +- (WOResponse *) addLabelAction +{ + WOResponse *response; + WORequest *request; + SOGoMailFolder *co; + NSException *error; + NSArray *msgUIDs, *flags; + NSString *operation; + NSDictionary *content; + BOOL addOrRemove; + NGImap4Client *client; + + request = [context request]; + content = [[request contentAsString] objectFromJSONString]; + flags = [content objectForKey:@"flags"]; + msgUIDs = [content objectForKey:@"msgUIDs"]; + operation = [content objectForKey:@"operation"]; + + if ([operation isEqualToString:@"add"]) + addOrRemove = YES; + else + addOrRemove = NO; + + co = [self clientObject]; + client = [[co imap4Connection] client]; + error = [client storeFlags:flags forUIDs:msgUIDs addOrRemove:addOrRemove]; + if (error) + response = (WOResponse *) error; + else + response = [self responseWith204]; + + return response; +} + +- (WOResponse *) removeLabelAction +{ + WOResponse *response; + SOGoMailObject *co; + NSException *error; + NSArray *flags; + NSString *flag; + + flag = [[[self->context request] formValueForKey: @"flag"] fromCSSIdentifier]; + co = [self clientObject]; + flags = [NSArray arrayWithObject: flag]; + + error = [co removeFlags: flags]; + if (error) + response = (WOResponse *) error; + else + response = [self responseWith204]; + + return response; +} + +- (WOResponse *) removeAllLabelsAction +{ + NSMutableArray *flags; + WOResponse *response; + SOGoMailObject *co; + NSException *error; + NSDictionary *v; + + + co = [self clientObject]; + + v = [[[context activeUser] userDefaults] mailLabelsColors]; + + // We always unconditionally remove the Mozilla tags + flags = [NSMutableArray arrayWithObjects: @"$Label1", @"$Label2", @"$Label3", + @"$Label4", @"$Label5", nil]; + + [flags addObjectsFromArray: [v allKeys]]; + + error = [co removeFlags: flags]; + if (error) + response = (WOResponse *) error; + else + response = [self responseWith204]; + + return response; +} + + @end diff --git a/UI/MailerUI/product.plist b/UI/MailerUI/product.plist index 8b9ed30cb..e0130ee8b 100644 --- a/UI/MailerUI/product.plist +++ b/UI/MailerUI/product.plist @@ -181,6 +181,21 @@ pageName = "UIxMailUserRightsEditor"; actionName = "saveUserRights"; }; + addLabel = { + protectedBy = "View"; + actionClass = "UIxMailFolderActions"; + actionName = "addLabel"; + }; + removeLabel = { + protectedBy = "View"; + actionClass = "UIxMailFolderActions"; + actionName = "removeLabel"; + }; + removeAllLabels = { + protectedBy = "View"; + actionClass = "UIxMailFolderActions"; + actionName = "removeAllLabels"; + }; }; }; @@ -272,21 +287,6 @@ actionClass = "UIxMailActions"; actionName = "markMessageRead"; }; - addLabel = { - protectedBy = "View"; - actionClass = "UIxMailActions"; - actionName = "addLabel"; - }; - removeLabel = { - protectedBy = "View"; - actionClass = "UIxMailActions"; - actionName = "removeLabel"; - }; - removeAllLabels = { - protectedBy = "View"; - actionClass = "UIxMailActions"; - actionName = "removeAllLabels"; - }; }; }; diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index f9fa6973e..ac997e7ce 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -31,7 +31,7 @@ var pageContent = $("pageContent"); var deleteMessageRequestCount = 0; -var messageCheckTimer; +var refreshViewCheckTimer; /* We need to override this method since it is adapted to GCS-based folder references, which we do not use here */ @@ -1955,7 +1955,7 @@ function initMailer(event) { configureMessageListEvents(); initMailboxTree(); - initMessageCheckTimer(); + initRefreshViewCheckTimer(); Event.observe(document, "keydown", onDocumentKeydown); @@ -1975,23 +1975,27 @@ function initMailer(event) { Event.observe(window, "resize", onWindowResize); } -function initMessageCheckTimer() { - var messageCheck = UserDefaults["SOGoMailMessageCheck"]; - if (messageCheck && messageCheck != "manually") { +function initRefreshViewCheckTimer() { + // TEMPORARY : to be erase + var refreshViewCheck = UserDefaults["SOGoMailMessageCheck"]; + if (refreshViewCheck == null) + refreshViewCheck = UserDefaults["SOGoRefreshViewCheck"]; + + if (refreshViewCheck && refreshViewCheck != "manually") { var interval; - if (messageCheck == "once_per_hour") + if (refreshViewCheck == "once_per_hour") interval = 3600; - else if (messageCheck == "every_minute") + else if (refreshViewCheck == "every_minute") interval = 60; else { - interval = parseInt(messageCheck.substr(6)) * 60; + interval = parseInt(refreshViewCheck.substr(6)) * 60; } - messageCheckTimer = window.setInterval(onMessageCheckCallback, - interval * 1000); + refreshViewCheckTimer = window.setInterval(onRefreshViewCheckCallback, + interval * 1000); } } -function onMessageCheckCallback(event) { +function onRefreshViewCheckCallback(event) { refreshMailbox(); } @@ -2447,8 +2451,8 @@ function onMenuLabelNone() { messages.push(Mailer.currentMessages[Mailer.currentMailbox]); else if (Object.isArray(document.menuTarget)) // Menu called from multiple selection in messages list view - $(document.menuTarget).collect(function(rowID) { - messages.push(rowID.substr(4)); + $(document.menuTarget).collect(function(row) { + messages.push(row.substr(4)); }); else // Menu called from one selection in messages list view @@ -2463,40 +2467,51 @@ function onMenuLabelNone() { } function onMenuLabelFlag() { - var messages = new Hash(); - var flag = this.readAttribute("data-name"); - - if (document.menuTarget.tagName == "DIV") - // Menu called from message content view - messages.set(Mailer.currentMessages[Mailer.currentMailbox], - $('row_' + Mailer.currentMessages[Mailer.currentMailbox]).getAttribute("labels")); - else if (Object.isArray(document.menuTarget)) - // Menu called from multiple selection in messages list view - $(document.menuTarget).collect(function(rowID) { - var row = $(rowID); - if (row) - messages.set(rowID.substr(4), - row.getAttribute("labels")); - }); - else - // Menu called from one selection in messages list view - messages.set(document.menuTarget.getAttribute("id").substr(4), - document.menuTarget.getAttribute("labels")); - var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/"; - messages.keys().each(function(id) { - var flags = messages.get(id).split(" "); - var operation = "add"; + var operation = "add"; + var msgUIDs; + var msgLabels; + if (!Object.isArray(document.menuTarget)) { + msgUIDs = Mailer.currentMessages[Mailer.currentMailbox]; + if (document.menuTarget.tagName == "DIV") + // Menu called from message content view + msgLabels = $('row_' + msgLabels).getAttribute("labels"); + else + // Menu called from one selection in messages list view + msgLabels = document.menuTarget.getAttribute("labels"); + + var flags = msgLabels.split(" "); if (flags.indexOf(flag) > -1) operation = "remove"; + } + else { + // Menu called from multiple selection in messages list view + var rows = $(document.menuTarget); + var blockedOperation = false; + for (var i = 0; i < rows.length; i++) { + var row = $(rows[i]); + if (row) { + msgUIDs.push(rows[i].substr(4)); + msgLabels = row.getAttribute("labels"); + + var flags = msgLabels.split(" "); + if (flags.indexOf(flag) > -1 && !blockedOperation) { + operation = "remove"; + } + else { + blockedOperation = true; + operation = "add"; + } + } + } + } - triggerAjaxRequest(url + id + "/" + operation + "Label?flag=" + flag.asCSSIdentifier(), - messageFlagCallback, - { mailbox: Mailer.currentMailbox, msg: id, - label: operation + flag } ); - }); + var callbackData = { mailbox: Mailer.currentMailbox, operation: operation, flag: flag }; + var content = {flags: flag.asCSSIdentifier(), msgUIDs: msgUIDs, operation: operation}; + content = Object.toJSON(content); + triggerAjaxRequest(url + operation + "Label", messageFlagCallback, callbackData, content); } function onMenuToggleMessageFlag(event) { From 3b65eaea0b177374abe7389a42935ccd08629910 Mon Sep 17 00:00:00 2001 From: Alexandre Cloutier Date: Tue, 2 Sep 2014 13:42:04 -0400 Subject: [PATCH 2/5] Tagging labels with 1 AJAX request --- UI/MailerUI/UIxMailFolderActions.m | 74 +++++++--------- UI/MailerUI/product.plist | 9 +- UI/WebServerResources/MailerUI.js | 132 +++++++++++++++++------------ 3 files changed, 110 insertions(+), 105 deletions(-) diff --git a/UI/MailerUI/UIxMailFolderActions.m b/UI/MailerUI/UIxMailFolderActions.m index 877a0ada0..15fe69459 100644 --- a/UI/MailerUI/UIxMailFolderActions.m +++ b/UI/MailerUI/UIxMailFolderActions.m @@ -618,7 +618,7 @@ return response; } -- (WOResponse *) addLabelAction +- (WOResponse *) addOrRemoveLabelAction { WOResponse *response; WORequest *request; @@ -626,14 +626,14 @@ NSException *error; NSArray *msgUIDs, *flags; NSString *operation; - NSDictionary *content; + NSDictionary *content, *result; BOOL addOrRemove; NGImap4Client *client; request = [context request]; content = [[request contentAsString] objectFromJSONString]; - flags = [content objectForKey:@"flags"]; - msgUIDs = [content objectForKey:@"msgUIDs"]; + flags = [NSArray arrayWithObject:[content objectForKey:@"flags"]]; + msgUIDs = [NSArray arrayWithArray:[content objectForKey:@"msgUIDs"]]; operation = [content objectForKey:@"operation"]; if ([operation isEqualToString:@"add"]) @@ -643,60 +643,46 @@ co = [self clientObject]; client = [[co imap4Connection] client]; - error = [client storeFlags:flags forUIDs:msgUIDs addOrRemove:addOrRemove]; - if (error) - response = (WOResponse *) error; - else + [[co imap4Connection] selectFolder: [co imap4URL]]; + result = [client storeFlags:flags forUIDs:msgUIDs addOrRemove:addOrRemove]; + if ([[[[result objectForKey:@"RawResponse"] objectForKey:@"ResponseResult"] objectForKey:@"description"] isEqualToString:@"Completed"]) response = [self responseWith204]; - - return response; -} - -- (WOResponse *) removeLabelAction -{ - WOResponse *response; - SOGoMailObject *co; - NSException *error; - NSArray *flags; - NSString *flag; - - flag = [[[self->context request] formValueForKey: @"flag"] fromCSSIdentifier]; - co = [self clientObject]; - flags = [NSArray arrayWithObject: flag]; - - error = [co removeFlags: flags]; - if (error) - response = (WOResponse *) error; else - response = [self responseWith204]; - + response = nil; + return response; } - (WOResponse *) removeAllLabelsAction { - NSMutableArray *flags; WOResponse *response; - SOGoMailObject *co; - NSException *error; - NSDictionary *v; - - - co = [self clientObject]; - - v = [[[context activeUser] userDefaults] mailLabelsColors]; - + WORequest *request; + SOGoMailFolder *co; + NGImap4Client *client; + NSArray *msgUIDs; + NSMutableArray *flags; + NSDictionary *v, *content, *result; + + request = [context request]; + content = [[request contentAsString] objectFromJSONString]; + msgUIDs = [NSArray arrayWithArray:[content objectForKey:@"msgUIDs"]]; + // We always unconditionally remove the Mozilla tags flags = [NSMutableArray arrayWithObjects: @"$Label1", @"$Label2", @"$Label3", @"$Label4", @"$Label5", nil]; - + + co = [self clientObject]; + v = [[[context activeUser] userDefaults] mailLabelsColors]; [flags addObjectsFromArray: [v allKeys]]; - error = [co removeFlags: flags]; - if (error) - response = (WOResponse *) error; - else + client = [[co imap4Connection] client]; + [[co imap4Connection] selectFolder: [co imap4URL]]; + result = [client storeFlags:flags forUIDs:msgUIDs addOrRemove:NO]; + + if ([[[[result objectForKey:@"RawResponse"] objectForKey:@"ResponseResult"] objectForKey:@"description"] isEqualToString:@"Completed"]) response = [self responseWith204]; + else + response = nil; return response; } diff --git a/UI/MailerUI/product.plist b/UI/MailerUI/product.plist index e0130ee8b..3abdd26bf 100644 --- a/UI/MailerUI/product.plist +++ b/UI/MailerUI/product.plist @@ -181,15 +181,10 @@ pageName = "UIxMailUserRightsEditor"; actionName = "saveUserRights"; }; - addLabel = { + addOrRemoveLabel = { protectedBy = "View"; actionClass = "UIxMailFolderActions"; - actionName = "addLabel"; - }; - removeLabel = { - protectedBy = "View"; - actionClass = "UIxMailFolderActions"; - actionName = "removeLabel"; + actionName = "addOrRemoveLabel"; }; removeAllLabels = { protectedBy = "View"; diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index ac997e7ce..0a53b005d 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -879,14 +879,28 @@ function openMailbox(mailbox, reload) { * Called from SOGoDataTable.render() */ function messageListCallback(row, data, isNew) { - var currentMessage = Mailer.currentMessages[Mailer.currentMailbox]; + var currentMessages = []; + if (!Object.isArray(document.menuTarget)) { + // Menu called from one selection in message list view + currentMessages.push(Mailer.currentMessages[Mailer.currentMailbox]); + } + else { + // Menu called from multiple selection in messages list view + var rows = $(document.menuTarget); + for (var i = 0; i < rows.length; i++) { + var _row = $(rows[i]); + if (_row) { + currentMessages.push(rows[i].substr(4)); + } + } + } row.id = data['rowID']; row.writeAttribute('labels', (data['labels']?data['labels']:"")); row.className = data['rowClasses']; row.show(); // make sure the row is visible // Restore previous selection - if (data['uid'] == currentMessage) + if (currentMessages.indexOf(String(data['uid'])) != -1) row.addClassName('_selected'); if (data['Thread']) @@ -2444,40 +2458,47 @@ function onMenuToggleMessageRead(event) { } function onMenuLabelNone() { - var messages = []; + var msgUIDs = []; + var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox); - if (document.menuTarget.tagName == "DIV") - // Menu called from message content view - messages.push(Mailer.currentMessages[Mailer.currentMailbox]); - else if (Object.isArray(document.menuTarget)) + if (!Object.isArray(document.menuTarget)) { + if (document.menuTarget.tagName == "DIV") + // Menu called from message content view + msgUIDs.push(Mailer.currentMessages[Mailer.currentMailbox]); + + else + // Menu called from one selection in message list view + msgUIDs.push(document.menuTarget.getAttribute("id").substr(4)); + } + else { // Menu called from multiple selection in messages list view - $(document.menuTarget).collect(function(row) { - messages.push(row.substr(4)); - }); - else - // Menu called from one selection in messages list view - messages.push(document.menuTarget.getAttribute("id").substr(4)); + var rows = $(document.menuTarget); + for (var i = 0; i < rows.length; i++) { + var row = $(rows[i]); + if (row) { + msgUIDs.push(rows[i].substr(4)); + } + } + } - var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/"; - messages.each(function(id) { - triggerAjaxRequest(url + id + "/removeAllLabels", - messageFlagCallback, - { mailbox: Mailer.currentMailbox, msg: id, label: null } ); - }); + var callbackData = { mailbox: Mailer.currentMailbox, msgUIDs: msgUIDs }; + var content = { mailbox: Mailer.currentMailbox, msgUIDs: msgUIDs }; + content = Object.toJSON(content); + triggerAjaxRequest(url + "/removeAllLabels", messageFlagCallback, callbackData, content); } function onMenuLabelFlag() { var flag = this.readAttribute("data-name"); - var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/"; + var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox); var operation = "add"; - var msgUIDs; + var msgUIDs = []; var msgLabels; if (!Object.isArray(document.menuTarget)) { - msgUIDs = Mailer.currentMessages[Mailer.currentMailbox]; + msgUIDs.push(Mailer.currentMessages[Mailer.currentMailbox]); if (document.menuTarget.tagName == "DIV") // Menu called from message content view - msgLabels = $('row_' + msgLabels).getAttribute("labels"); + msgLabels = $('row_' + msgUIDs[0]).getAttribute("labels"); else // Menu called from one selection in messages list view msgLabels = document.menuTarget.getAttribute("labels"); @@ -2508,10 +2529,42 @@ function onMenuLabelFlag() { } } - var callbackData = { mailbox: Mailer.currentMailbox, operation: operation, flag: flag }; + var callbackData = { mailbox: Mailer.currentMailbox, operation: operation, flag: flag, msgUIDs: msgUIDs}; var content = {flags: flag.asCSSIdentifier(), msgUIDs: msgUIDs, operation: operation}; content = Object.toJSON(content); - triggerAjaxRequest(url + operation + "Label", messageFlagCallback, callbackData, content); + triggerAjaxRequest(url + "/addOrRemoveLabel", messageFlagCallback, callbackData, content); +} + +function messageFlagCallback(http) { + if (http.readyState == 4 + && isHttpStatus204(http.status)) { + var data = http.callbackData; + if (data["mailbox"] == Mailer.currentMailbox) { + var msgUIDs = data["msgUIDs"]; + for (var i = 0; i < msgUIDs.length; i++) { + Mailer.dataTable.invalidate(msgUIDs[i]); + var row = $("row_" + msgUIDs[i]); + var operation = data["operation"]; + if (operation) { + var labels = row.getAttribute("labels"); + var flags = []; + if (labels.length > 0) + flags = labels.split(" "); + if (operation == "add") + flags.push(data["flag"]); + else { + // Remove flag + var flag = data["flag"]; + var idx = flags.indexOf(flag); + flags.splice(idx, 1); + } + row.writeAttribute("labels", flags.join(" ")); + } + else + row.writeAttribute("labels", ""); + } + } + } } function onMenuToggleMessageFlag(event) { @@ -2566,35 +2619,6 @@ function folderRefreshCallback(http) { } } -function messageFlagCallback(http) { - if (http.readyState == 4 - && isHttpStatus204(http.status)) { - var data = http.callbackData; - if (data["mailbox"] == Mailer.currentMailbox) { - Mailer.dataTable.invalidate(data["msg"]); - var row = $("row_" + data["msg"]); - var operation = data["label"]; - if (operation) { - var labels = row.getAttribute("labels"); - var flags = []; - if (labels.length > 0) - flags = labels.split(" "); - if (operation.substr(0, 3) == "add") - flags.push(operation.substr(3)); - else { - // Remove flag - var flag = operation.substr(6); - var idx = flags.indexOf(flag); - flags.splice(idx, 1); - } - row.writeAttribute("labels", flags.join(" ")); - } - else - row.writeAttribute("labels", ""); - } - } -} - function onMessageListMenuPrepareVisibility() { /* This method attaches the right mailbox-menu to the generic message list menu. */ From 32476b16cc79f113be494f6bc755d47b89a2ab85 Mon Sep 17 00:00:00 2001 From: Alexandre Cloutier Date: Tue, 2 Sep 2014 14:31:46 -0400 Subject: [PATCH 3/5] applied comments and fix bug when tagging msgs already tagged --- UI/MailerUI/UIxMailFolderActions.m | 16 ++++++---------- UI/WebServerResources/MailerUI.js | 6 ++++-- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/UI/MailerUI/UIxMailFolderActions.m b/UI/MailerUI/UIxMailFolderActions.m index 15fe69459..82e9b2006 100644 --- a/UI/MailerUI/UIxMailFolderActions.m +++ b/UI/MailerUI/UIxMailFolderActions.m @@ -635,11 +635,7 @@ flags = [NSArray arrayWithObject:[content objectForKey:@"flags"]]; msgUIDs = [NSArray arrayWithArray:[content objectForKey:@"msgUIDs"]]; operation = [content objectForKey:@"operation"]; - - if ([operation isEqualToString:@"add"]) - addOrRemove = YES; - else - addOrRemove = NO; + addOrRemove = ([operation isEqualToString:@"add"]? YES: NO); co = [self clientObject]; client = [[co imap4Connection] client]; @@ -648,7 +644,7 @@ if ([[[[result objectForKey:@"RawResponse"] objectForKey:@"ResponseResult"] objectForKey:@"description"] isEqualToString:@"Completed"]) response = [self responseWith204]; else - response = nil; + response = [self responseWithStatus:500 andJSONRepresentation:result]; return response; } @@ -674,16 +670,16 @@ co = [self clientObject]; v = [[[context activeUser] userDefaults] mailLabelsColors]; [flags addObjectsFromArray: [v allKeys]]; - + client = [[co imap4Connection] client]; [[co imap4Connection] selectFolder: [co imap4URL]]; result = [client storeFlags:flags forUIDs:msgUIDs addOrRemove:NO]; - + if ([[[[result objectForKey:@"RawResponse"] objectForKey:@"ResponseResult"] objectForKey:@"description"] isEqualToString:@"Completed"]) response = [self responseWith204]; else - response = nil; - + response = [self responseWithStatus:500 andJSONRepresentation:result]; + return response; } diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index 0a53b005d..67735a16b 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -2550,8 +2550,10 @@ function messageFlagCallback(http) { var flags = []; if (labels.length > 0) flags = labels.split(" "); - if (operation == "add") - flags.push(data["flag"]); + if (operation == "add") { + if (flags.indexOf(data["flag"]) == -1) + flags.push(data["flag"]); + } else { // Remove flag var flag = data["flag"]; From 77c50e523250ccdceafa3fe1b1a3439e630a407e Mon Sep 17 00:00:00 2001 From: Alexandre Cloutier Date: Mon, 8 Sep 2014 14:11:42 -0400 Subject: [PATCH 4/5] applied comments; fix errors from merge and update NEWS file --- NEWS | 3 ++- UI/WebServerResources/MailerUI.js | 26 +++++++++++--------------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/NEWS b/NEWS index 46eb20152..a490fc467 100644 --- a/NEWS +++ b/NEWS @@ -7,7 +7,8 @@ New features Enchancements - major refactoring of the GCS component saving code (dropped OGoContentStore) - printing calendars in colors is now possible in all views; list, daily, weekly and multicolumns - - new option to print calendars events and tasks with a background color or with a border color + - new option to print calendars events and tasks with a background color or with a border color + - labels tagging only make one AJAX call for all the selected messages instead of one AJAX call per message Bug fixes - fixed crasher when subscribing users to resources (#2892) diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index 67735a16b..57f210fd7 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -31,7 +31,7 @@ var pageContent = $("pageContent"); var deleteMessageRequestCount = 0; -var refreshViewCheckTimer; +var messageCheckTimer; /* We need to override this method since it is adapted to GCS-based folder references, which we do not use here */ @@ -1969,7 +1969,7 @@ function initMailer(event) { configureMessageListEvents(); initMailboxTree(); - initRefreshViewCheckTimer(); + initMessageCheckTimer(); Event.observe(document, "keydown", onDocumentKeydown); @@ -1989,27 +1989,23 @@ function initMailer(event) { Event.observe(window, "resize", onWindowResize); } -function initRefreshViewCheckTimer() { - // TEMPORARY : to be erase - var refreshViewCheck = UserDefaults["SOGoMailMessageCheck"]; - if (refreshViewCheck == null) - refreshViewCheck = UserDefaults["SOGoRefreshViewCheck"]; - - if (refreshViewCheck && refreshViewCheck != "manually") { +function initMessageCheckTimer() { + var messageCheck = UserDefaults["SOGoMailMessageCheck"]; + if (messageCheck && messageCheck != "manually") { var interval; - if (refreshViewCheck == "once_per_hour") + if (messageCheck == "once_per_hour") interval = 3600; - else if (refreshViewCheck == "every_minute") + else if (messageCheck == "every_minute") interval = 60; else { - interval = parseInt(refreshViewCheck.substr(6)) * 60; + interval = parseInt(messageCheck.substr(6)) * 60; } - refreshViewCheckTimer = window.setInterval(onRefreshViewCheckCallback, - interval * 1000); + messageCheckTimer = window.setInterval(onMessageCheckCallback, + interval * 1000); } } -function onRefreshViewCheckCallback(event) { +function onMessageCheckCallback(event) { refreshMailbox(); } From 0bfaceb398e701379efa4be935d5c8d6ebd69313 Mon Sep 17 00:00:00 2001 From: Alexandre Cloutier Date: Tue, 9 Sep 2014 12:51:59 -0400 Subject: [PATCH 5/5] applied comments --- UI/MailerUI/UIxMailFolderActions.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/UI/MailerUI/UIxMailFolderActions.m b/UI/MailerUI/UIxMailFolderActions.m index 82e9b2006..91312d583 100644 --- a/UI/MailerUI/UIxMailFolderActions.m +++ b/UI/MailerUI/UIxMailFolderActions.m @@ -641,7 +641,7 @@ client = [[co imap4Connection] client]; [[co imap4Connection] selectFolder: [co imap4URL]]; result = [client storeFlags:flags forUIDs:msgUIDs addOrRemove:addOrRemove]; - if ([[[[result objectForKey:@"RawResponse"] objectForKey:@"ResponseResult"] objectForKey:@"description"] isEqualToString:@"Completed"]) + if ([[result valueForKey: @"result"] boolValue]) response = [self responseWith204]; else response = [self responseWithStatus:500 andJSONRepresentation:result]; @@ -675,7 +675,7 @@ [[co imap4Connection] selectFolder: [co imap4URL]]; result = [client storeFlags:flags forUIDs:msgUIDs addOrRemove:NO]; - if ([[[[result objectForKey:@"RawResponse"] objectForKey:@"ResponseResult"] objectForKey:@"description"] isEqualToString:@"Completed"]) + if ([[result valueForKey: @"result"] boolValue]) response = [self responseWith204]; else response = [self responseWithStatus:500 andJSONRepresentation:result];