From 4b719cc57c1d14be95924ef9321450dad5c0ff1f Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 24 Feb 2011 20:14:17 +0000 Subject: [PATCH] Monotone-Parent: d5f984ad83aebee05e5bda110e339c4b94d822f3 Monotone-Revision: c2917386cf94357b49f5e5a5a2546c5d884cd132 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-02-24T20:14:17 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 5 +++++ SoObjects/Mailer/SOGoMailObject.h | 1 + SoObjects/Mailer/SOGoMailObject.m | 26 +++++++++++++++++++------- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index b8a8cba3b..fd1db4860 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2011-02-24 Wolfgang Sourdeau + + * SoObjects/Mailer/SOGoMailObject.m (_hasFlag:): put the flags in + a cache to avoid multiple queries. + 2011-02-24 Francis Lachapelle * SoObjects/Appointments/SOGoAppointmentFolder.m diff --git a/SoObjects/Mailer/SOGoMailObject.h b/SoObjects/Mailer/SOGoMailObject.h index 148d8cf85..e93caa988 100644 --- a/SoObjects/Mailer/SOGoMailObject.h +++ b/SoObjects/Mailer/SOGoMailObject.h @@ -53,6 +53,7 @@ id coreInfos; id headerPart; NSDictionary *headers; + NSArray *flagsCache; } /* message */ diff --git a/SoObjects/Mailer/SOGoMailObject.m b/SoObjects/Mailer/SOGoMailObject.m index 20337d8a4..51ad64112 100644 --- a/SoObjects/Mailer/SOGoMailObject.m +++ b/SoObjects/Mailer/SOGoMailObject.m @@ -96,6 +96,7 @@ static BOOL debugSoParts = NO; [headers release]; [headerPart release]; [coreInfos release]; + [flagsCache release]; [super dealloc]; } @@ -804,13 +805,21 @@ static BOOL debugSoParts = NO; /* flags */ +- (void) _clearFlagsCache +{ + [flagsCache release]; + flagsCache = nil; +} + - (NSException *) addFlags: (id) _flags { + [self _clearFlagsCache]; return [[self imap4Connection] addFlags:_flags toURL: [self imap4URL]]; } - (NSException *) removeFlags: (id) _flags { + [self _clearFlagsCache]; return [[self imap4Connection] removeFlags:_flags toURL: [self imap4URL]]; } @@ -1277,16 +1286,19 @@ static BOOL debugSoParts = NO; { BOOL rc; NSDictionary *values; - NSArray *flags; - rc = NO; - values = [self _fetchProperty: @"FLAGS"]; - - if (values) + if (!flagsCache) { - flags = [values objectForKey: @"flags"]; - rc = [flags containsObject: flag]; + values = [self _fetchProperty: @"FLAGS"]; + if (values) + { + flagsCache = [values objectForKey: @"flags"]; + [flagsCache retain]; + } } + + rc = [flagsCache containsObject: flag]; + return rc; }