diff --git a/Source/CTBareMessage.h b/Source/CTBareMessage.h index 528ea93..4c303b8 100644 --- a/Source/CTBareMessage.h +++ b/Source/CTBareMessage.h @@ -5,12 +5,12 @@ //TODO Document me @interface CTBareMessage : NSObject { NSString *mUid; - NSUInteger mFlags; + unsigned int mFlags; } @property(retain) NSString *uid; -@property NSUInteger flags; +@property unsigned int flags; - (id)init; -- (NSUInteger)hash; +- (unsigned int)hash; - (BOOL)isEqual:(id)anObject; @end diff --git a/Source/CTCoreFolder.h b/Source/CTCoreFolder.h index 12c2c22..6189297 100644 --- a/Source/CTCoreFolder.h +++ b/Source/CTCoreFolder.h @@ -141,17 +141,25 @@ - (void)unsubscribe; /*! - @abstract Returns an NSDictionary of message flags, every flag is either marked as CTFlagSet or CTFlagNotSet. Here is a list of message flags: CTFlagNew, CTFlagSeen, CTFlagFlagged, CTFlagDeleted, CTFlagAnswered, CTFlagForwarded. Those are the keys you should use on the dictionary that is returned. + @abstract Returns the message flags. You must AND/OR using the defines constants. + Here is a list of message flags: + CTFlagNew, CTFlagSeen, CTFlagFlagged, CTFlagDeleted, + CTFlagAnswered, CTFlagForwarded. */ -- (NSDictionary *)flagsForMessage:(CTCoreMessage *)msg; +- (unsigned int)flagsForMessage:(CTCoreMessage *)msg; /*! - @abstract Sets the message's flags on the server, take a look at the documentation for the flags: for more information. + @abstract Sets the message's flags on the server, take a look at the + documentation for flagsForMessage: */ -- (void)setFlags:(NSDictionary *)flags forMessage:(CTCoreMessage *)msg; +- (void)setFlags:(unsigned int)flags forMessage:(CTCoreMessage *)msg; /*! - @astract Deletes all messages contained in the folder that are marked for deletion. Deleting messages in IMAP is a little strange, first you need to set the message flag CTFlagDeleted to CTFlagSet, and then when you call expunge on the folder the message is contained in, it will be deleted. + @astract Deletes all messages contained in the folder that are marked for + deletion. Deleting messages in IMAP is a little strange, first + you need to set the message flag CTFlagDeleted to CTFlagSet, and + then when you call expunge on the folder the message is contained + in, it will be deleted. */ - (void)expunge; diff --git a/Source/CTCoreFolder.m b/Source/CTCoreFolder.m index 3bda785..77f1836 100644 --- a/Source/CTCoreFolder.m +++ b/Source/CTCoreFolder.m @@ -6,7 +6,6 @@ #import "CTBareMessage.h" @interface CTCoreFolder (Private) -- (NSDictionary *)_createFlagDictionary:(struct mail_flags *)flagStruct; @end @implementation CTCoreFolder @@ -552,7 +551,7 @@ By not including these methods, CTCoreMessage doesn't depend on CTCoreFolder anymore. CTCoreFolder already depends on CTCoreMessage so we aren't adding any dependencies here. */ -- (NSDictionary *)flagsForMessage:(CTCoreMessage *)msg { +- (unsigned int)flagsForMessage:(CTCoreMessage *)msg { int err; struct mail_flags *flagStruct; err = mailmessage_get_flags([msg messageStruct], &flagStruct); @@ -563,28 +562,14 @@ userInfo:nil]; [exception raise]; } - return [self _createFlagDictionary:flagStruct]; + return flagStruct->fl_flags; } -- (void)setFlags:(NSDictionary *)flags forMessage:(CTCoreMessage *)msg { +- (void)setFlags:(unsigned int)flags forMessage:(CTCoreMessage *)msg { int err; - uint32_t msgFlags = 0; - - if ([[flags objectForKey:CTFlagNew] isEqual:CTFlagSet]) - msgFlags = msgFlags | MAIL_FLAG_NEW; - if ([[flags objectForKey:CTFlagSeen] isEqual:CTFlagSet]) - msgFlags = msgFlags | MAIL_FLAG_SEEN; - if ([[flags objectForKey:CTFlagFlagged] isEqual:CTFlagSet]) - msgFlags = msgFlags | MAIL_FLAG_FLAGGED; - if ([[flags objectForKey:CTFlagDeleted] isEqual:CTFlagSet]) - msgFlags = msgFlags | MAIL_FLAG_DELETED; - if ([[flags objectForKey:CTFlagAnswered] isEqual:CTFlagSet]) - msgFlags = msgFlags | MAIL_FLAG_ANSWERED; - if ([[flags objectForKey:CTFlagForwarded] isEqual:CTFlagSet]) - msgFlags = msgFlags | MAIL_FLAG_FORWARDED; - - [msg messageStruct]->msg_flags->fl_flags=msgFlags; + + [msg messageStruct]->msg_flags->fl_flags=flags; err = mailmessage_check([msg messageStruct]); if (err != MAILIMAP_NO_ERROR) { NSException *exception = [NSException @@ -667,33 +652,6 @@ return data->imap_session; } -- (NSDictionary *)_createFlagDictionary:(struct mail_flags *)flagStruct { - NSMutableDictionary *theFlags = [NSMutableDictionary dictionaryWithObjectsAndKeys:CTFlagNotSet,CTFlagNew, - CTFlagNotSet,CTFlagSeen,CTFlagNotSet,CTFlagFlagged,CTFlagNotSet,CTFlagDeleted,CTFlagNotSet,CTFlagAnswered, - CTFlagNotSet,CTFlagForwarded,CTFlagNotSet,CTFlagCancelled,nil]; - - if (flagStruct == NULL) - return theFlags; - - uint32_t msgFlags = flagStruct->fl_flags; - if (msgFlags & MAIL_FLAG_NEW) - [theFlags setObject:CTFlagSet forKey:CTFlagNew]; - if (msgFlags & MAIL_FLAG_SEEN) - [theFlags setObject:CTFlagSet forKey:CTFlagSeen]; - if (msgFlags & MAIL_FLAG_FLAGGED) - [theFlags setObject:CTFlagSet forKey:CTFlagFlagged]; - if (msgFlags & MAIL_FLAG_DELETED) - [theFlags setObject:CTFlagSet forKey:CTFlagDeleted]; - if (msgFlags & MAIL_FLAG_ANSWERED) - [theFlags setObject:CTFlagSet forKey:CTFlagAnswered]; - if (msgFlags & MAIL_FLAG_FORWARDED) - [theFlags setObject:CTFlagSet forKey:CTFlagForwarded]; - - //TODO Implement advanced flags - return theFlags; -} - - /* From Libetpan source */ int uid_list_to_env_list(clist * fetch_result, struct mailmessage_list ** result, mailsession * session, mailmessage_driver * driver) { diff --git a/Source/MailCoreTypes.h b/Source/MailCoreTypes.h index 1aa3a2c..a5be48c 100644 --- a/Source/MailCoreTypes.h +++ b/Source/MailCoreTypes.h @@ -2,17 +2,16 @@ /* = List of Message Flags = */ /* ========================= */ -#define CTFlagNew @"NEW" -#define CTFlagSeen @"SEEN" -#define CTFlagFlagged @"FLAGGED" -#define CTFlagDeleted @"DELETED" -#define CTFlagAnswered @"ANSWERED" -#define CTFlagForwarded @"FORWARDED" -#define CTFlagCancelled @"CANCELLED" -#define CTFlagExtensions @"EXTENSIONS" +//TODO Turn these into extern's, not defines + +#define CTFlagNew MAIL_FLAG_NEW +#define CTFlagSeen MAIL_FLAG_SEEN +#define CTFlagFlagged MAIL_FLAG_FLAGGED +#define CTFlagDeleted MAIL_FLAG_DELETED +#define CTFlagAnswered MAIL_FLAG_ANSWERED +#define CTFlagForwarded MAIL_FLAG_FORWARDED +#define CTFlagCancelled MAIL_FLAG_CANCELLED -#define CTFlagSet @"SET" -#define CTFlagNotSet @"NOT_SET" /* =========================== */ /* = List of Exception Types = */