From 0c7bdac0915e7d451fee606ec1a7a630f23bae21 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 31 Jul 2015 14:31:38 -0400 Subject: [PATCH] (fix) refactored code and we now return the unseenCount when fetching uids --- SoObjects/Mailer/SOGoMailFolder.h | 1 + SoObjects/Mailer/SOGoMailFolder.m | 27 +++++++++++++++++ UI/MailerUI/UIxMailFolderActions.m | 4 +-- UI/MailerUI/UIxMailListActions.m | 4 +++ UI/MailerUI/UIxMailMainFrame.m | 30 +++---------------- .../js/Mailer/MailboxesController.js | 4 +-- 6 files changed, 40 insertions(+), 30 deletions(-) diff --git a/SoObjects/Mailer/SOGoMailFolder.h b/SoObjects/Mailer/SOGoMailFolder.h index 84e51d9ca..78cf6099e 100644 --- a/SoObjects/Mailer/SOGoMailFolder.h +++ b/SoObjects/Mailer/SOGoMailFolder.h @@ -56,6 +56,7 @@ - (NSArray *) toManyRelationshipKeys; - (NSDictionary *) statusForFlags: (NSArray *) flags; +- (unsigned int) unseenCount; - (NSException *) deleteUIDs: (NSArray *) uids useTrashFolder: (BOOL *) withTrash diff --git a/SoObjects/Mailer/SOGoMailFolder.m b/SoObjects/Mailer/SOGoMailFolder.m index c65c6c43c..e37d10c39 100644 --- a/SoObjects/Mailer/SOGoMailFolder.m +++ b/SoObjects/Mailer/SOGoMailFolder.m @@ -801,6 +801,33 @@ _compareFetchResultsByMODSEQ (id entry1, id entry2, void *data) return status; } +- (unsigned int) unseenCount +{ + NSDictionary *imapResult; + NGImap4Connection *connection; + NGImap4Client *client; + EOQualifier *searchQualifier; + NSArray *searchResult; + unsigned int unseen; + + connection = [self imap4Connection]; + client = [connection client]; + + if ([connection selectFolder: [self imap4URL]]) + { + searchQualifier + = [EOQualifier qualifierWithQualifierFormat: @"flags = %@ AND not flags = %@", + @"unseen", @"deleted"]; + imapResult = [client searchWithQualifier: searchQualifier]; + searchResult = [[imapResult objectForKey: @"RawResponse"] objectForKey: @"search"]; + unseen = [searchResult count]; + } + else + unseen = 0; + + return unseen; +} + - (NSArray *) fetchUIDsMatchingQualifier: (id) _q sortOrdering: (id) _so { diff --git a/UI/MailerUI/UIxMailFolderActions.m b/UI/MailerUI/UIxMailFolderActions.m index 6184931f0..afe838314 100644 --- a/UI/MailerUI/UIxMailFolderActions.m +++ b/UI/MailerUI/UIxMailFolderActions.m @@ -410,7 +410,7 @@ - (WOResponse *) copyMessagesAction { - NSString *value, *destinationFolder; + NSString *destinationFolder; SOGoMailAccount *account; WOResponse *response; SOGoMailFolder *co; @@ -450,7 +450,7 @@ NSString *currentMailbox, *currentAccount, *keyForMsgUIDs; NSMutableDictionary *moduleSettings, *threadsCollapsed; NSMutableArray *mailboxThreadsCollapsed; - NSString *value, *destinationFolder; + NSString *destinationFolder; SOGoUserSettings *us; WOResponse *response; NSDictionary *data; diff --git a/UI/MailerUI/UIxMailListActions.m b/UI/MailerUI/UIxMailListActions.m index 0267f81fb..555fa969e 100644 --- a/UI/MailerUI/UIxMailListActions.m +++ b/UI/MailerUI/UIxMailListActions.m @@ -666,6 +666,9 @@ [data setObject: uids forKey: @"uids"]; [data setObject: [NSNumber numberWithBool: sortByThread] forKey: @"threaded"]; + // We get the unseen count + [data setObject: [NSNumber numberWithUnsignedInt: [folder unseenCount]] forKey: @"unseenCount"]; + // We also return the inbox quota account = [folder mailAccountFolder]; quota = [account getInboxQuota]; @@ -699,6 +702,7 @@ * @apiParam {String} [filters.negative] Reverse the condition when true. Defaults to false. * * @apiSuccess (Success 200) {Number} threaded 1 if threading is enabled for the user. + * @apiSuccess (Success 200) {Number} unseenCount Number of unread messages * @apiSuccess (Success 200) {Number[]} uids List of uids matching the filters, in the requested order. * @apiSuccess (Success 200) {String[]} headers The first entry are the fields names. * @apiSuccess (Success 200) {Object[]} headers.To Recipients diff --git a/UI/MailerUI/UIxMailMainFrame.m b/UI/MailerUI/UIxMailMainFrame.m index 7bd027606..bea9e1ca9 100644 --- a/UI/MailerUI/UIxMailMainFrame.m +++ b/UI/MailerUI/UIxMailMainFrame.m @@ -33,9 +33,6 @@ #import #import #import -#import -#import -#import #import #import @@ -626,16 +623,12 @@ - (unsigned int) _unseenCountForFolder: (NSString *) theFolder { - EOQualifier *searchQualifier; - NSArray *searchResult, *pathComponents; - NSDictionary *imapResult; - NGImap4Connection *connection; - NGImap4Client *client; - unsigned int unseen; - + NSArray *pathComponents; SOGoMailAccount *account; SOGoMailFolder *folder; + unsigned int unseen; + pathComponents = [theFolder pathComponents]; account = [[self clientObject] lookupName: [pathComponents objectAtIndex: 0] inContext: context @@ -645,22 +638,7 @@ inContext: context acquire: YES]; - connection = [folder imap4Connection]; - client = [connection client]; - - if ([connection selectFolder: [folder imap4URL]]) - { - searchQualifier - = [EOQualifier qualifierWithQualifierFormat: @"flags = %@ AND not flags = %@", - @"unseen", @"deleted"]; - imapResult = [client searchWithQualifier: searchQualifier]; - searchResult = [[imapResult objectForKey: @"RawResponse"] objectForKey: @"search"]; - unseen = [searchResult count]; - } - else - unseen = 0; - - return unseen; + return [folder unseenCount]; } - (WOResponse *) unseenCountAction diff --git a/UI/WebServerResources/js/Mailer/MailboxesController.js b/UI/WebServerResources/js/Mailer/MailboxesController.js index 4603aec64..72e499993 100644 --- a/UI/WebServerResources/js/Mailer/MailboxesController.js +++ b/UI/WebServerResources/js/Mailer/MailboxesController.js @@ -232,7 +232,7 @@ if (!_.includes(unseenCountFolders, account.id + '/folderINBOX')) unseenCountFolders.push(account.id + '/folderINBOX'); - _.forEach(account.$mailboxes, function(mailbox) { + _.forEach(account.$$flattenMailboxes, function(mailbox) { if (angular.isDefined(mailbox.unseenCount) && !_.includes(unseenCountFolders, mailbox.id)) unseenCountFolders.push(mailbox.id); @@ -241,7 +241,7 @@ Account.$$resource.post('', 'unseenCount', {mailboxes: unseenCountFolders}).then(function(data) { _.forEach(vm.accounts, function(account) { - _.forEach(account.$mailboxes, function(mailbox) { + _.forEach(account.$$flattenMailboxes, function(mailbox) { if (data[mailbox.id]) mailbox.unseenCount = data[mailbox.id]; });