From d4abf6cf9522a825943cd8d78f4e5bd6713e7bca Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 7 Feb 2011 17:49:47 +0000 Subject: [PATCH] Monotone-Parent: 8dc4df621d7d3e7b400854df5f4d831bf8e6a62e Monotone-Revision: f857a2607e52df575d9685a74699fbd77a616dab Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-02-07T17:49:47 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 7 ++++ OpenChange/GNUmakefile | 1 + OpenChange/MAPIStoreMailMessageTable.m | 40 ++++++++++++++++++- OpenChange/SOGoMailObject+MAPIStore.h | 38 ++++++++++++++++++ OpenChange/SOGoMailObject+MAPIStore.m | 53 ++++++++++++++++++++++++++ 5 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 OpenChange/SOGoMailObject+MAPIStore.h create mode 100644 OpenChange/SOGoMailObject+MAPIStore.m diff --git a/ChangeLog b/ChangeLog index 292358045..8fe215897 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2011-02-07 Wolfgang Sourdeau + * OpenChange/MAPIStoreMailMessageTable.m + (-getChildProperty:forKey:withTag:): handle PR_FLAG_STATUS and + PR_FOLLOWUP_ICON based on the "Flagged" message flag. + + * OpenChange/SOGoMailObject+MAPIStore.m: new category module for + handling IMAP metadata on messages. + * OpenChange/MAPIStoreDraftsContext.m (-createMessageOfClass:inFolderAtURL:): implemented method to avoid a crash when "saving" drafts messages in Outlook. diff --git a/OpenChange/GNUmakefile b/OpenChange/GNUmakefile index df96e7243..e0dd76fb1 100644 --- a/OpenChange/GNUmakefile +++ b/OpenChange/GNUmakefile @@ -72,6 +72,7 @@ $(SOGOBACKEND)_OBJC_FILES += \ SOGoContactGCSEntry+MAPIStore.m \ SOGoDraftObject+MAPIStore.m \ SOGoGCSFolder+MAPIStore.m \ + SOGoMailObject+MAPIStore.m \ SOGoTaskObject+MAPIStore.m \ \ SOGoMAPIFSFolder.m \ diff --git a/OpenChange/MAPIStoreMailMessageTable.m b/OpenChange/MAPIStoreMailMessageTable.m index 33bf7035a..14149b5e0 100644 --- a/OpenChange/MAPIStoreMailMessageTable.m +++ b/OpenChange/MAPIStoreMailMessageTable.m @@ -187,10 +187,46 @@ static EOQualifier *nonDeletedQualifier = nil; } break; - case PR_FLAG_STATUS: // TODO + case PR_FLAG_STATUS: + { + NSDictionary *coreInfos; + NSArray *flags; + unsigned int v; + + child = [self lookupChild: childKey]; + coreInfos = [child fetchCoreInfos]; + + flags = [coreInfos objectForKey: @"flags"]; + if ([flags containsObject: @"flagged"]) + v = 2; + else + v = 0; + + *data = MAPILongValue (memCtx, v); + } + break; + + case PR_FOLLOWUP_ICON: + { + NSDictionary *coreInfos; + NSArray *flags; + unsigned int v; + + child = [self lookupChild: childKey]; + coreInfos = [child fetchCoreInfos]; + + flags = [coreInfos objectForKey: @"flags"]; + if ([flags containsObject: @"flagged"]) + v = 6; + else + v = 0; + + *data = MAPILongValue (memCtx, v); + } + break; + case PR_SENSITIVITY: // TODO case PR_ORIGINAL_SENSITIVITY: // TODO - case PR_FOLLOWUP_ICON: // TODO *data = MAPILongValue (memCtx, 0); break; diff --git a/OpenChange/SOGoMailObject+MAPIStore.h b/OpenChange/SOGoMailObject+MAPIStore.h new file mode 100644 index 000000000..f4ee033cf --- /dev/null +++ b/OpenChange/SOGoMailObject+MAPIStore.h @@ -0,0 +1,38 @@ +/* SOGoMailObject+MAPIStore.h - this file is part of SOGo + * + * Copyright (C) 2011 Inverse inc + * + * Author: Wolfgang Sourdeau + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef SOGOMAILOBJECT_MAPISTORE_H +#define SOGOMAILOBJECT_MAPISTORE_H + +#import + +@class NSDictionary; + +@interface SOGoMailObject (MAPIStoreMessage) + +- (void) setMAPIProperties: (NSDictionary *) properties; + +- (void) MAPISave; + +@end + +#endif /* SOGOMAILOBJECT_MAPISTORE_H */ diff --git a/OpenChange/SOGoMailObject+MAPIStore.m b/OpenChange/SOGoMailObject+MAPIStore.m new file mode 100644 index 000000000..2d68656ef --- /dev/null +++ b/OpenChange/SOGoMailObject+MAPIStore.m @@ -0,0 +1,53 @@ +/* SOGoMailObject+MAPIStore.m - this file is part of SOGo + * + * Copyright (C) 2011 Inverse inc + * + * Author: Wolfgang Sourdeau + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#import + +#import + +#import "MAPIStoreTypes.h" + +#import "SOGoMailObject+MAPIStore.h" + +@implementation SOGoMailObject (MAPIStoreMessage) + +- (void) setMAPIProperties: (NSDictionary *) properties +{ + id value; + + value = [properties objectForKey: MAPIPropertyKey (PR_FLAG_STATUS)]; + if (value) + { + /* We don't handle the concept of "Follow Up" */ + if ([value intValue] == 2) + [self addFlags: @"\\Flagged"]; + else /* 0: unflagged, 1: follow up complete */ + [self removeFlags: @"\\Flagged"]; + } +} + +- (void) MAPISave +{ + /* stub */ +} + +@end