aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--build-mac/mailcore2.xcodeproj/project.pbxproj6
-rw-r--r--src/objc/abstract/MCOConstants.h17
-rw-r--r--src/objc/abstract/MCOMessageHeader.h2
-rw-r--r--src/objc/imap/MCOIMAPFolder.h18
-rw-r--r--src/objc/imap/MCOIMAPFolder.mm69
-rw-r--r--src/objc/rfc822/MCOAttachment.h2
-rw-r--r--src/objc/rfc822/MCOAttachment.mm2
-rw-r--r--src/objc/rfc822/MCOMessageBuilder.h2
-rw-r--r--src/objc/rfc822/MCOMessageParser.h2
-rw-r--r--src/objc/rfc822/MCOMessagePart.h2
-rw-r--r--src/objc/rfc822/MCOMultipart.h2
-rw-r--r--src/objc/utils/MCOOperation.mm5
-rw-r--r--src/objc/utils/NSObject+MCO.mm22
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 {