diff options
-rw-r--r-- | build-mac/mailcore2.xcodeproj/project.pbxproj | 6 | ||||
-rw-r--r-- | src/objc/abstract/MCOConstants.h | 17 | ||||
-rw-r--r-- | src/objc/abstract/MCOMessageHeader.h | 2 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPFolder.h | 18 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPFolder.mm | 69 | ||||
-rw-r--r-- | src/objc/rfc822/MCOAttachment.h | 2 | ||||
-rw-r--r-- | src/objc/rfc822/MCOAttachment.mm | 2 | ||||
-rw-r--r-- | src/objc/rfc822/MCOMessageBuilder.h | 2 | ||||
-rw-r--r-- | src/objc/rfc822/MCOMessageParser.h | 2 | ||||
-rw-r--r-- | src/objc/rfc822/MCOMessagePart.h | 2 | ||||
-rw-r--r-- | src/objc/rfc822/MCOMultipart.h | 2 | ||||
-rw-r--r-- | src/objc/utils/MCOOperation.mm | 5 | ||||
-rw-r--r-- | src/objc/utils/NSObject+MCO.mm | 22 |
13 files changed, 130 insertions, 21 deletions
diff --git a/build-mac/mailcore2.xcodeproj/project.pbxproj b/build-mac/mailcore2.xcodeproj/project.pbxproj index e91d1d90..8ab2e3c7 100644 --- a/build-mac/mailcore2.xcodeproj/project.pbxproj +++ b/build-mac/mailcore2.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ C623C58C16FE54C9001BBEFC /* MCOHTMLRendererDelegate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C623C58B16FE52C0001BBEFC /* MCOHTMLRendererDelegate.h */; }; C623C58F16FE6B45001BBEFC /* MCOIMAPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C623C58E16FE6B45001BBEFC /* MCOIMAPOperation.mm */; }; C623C59016FE71B2001BBEFC /* MCOIMAPOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C623C58D16FE6B45001BBEFC /* MCOIMAPOperation.h */; }; + C623C59316FE750E001BBEFC /* MCOIMAPFolder.mm in Sources */ = {isa = PBXBuildFile; fileRef = C623C59216FE750E001BBEFC /* MCOIMAPFolder.mm */; }; C62C6ED416A2A0E600737497 /* MCIMAPIdentityOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = C62C6ED216A2A0E600737497 /* MCIMAPIdentityOperation.cc */; }; C62C6ED816A398FA00737497 /* MCIMAPFolderInfoOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = C62C6ED616A398FA00737497 /* MCIMAPFolderInfoOperation.cc */; }; C62C6EDA16A3D60700737497 /* MCIMAPAsyncConnection.cc in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7FD16A295B500778456 /* MCIMAPAsyncConnection.cc */; }; @@ -375,6 +376,8 @@ C623C58B16FE52C0001BBEFC /* MCOHTMLRendererDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCOHTMLRendererDelegate.h; sourceTree = "<group>"; }; C623C58D16FE6B45001BBEFC /* MCOIMAPOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPOperation.h; sourceTree = "<group>"; }; C623C58E16FE6B45001BBEFC /* MCOIMAPOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPOperation.mm; sourceTree = "<group>"; }; + C623C59116FE750D001BBEFC /* MCOIMAPFolder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPFolder.h; sourceTree = "<group>"; }; + C623C59216FE750E001BBEFC /* MCOIMAPFolder.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPFolder.mm; sourceTree = "<group>"; }; C62C6ED216A2A0E600737497 /* MCIMAPIdentityOperation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPIdentityOperation.cc; sourceTree = "<group>"; }; C62C6ED316A2A0E600737497 /* MCIMAPIdentityOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPIdentityOperation.h; sourceTree = "<group>"; }; C62C6ED616A398FA00737497 /* MCIMAPFolderInfoOperation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPFolderInfoOperation.cc; sourceTree = "<group>"; }; @@ -1047,6 +1050,8 @@ F87F190B16BB62B00012652F /* MCOIMAPFetchFoldersOperation.mm */, C623C58D16FE6B45001BBEFC /* MCOIMAPOperation.h */, C623C58E16FE6B45001BBEFC /* MCOIMAPOperation.mm */, + C623C59116FE750D001BBEFC /* MCOIMAPFolder.h */, + C623C59216FE750E001BBEFC /* MCOIMAPFolder.mm */, ); path = imap; sourceTree = "<group>"; @@ -1239,6 +1244,7 @@ C64BB26716FD43E2000DB34C /* MCOMessagePart.mm in Sources */, C64BB26A16FD44C2000DB34C /* MCOMultipart.mm in Sources */, C623C58F16FE6B45001BBEFC /* MCOIMAPOperation.mm in Sources */, + C623C59316FE750E001BBEFC /* MCOIMAPFolder.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/src/objc/abstract/MCOConstants.h b/src/objc/abstract/MCOConstants.h index 257b0d68..c8cfc5d0 100644 --- a/src/objc/abstract/MCOConstants.h +++ b/src/objc/abstract/MCOConstants.h @@ -20,4 +20,21 @@ typedef enum { MCOAuthTypeSASLKerberosV4 = 1 << 7, } MCOAuthType; +typedef num { + MCOIMAPFolderFlagNone = 0, + MCOIMAPFolderFlagMarked = 1 << 0, + MCOIMAPFolderFlagUnmarked = 1 << 1, + MCOIMAPFolderFlagNoSelect = 1 << 2, + MCOIMAPFolderFlagNoInferiors = 1 << 3, + MCOIMAPFolderFlagInbox = 1 << 4, + MCOIMAPFolderFlagSentMail = 1 << 5, + MCOIMAPFolderFlagStarred = 1 << 6, + MCOIMAPFolderFlagAllMail = 1 << 7, + MCOIMAPFolderFlagTrash = 1 << 8, + MCOIMAPFolderFlagDrafts = 1 << 9, + MCOIMAPFolderFlagSpam = 1 << 10, + MCOIMAPFolderFlagImportant = 1 << 11, + MCOIMAPFolderFlagArchive = 1 << 12, +} MCOIMAPFolderFlag; + #endif diff --git a/src/objc/abstract/MCOMessageHeader.h b/src/objc/abstract/MCOMessageHeader.h index 350c1379..873c45d8 100644 --- a/src/objc/abstract/MCOMessageHeader.h +++ b/src/objc/abstract/MCOMessageHeader.h @@ -14,7 +14,7 @@ @class MCOAddress; -@interface MCOMessageHeader : NSObject +@interface MCOMessageHeader : NSObject <NSCopying> @property (nonatomic, copy) NSString * messageID; @property (nonatomic, copy) NSArray * references; diff --git a/src/objc/imap/MCOIMAPFolder.h b/src/objc/imap/MCOIMAPFolder.h new file mode 100644 index 00000000..c02c5f5a --- /dev/null +++ b/src/objc/imap/MCOIMAPFolder.h @@ -0,0 +1,18 @@ +// +// MCOIMAPFolder.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import <Foundation/Foundation.h> +#import <mailcore/MCOConstants.h> + +@interface MCOIMAPFolder : NSObject + +@property (nonatomic, copy) NSString * path; +@property (nonatomic, assign) char delimiter; +@property (nonatomic, assign) MCOIMAPFolderFlag flags; + +@end diff --git a/src/objc/imap/MCOIMAPFolder.mm b/src/objc/imap/MCOIMAPFolder.mm new file mode 100644 index 00000000..7ab2aaff --- /dev/null +++ b/src/objc/imap/MCOIMAPFolder.mm @@ -0,0 +1,69 @@ +// +// MCOIMAPFolder.m +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import "MCOIMAPFolder.h" + +#import "MCOUtils.h" + +#include "MCIMAP.h" + +@implementation MCOIMAPFolder { + mailcore::IMAPFolder * _nativeFolder; +} + +#define nativeType mailcore::IMAPFolder + ++ (void) load +{ + MCORegisterClass(self, &typeid(nativeType)); +} + +- (id) copyWithZone:(NSZone *)zone +{ + nativeType * nativeObject = (nativeType *) [self mco_mcObject]->copy(); + id result = [[self class] mco_objectWithMCObject:nativeObject]; + MC_SAFE_RELEASE(nativeObject); + return [result retain]; +} + ++ (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object +{ + mailcore::IMAPFolder * folder = (mailcore::IMAPFolder *) object; + return [[[self alloc] initWithMCFolder:folder] autorelease]; +} + +- (id) init +{ + mailcore::IMAPFolder * folder = new mailcore::IMAPFolder(); + self = [self initWithMCFolder:folder]; + folder->release(); + + return self; +} + +- (id) initWithMCFolder:(mailcore::IMAPFolder *)folder +{ + self = [super init]; + + _nativeFolder = folder; + _nativeFolder->retain(); + + return self; +} + +- (void) dealloc +{ + MC_SAFE_RELEASE(_nativeFolder); + [super dealloc]; +} + +MCO_OBJC_SYNTHESIZE_STRING(setPath, path) +MCO_OBJC_SYNTHESIZE_SCALAR(char, char, setDelimiter, delimiter) +MCO_OBJC_SYNTHESIZE_SCALAR(MCOIMAPFolderFlag, mailcore::IMAPFolderFlag, setFlags, flags) + +@end diff --git a/src/objc/rfc822/MCOAttachment.h b/src/objc/rfc822/MCOAttachment.h index bb908501..1f054848 100644 --- a/src/objc/rfc822/MCOAttachment.h +++ b/src/objc/rfc822/MCOAttachment.h @@ -12,7 +12,7 @@ #import <mailcore/MCOAbstractPart.h> -@interface MCOAttachment : MCOAbstractPart +@interface MCOAttachment : MCOAbstractPart <NSCopying> + (NSString *) mimeTypeForFilename:(NSString *)filename; + (MCOAttachment *) attachmentWithContentsOfFile:(NSString *)filename; diff --git a/src/objc/rfc822/MCOAttachment.mm b/src/objc/rfc822/MCOAttachment.mm index ef581037..55430f78 100644 --- a/src/objc/rfc822/MCOAttachment.mm +++ b/src/objc/rfc822/MCOAttachment.mm @@ -43,7 +43,7 @@ - (id) init { mailcore::Attachment * attachment = new mailcore::Attachment(); - self = [super initWithMCPart:attachment]; + self = [self initWithMCPart:attachment]; attachment->release(); return self; diff --git a/src/objc/rfc822/MCOMessageBuilder.h b/src/objc/rfc822/MCOMessageBuilder.h index 8b36da8a..bbc0d253 100644 --- a/src/objc/rfc822/MCOMessageBuilder.h +++ b/src/objc/rfc822/MCOMessageBuilder.h @@ -14,7 +14,7 @@ @class MCOAttachment; -@interface MCOMessageBuilder : MCOAbstractMessage +@interface MCOMessageBuilder : MCOAbstractMessage <NSCopying> @property (nonatomic, copy, setter=setHTMLBody:) NSString * htmlBody; @property (nonatomic, copy) NSString * textBody; diff --git a/src/objc/rfc822/MCOMessageParser.h b/src/objc/rfc822/MCOMessageParser.h index 1bd2c14e..c3348fb2 100644 --- a/src/objc/rfc822/MCOMessageParser.h +++ b/src/objc/rfc822/MCOMessageParser.h @@ -14,7 +14,7 @@ @protocol MCOHTMLRendererDelegate; -@interface MCOMessageParser : MCOAbstractMessage +@interface MCOMessageParser : MCOAbstractMessage <NSCopying> @property (nonatomic, weak) id <MCOHTMLRendererDelegate> rendererDelegate; diff --git a/src/objc/rfc822/MCOMessagePart.h b/src/objc/rfc822/MCOMessagePart.h index 7e9ebb05..b41fbf0b 100644 --- a/src/objc/rfc822/MCOMessagePart.h +++ b/src/objc/rfc822/MCOMessagePart.h @@ -12,7 +12,7 @@ #import <mailcore/MCOAbstractMessagePart.h> -@interface MCOMessagePart : MCOAbstractMessagePart +@interface MCOMessagePart : MCOAbstractMessagePart <NSCopying> @end diff --git a/src/objc/rfc822/MCOMultipart.h b/src/objc/rfc822/MCOMultipart.h index 8eac50db..d38fef85 100644 --- a/src/objc/rfc822/MCOMultipart.h +++ b/src/objc/rfc822/MCOMultipart.h @@ -12,7 +12,7 @@ #import <mailcore/MCOAbstractMultipart.h> -@interface MCOMultipart : MCOAbstractMultipart +@interface MCOMultipart : MCOAbstractMultipart <NSCopying> @end diff --git a/src/objc/utils/MCOOperation.mm b/src/objc/utils/MCOOperation.mm index 5386ae65..ef1e35a9 100644 --- a/src/objc/utils/MCOOperation.mm +++ b/src/objc/utils/MCOOperation.mm @@ -45,11 +45,6 @@ public: #define nativeType mailcore::Operation -+ (void) load -{ - MCORegisterClass(self, &typeid(nativeType)); -} - + (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object { mailcore::Operation * op = (mailcore::Operation *) object; diff --git a/src/objc/utils/NSObject+MCO.mm b/src/objc/utils/NSObject+MCO.mm index 93b12bb9..8b82e997 100644 --- a/src/objc/utils/NSObject+MCO.mm +++ b/src/objc/utils/NSObject+MCO.mm @@ -33,10 +33,11 @@ void MCORegisterClass(Class aClass, const std::type_info * info) { init(); + size_t hash_value = info->hash_code(); chashdatum key; chashdatum value; - key.data = &info; - key.len = sizeof(info); + key.data = &hash_value; + key.len = sizeof(hash_value); value.data = aClass; value.len = 0; chash_set(classHash, &key, &value, NULL); @@ -46,11 +47,12 @@ static Class classWithTypeInfo(const std::type_info * info) { init(); + size_t hash_value = info->hash_code(); int r; chashdatum key; chashdatum value; - key.data = &info; - key.len = sizeof(info); + key.data = &hash_value; + key.len = sizeof(hash_value); r = chash_get(classHash, &key, &value); if (r < 0) return nil; @@ -65,19 +67,21 @@ static Class classWithTypeInfo(const std::type_info * info) if (object == NULL) return nil; - if (&typeid(object) == &typeid(mailcore::Value *)) { + //fprintf(stderr, "typeid: %i %i\n", typeid(* object).hash_code(), typeid(mailcore::Array).hash_code()); + size_t objectType = typeid(* object).hash_code(); + if (objectType == typeid(mailcore::Value).hash_code()) { return [NSValue mco_valueWithMCValue:(mailcore::Value *) object]; } - else if (&typeid(object) == &typeid(mailcore::Data *)) { + else if (objectType == typeid(mailcore::Data).hash_code()) { return [NSData mco_dataWithMCData:(mailcore::Data *) object]; } - else if (&typeid(object) == &typeid(mailcore::String *)) { + else if (objectType == typeid(mailcore::String).hash_code()) { return [NSString mco_stringWithMCString:(mailcore::String *) object]; } - else if (&typeid(object) == &typeid(mailcore::HashMap *)) { + else if (objectType == typeid(mailcore::HashMap).hash_code()) { return [NSDictionary mco_dictionaryWithMCHashMap:(mailcore::HashMap *) object]; } - else if (&typeid(object) == &typeid(mailcore::Array *)) { + else if (objectType == typeid(mailcore::Array).hash_code()) { return [NSArray mco_arrayWithMCArray:(mailcore::Array *) object]; } else { |