From ee3276f01d2b2ed1ea5134e426888130558368ab Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Mon, 8 Feb 2016 15:36:01 -0500 Subject: [PATCH] (feat) added Junk handling feature from v2 --- NEWS | 2 +- SoObjects/Mailer/SOGoMailFolder.m | 4 +++- UI/MailerUI/English.lproj/Localizable.strings | 6 ++++- .../MailerUI/UIxMailFolderTemplate.wox | 4 ++++ UI/Templates/MailerUI/UIxMailMainFrame.wox | 5 ++++ .../js/Mailer/Account.service.js | 3 +-- .../js/Mailer/Mailbox.service.js | 14 +++++++++++ .../js/Mailer/MailboxController.js | 23 +++++++++++++++++++ .../js/Mailer/MailboxesController.js | 2 ++ 9 files changed, 58 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index 533889e6b..b19f0cb2b 100644 --- a/NEWS +++ b/NEWS @@ -2,7 +2,7 @@ ------------------ Enhancements - - + - [web] added Junk handling feature from v2 Bug fixes - [web] handle birthday dates before 1970 diff --git a/SoObjects/Mailer/SOGoMailFolder.m b/SoObjects/Mailer/SOGoMailFolder.m index 680d360d3..b9497d044 100644 --- a/SoObjects/Mailer/SOGoMailFolder.m +++ b/SoObjects/Mailer/SOGoMailFolder.m @@ -857,7 +857,9 @@ _compareFetchResultsByMODSEQ (id entry1, id entry2, void *data) body = [[[NGMimeMultipartBody alloc] initWithPart: messageToSend] autorelease]; } - mailObject = [self lookupName: [uids objectAtIndex: i] inContext: context acquire: NO]; + mailObject = [self lookupName: [NSString stringWithFormat: @"%@", [uids objectAtIndex: i]] + inContext: context + acquire: NO]; // We skip emails that might have disappeared before we were able // to perform the action diff --git a/UI/MailerUI/English.lproj/Localizable.strings b/UI/MailerUI/English.lproj/Localizable.strings index d8b4ed296..56f3070c7 100644 --- a/UI/MailerUI/English.lproj/Localizable.strings +++ b/UI/MailerUI/English.lproj/Localizable.strings @@ -276,6 +276,10 @@ "Set as Drafts" = "Set as Drafts"; "Set as Sent" = "Set as Sent"; "Set as Trash" = "Set as Trash"; + +/* Set the folder as the one holding Junk mails */ +"Set as Junk" = "Set as Junk"; + "Sort" = "Sort"; "Descending Order" = "Descending Order"; "Back" = "Back"; @@ -291,4 +295,4 @@ "More search options" = "More search options"; "Your email has been saved" = "Your email has been saved"; "Your email has been sent" = "Your email has been sent"; -"Folder compacted" = "Folder compacted"; \ No newline at end of file +"Folder compacted" = "Folder compacted"; diff --git a/UI/Templates/MailerUI/UIxMailFolderTemplate.wox b/UI/Templates/MailerUI/UIxMailFolderTemplate.wox index cfdc9ca19..6465668c2 100644 --- a/UI/Templates/MailerUI/UIxMailFolderTemplate.wox +++ b/UI/Templates/MailerUI/UIxMailFolderTemplate.wox @@ -155,6 +155,10 @@ delete + + thumb_down + thumb_up + more_vert diff --git a/UI/Templates/MailerUI/UIxMailMainFrame.wox b/UI/Templates/MailerUI/UIxMailMainFrame.wox index b1e2a7055..7325a31db 100644 --- a/UI/Templates/MailerUI/UIxMailMainFrame.wox +++ b/UI/Templates/MailerUI/UIxMailMainFrame.wox @@ -172,6 +172,11 @@ + + + + + diff --git a/UI/WebServerResources/js/Mailer/Account.service.js b/UI/WebServerResources/js/Mailer/Account.service.js index cc3c8f8c4..ffde913cb 100644 --- a/UI/WebServerResources/js/Mailer/Account.service.js +++ b/UI/WebServerResources/js/Mailer/Account.service.js @@ -195,8 +195,7 @@ }; mailbox = _find(this.$mailboxes); - console.debug(mailbox); - console.debug(this.specialMailboxes); + return mailbox; }; /** diff --git a/UI/WebServerResources/js/Mailer/Mailbox.service.js b/UI/WebServerResources/js/Mailer/Mailbox.service.js index f58f68eb2..9896d9092 100644 --- a/UI/WebServerResources/js/Mailer/Mailbox.service.js +++ b/UI/WebServerResources/js/Mailer/Mailbox.service.js @@ -576,6 +576,20 @@ }); }; + /** + * @function $markOrUnMarkMessagesAsJunk + * @memberof Mailbox.prototype + * @desc Mark messages as junk/not junk + * @return a promise of the HTTP operation + */ + Mailbox.prototype.$markOrUnMarkMessagesAsJunk = function(messages) { + var _this = this, uids; + var method = (this.type == 'junk' ? 'markMessagesAsNotJunk' : 'markMessagesAsJunk'); + uids = _.pluck(messages, 'uid'); + + return Mailbox.$$resource.post(this.id, method, {uids: uids}); + }; + /** * @function $copyMessages * @memberof Mailbox.prototype diff --git a/UI/WebServerResources/js/Mailer/MailboxController.js b/UI/WebServerResources/js/Mailer/MailboxController.js index e24166586..7688bfe99 100644 --- a/UI/WebServerResources/js/Mailer/MailboxController.js +++ b/UI/WebServerResources/js/Mailer/MailboxController.js @@ -23,6 +23,7 @@ vm.toggleMessageSelection = toggleMessageSelection; vm.unselectMessages = unselectMessages; vm.confirmDeleteSelectedMessages = confirmDeleteSelectedMessages; + vm.markOrUnMarkMessagesAsJunk = markOrUnMarkMessagesAsJunk; vm.copySelectedMessages = copySelectedMessages; vm.moveSelectedMessages = moveSelectedMessages; vm.saveSelectedMessages = saveSelectedMessages; @@ -69,6 +70,28 @@ }); } + function markOrUnMarkMessagesAsJunk() { + var moveSelectedMessage = false; + var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { + if (message.selected && + message.uid == vm.selectedFolder.selectedMessage) + moveSelectedMessage = true; + return message.selected; + }); + + vm.selectedFolder.$markOrUnMarkMessagesAsJunk(selectedMessages).then(function() { + var folder = '/' + vm.account.id + '/folderINBOX'; + + if (vm.selectedFolder.type != 'junk') { + folder = '/' + vm.account.$getMailboxByType('junk').id; + } + + vm.selectedFolder.$moveMessages(selectedMessages, folder).then(function(index) { + unselectMessage(moveSelectedMessage, index); + }); + }); + } + function unselectMessage(message, index) { // Unselect current message and cleverly load the next message var nextMessage, previousMessage, nextIndex = index; diff --git a/UI/WebServerResources/js/Mailer/MailboxesController.js b/UI/WebServerResources/js/Mailer/MailboxesController.js index b1049540a..ea0108f4f 100644 --- a/UI/WebServerResources/js/Mailer/MailboxesController.js +++ b/UI/WebServerResources/js/Mailer/MailboxesController.js @@ -301,6 +301,8 @@ return {name: l('SentFolderName'), icon: 'send'}; else if (folder.type == 'trash') return {name: l('TrashFolderName'), icon: 'delete'}; + else if (folder.type == 'junk') + return {name: l('JunkFolderName'), icon: 'thumb_down'}; else if (folder.type == 'additional') return {name: folder.name, icon: 'folder_shared'};