aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar DINH Viet Hoa <dinh.viet.hoa@gmail.com>2013-03-11 23:19:40 -0700
committerGravatar DINH Viet Hoa <dinh.viet.hoa@gmail.com>2013-03-11 23:19:40 -0700
commit7b4eafc8149b151b63a111bbcc6f3a7f322c552d (patch)
tree0c06502f66705e8868c042f95763758b3ce458d9 /src
parent8c92ac7a4b67d4ebb4dd177cf70aef73278d2baa (diff)
MessageHeader: fixed copy, ObjC wrappers for Address and MessageHeader
Diffstat (limited to 'src')
-rw-r--r--src/core/abstract/MCAddress.h19
-rw-r--r--src/core/abstract/MCMessageHeader.cc2
-rw-r--r--src/core/abstract/MCMessageHeader.h12
-rw-r--r--src/objc/abstract/MCOAddress+Private.h20
-rw-r--r--src/objc/abstract/MCOAddress.h28
-rw-r--r--src/objc/abstract/MCOAddress.mm137
-rw-r--r--src/objc/abstract/MCOMessageHeader+Private.h20
-rw-r--r--src/objc/abstract/MCOMessageHeader.h34
-rw-r--r--src/objc/abstract/MCOMessageHeader.mm268
9 files changed, 526 insertions, 14 deletions
diff --git a/src/core/abstract/MCAddress.h b/src/core/abstract/MCAddress.h
index 49d74079..add45f7d 100644
--- a/src/core/abstract/MCAddress.h
+++ b/src/core/abstract/MCAddress.h
@@ -28,15 +28,6 @@ namespace mailcore {
virtual String * RFC822String();
virtual String * nonEncodedRFC822String();
- // Additions
- static Address * addressWithIMFMailbox(struct mailimf_mailbox * mb);
- static Address * addressWithNonEncodedIMFMailbox(struct mailimf_mailbox * mb);
- static Address * addressWithIMAPAddress(struct mailimap_address * imap_addr);
-
- // Must be released
- virtual struct mailimf_address * createIMFAddress();
- virtual struct mailimf_mailbox * createIMFMailbox();
-
public: // subclass behavior.
Address(Address * other);
virtual String * description();
@@ -44,6 +35,16 @@ namespace mailcore {
virtual unsigned int hash();
virtual Object * copy();
+ public: // private
+ // Must be released
+ virtual struct mailimf_address * createIMFAddress();
+ virtual struct mailimf_mailbox * createIMFMailbox();
+
+ // Additions
+ static Address * addressWithIMFMailbox(struct mailimf_mailbox * mb);
+ static Address * addressWithNonEncodedIMFMailbox(struct mailimf_mailbox * mb);
+ static Address * addressWithIMAPAddress(struct mailimap_address * imap_addr);
+
private:
String * mDisplayName;
String * mMailbox;
diff --git a/src/core/abstract/MCMessageHeader.cc b/src/core/abstract/MCMessageHeader.cc
index a1b006b1..3502ea75 100644
--- a/src/core/abstract/MCMessageHeader.cc
+++ b/src/core/abstract/MCMessageHeader.cc
@@ -41,6 +41,8 @@ MessageHeader::MessageHeader(MessageHeader * other)
setBcc(other->mBcc);
setReplyTo(other->mReplyTo);
setSubject(other->mSubject);
+ setDate(other->date());
+ setReceivedDate(other->receivedDate());
setUserAgent(other->mUserAgent);
}
diff --git a/src/core/abstract/MCMessageHeader.h b/src/core/abstract/MCMessageHeader.h
index 045d91c5..33569204 100644
--- a/src/core/abstract/MCMessageHeader.h
+++ b/src/core/abstract/MCMessageHeader.h
@@ -58,6 +58,13 @@ namespace mailcore {
virtual String * extractedSubject();
virtual String * partialExtractedSubject();
virtual void importHeadersData(Data * data);
+
+ public: // subclass behavior
+ MessageHeader(MessageHeader * other);
+ virtual String * description();
+ virtual Object * copy();
+
+ public: // private
virtual void importIMAPEnvelope(struct mailimap_envelope * env);
virtual void importIMAPReferences(Data * data);
virtual void importIMAPInternalDate(struct mailimap_date_time * date);
@@ -65,11 +72,6 @@ namespace mailcore {
virtual struct mailimf_fields * createIMFFieldsAndFilterBcc(bool filterBcc);
virtual void importIMFFields(struct mailimf_fields * fields);
- public: // subclass behavior
- MessageHeader(MessageHeader * other);
- virtual String * description();
- virtual Object * copy();
-
private:
String * mMessageID;
Array * /* String */ mReferences;
diff --git a/src/objc/abstract/MCOAddress+Private.h b/src/objc/abstract/MCOAddress+Private.h
new file mode 100644
index 00000000..34fce13c
--- /dev/null
+++ b/src/objc/abstract/MCOAddress+Private.h
@@ -0,0 +1,20 @@
+//
+// MCOAddress+Private.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/11/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#ifdef __cplusplus
+namespace mailcore {
+ class Address;
+}
+
+@interface MCOAddress (Private)
+
+- (id) initWithMCAddress:(mailcore::Address *)address;
++ (MCOAddress *) addressWithMCAddress:(mailcore::Address *)address;
+
+@end
+#endif
diff --git a/src/objc/abstract/MCOAddress.h b/src/objc/abstract/MCOAddress.h
new file mode 100644
index 00000000..b4b1b902
--- /dev/null
+++ b/src/objc/abstract/MCOAddress.h
@@ -0,0 +1,28 @@
+//
+// MCOAddress.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/10/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface MCOAddress : NSObject <NSCopying>
+
++ (MCOAddress *) addressWithDisplayName:(NSString *)displayName
+ mailbox:(NSString *)mailbox;
+
++ (MCOAddress *) addressWithMailbox:(NSString *)mailbox;
+
++ (MCOAddress *) addressWithRFC822String:(NSString *)RFC822String;
+
++ (MCOAddress *) addressWithNonEncodedRFC822String:(NSString *)nonEncodedRFC822String;
+
+@property (nonatomic, copy) NSString * displayName;
+@property (nonatomic, copy) NSString * mailbox;
+
+- (NSString *) RFC822String;
+- (NSString *) nonEncodedRFC822String;
+
+@end
diff --git a/src/objc/abstract/MCOAddress.mm b/src/objc/abstract/MCOAddress.mm
new file mode 100644
index 00000000..58767fea
--- /dev/null
+++ b/src/objc/abstract/MCOAddress.mm
@@ -0,0 +1,137 @@
+//
+// MCOAddress.m
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/10/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import "MCOAddress.h"
+#import "MCOAddress+Private.h"
+
+#include "MCAddress.h"
+#include "NSString+MCO.h"
+
+@implementation MCOAddress {
+ mailcore::Address * _nativeAddress;
+}
+
++ (MCOAddress *) addressWithDisplayName:(NSString *)displayName
+ mailbox:(NSString *)mailbox
+{
+ MCOAddress * result = [[[MCOAddress alloc] init] autorelease];
+ MC_SAFE_RELEASE(result->_nativeAddress);
+ result->_nativeAddress = mailcore::Address::addressWithDisplayName([displayName mco_mcString], [mailbox mco_mcString]);
+ result->_nativeAddress->retain();
+ return result;
+}
+
++ (MCOAddress *) addressWithMailbox:(NSString *)mailbox
+{
+ MCOAddress * result = [[[MCOAddress alloc] init] autorelease];
+ MC_SAFE_RELEASE(result->_nativeAddress);
+ result->_nativeAddress = mailcore::Address::addressWithMailbox([mailbox mco_mcString]);
+ result->_nativeAddress->retain();
+ return result;
+}
+
++ (MCOAddress *) addressWithRFC822String:(NSString *)RFC822String
+{
+ MCOAddress * result = [[[MCOAddress alloc] init] autorelease];
+ MC_SAFE_RELEASE(result->_nativeAddress);
+ result->_nativeAddress = mailcore::Address::addressWithRFC822String([RFC822String mco_mcString]);
+ result->_nativeAddress->retain();
+ return result;
+}
+
++ (MCOAddress *) addressWithNonEncodedRFC822String:(NSString *)nonEncodedRFC822String
+{
+ MCOAddress * result = [[[MCOAddress alloc] init] autorelease];
+ MC_SAFE_RELEASE(result->_nativeAddress);
+ result->_nativeAddress = mailcore::Address::addressWithNonEncodedRFC822String([nonEncodedRFC822String mco_mcString]);
+ result->_nativeAddress->retain();
+ return result;
+}
+
+- (id) init
+{
+ self = [super init];
+
+ _nativeAddress = new mailcore::Address();
+
+ return self;
+}
+
+- (id) initWithMCAddress:(mailcore::Address *)address
+{
+ self = [super init];
+
+ _nativeAddress = address;
+ _nativeAddress->retain();
+
+ return self;
+}
+
++ (MCOAddress *) addressWithMCAddress:(mailcore::Address *)address
+{
+ if (address == NULL)
+ return nil;
+
+ return [[[self alloc] initWithMCAddress:address] autorelease];
+}
+
+- (void) dealloc
+{
+ MC_SAFE_RELEASE(_nativeAddress);
+ [super dealloc];
+}
+
+- (id) copyWithZone:(NSZone *)zone
+{
+ mailcore::Address * address = (mailcore::Address *) _nativeAddress->copy();
+ MCOAddress * result = [[MCOAddress alloc] initWithMCAddress:address];
+ MC_SAFE_RELEASE(address);
+ return result;
+}
+
+- (NSString *) description
+{
+ return [NSString mco_stringWithMCObject:_nativeAddress];
+}
+
+- (NSString *) displayName
+{
+ return [NSString mco_stringWithMCString:_nativeAddress->displayName()];
+}
+
+- (void) setDisplayName:(NSString *)displayName
+{
+ _nativeAddress->setDisplayName([displayName mco_mcString]);
+}
+
+- (NSString *) mailbox
+{
+ return [NSString mco_stringWithMCString:_nativeAddress->mailbox()];
+}
+
+- (void) setMailbox:(NSString *)mailbox
+{
+ _nativeAddress->setMailbox([mailbox mco_mcString]);
+}
+
+- (NSString *) RFC822String
+{
+ return [NSString mco_stringWithMCString:_nativeAddress->RFC822String()];
+}
+
+- (NSString *) nonEncodedRFC822String
+{
+ return [NSString mco_stringWithMCString:_nativeAddress->nonEncodedRFC822String()];
+}
+
+- (mailcore::Object *) mco_mcObject
+{
+ return _nativeAddress;
+}
+
+@end
diff --git a/src/objc/abstract/MCOMessageHeader+Private.h b/src/objc/abstract/MCOMessageHeader+Private.h
new file mode 100644
index 00000000..fe7c77bd
--- /dev/null
+++ b/src/objc/abstract/MCOMessageHeader+Private.h
@@ -0,0 +1,20 @@
+//
+// MCOMessageHeader+Private.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/11/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#ifdef __cplusplus
+namespace mailcore {
+ class MessageHeader;
+}
+
+@interface MCOMessageHeader (Private)
+
+- (id) initWithMCMessageHeader:(mailcore::MessageHeader *)header;
++ (MCOAddress *) addressWithMCMessageHeader:(mailcore::MessageHeader *)header;
+
+@end
+#endif
diff --git a/src/objc/abstract/MCOMessageHeader.h b/src/objc/abstract/MCOMessageHeader.h
new file mode 100644
index 00000000..97a48023
--- /dev/null
+++ b/src/objc/abstract/MCOMessageHeader.h
@@ -0,0 +1,34 @@
+//
+// MCOMessageHeader.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/10/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class MCOAddress;
+
+@interface MCOMessageHeader : NSObject
+
+@property (nonatomic, copy) NSString * messageID;
+@property (nonatomic, copy) NSArray * references;
+@property (nonatomic, copy) NSArray * inReplyTo;
+@property (nonatomic, retain) NSDate * date;
+@property (nonatomic, retain) NSDate * receivedDate;
+@property (nonatomic, copy) MCOAddress * sender;
+@property (nonatomic, copy) MCOAddress * from;
+@property (nonatomic, copy) NSArray * to;
+@property (nonatomic, copy) NSArray * cc;
+@property (nonatomic, copy) NSArray * bcc;
+@property (nonatomic, copy) NSArray * replyTo;
+@property (nonatomic, copy) NSString * subject;
+@property (nonatomic, copy) NSString * userAgent;
+
+- (NSString *) extractedSuject;
+- (NSString *) partialExtractedSuject;
+
+- (void) importHeadersData:(NSData *)data;
+
+@end
diff --git a/src/objc/abstract/MCOMessageHeader.mm b/src/objc/abstract/MCOMessageHeader.mm
new file mode 100644
index 00000000..3d0a3d28
--- /dev/null
+++ b/src/objc/abstract/MCOMessageHeader.mm
@@ -0,0 +1,268 @@
+//
+// MCOMessageHeader.m
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/10/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import "MCOMessageHeader.h"
+#import "MCOMessageHeader+Private.h"
+
+#include "MCMessageHeader.h"
+#include "NSString+MCO.h"
+#include "NSArray+MCO.h"
+#include "NSObject+MCO.h"
+#include "NSData+MCO.h"
+#include "MCOAddress.h"
+#include "MCOAddress+Private.h"
+
+@implementation MCOMessageHeader {
+ mailcore::MessageHeader * _nativeHeader;
+}
+
+- (id) init
+{
+ self = [super init];
+
+ _nativeHeader = new mailcore::MessageHeader();
+
+ return self;
+}
+
+- (id) initWithMCMessageHeader:(mailcore::MessageHeader *)header
+{
+ self = [super init];
+
+ _nativeHeader = header;
+ _nativeHeader->retain();
+
+ return self;
+}
+
++ (MCOMessageHeader *) messageHeaderWithMCMessageHeader:(mailcore::MessageHeader *)header
+{
+ if (header == NULL)
+ return nil;
+
+ return [[[self alloc] initWithMCMessageHeader:header] autorelease];
+}
+
+- (id) copyWithZone:(NSZone *)zone
+{
+ mailcore::MessageHeader * header = (mailcore::MessageHeader *) _nativeHeader->copy();
+ MCOMessageHeader * result = [[MCOMessageHeader alloc] initWithMCMessageHeader:header];
+ MC_SAFE_RELEASE(header);
+ return result;
+}
+
+- (NSString *) description
+{
+ return [NSString mco_stringWithMCObject:_nativeHeader];
+}
+
+- (NSString *) messageID
+{
+ return [NSString mco_stringWithMCString:_nativeHeader->messageID()];
+}
+
+- (void) setMessageID:(NSString *)messageID
+{
+ _nativeHeader->setMessageID([messageID mco_mcString]);
+}
+
+- (NSArray *) references
+{
+ mailcore::Array * msgIDs = _nativeHeader->references();
+ if (msgIDs == NULL)
+ return nil;
+
+ NSMutableArray * result = [NSMutableArray array];
+ for(unsigned int i = 0 ; i < msgIDs->count() ; i ++) {
+ mailcore::String * nativeMsgID = (mailcore::String *) msgIDs->objectAtIndex(i);
+ [result addObject:[NSString mco_stringWithMCString:nativeMsgID]];
+ }
+ return result;
+}
+
+- (void) setReferences:(NSArray *)references
+{
+ _nativeHeader->setReferences((mailcore::Array *) [references mco_mcArray]);
+}
+
+- (NSArray *) inReplyTo
+{
+ mailcore::Array * msgIDs = _nativeHeader->inReplyTo();
+ if (msgIDs == NULL)
+ return nil;
+
+ NSMutableArray * result = [NSMutableArray array];
+ for(unsigned int i = 0 ; i < msgIDs->count() ; i ++) {
+ mailcore::String * nativeMsgID = (mailcore::String *) msgIDs->objectAtIndex(i);
+ [result addObject:[NSString mco_stringWithMCString:nativeMsgID]];
+ }
+ return result;
+}
+
+- (void) setInReplyTo:(NSArray *)inReplyTo
+{
+ _nativeHeader->setInReplyTo([inReplyTo mco_mcArray]);
+}
+
+- (NSDate *) date
+{
+ return [NSDate dateWithTimeIntervalSince1970:_nativeHeader->date()];
+}
+
+- (void) setDate:(NSDate *)date
+{
+ _nativeHeader->setDate([date timeIntervalSince1970]);
+}
+
+- (NSDate *) receivedDate
+{
+ return [NSDate dateWithTimeIntervalSince1970:((NSTimeInterval) _nativeHeader->receivedDate())];
+}
+
+- (void) setReceivedDate:(NSDate *)receivedDate
+{
+ _nativeHeader->setReceivedDate(((NSTimeInterval) [receivedDate timeIntervalSince1970]));
+}
+
+- (MCOAddress *) sender
+{
+ return [[[MCOAddress alloc] initWithMCAddress:_nativeHeader->sender()] autorelease];
+}
+
+- (void) setSender:(MCOAddress *)sender
+{
+ _nativeHeader->setSender((mailcore::Address *) [sender mco_mcObject]);
+}
+
+- (MCOAddress *) from
+{
+ return [MCOAddress addressWithMCAddress:_nativeHeader->from()];
+}
+
+- (void) setFrom:(MCOAddress *)from
+{
+ _nativeHeader->setFrom((mailcore::Address *) [from mco_mcObject]);
+}
+
+- (NSArray *) to
+{
+ mailcore::Array * addresses = _nativeHeader->to();
+ if (addresses == NULL)
+ return nil;
+
+ NSMutableArray * result = [NSMutableArray array];
+ for(unsigned int i = 0 ; i < addresses->count() ; i ++) {
+ mailcore::Address * nativeAddress = (mailcore::Address *) addresses->objectAtIndex(i);
+ [result addObject:[MCOAddress addressWithMCAddress:nativeAddress]];
+ }
+ return result;
+}
+
+- (void) setTo:(NSArray *)to
+{
+ _nativeHeader->setTo((mailcore::Array *) [to mco_mcObject]);
+}
+
+- (NSArray *) cc
+{
+ mailcore::Array * addresses = _nativeHeader->cc();
+ if (addresses == NULL)
+ return nil;
+
+ NSMutableArray * result = [NSMutableArray array];
+ for(unsigned int i = 0 ; i < addresses->count() ; i ++) {
+ mailcore::Address * nativeAddress = (mailcore::Address *) addresses->objectAtIndex(i);
+ [result addObject:[MCOAddress addressWithMCAddress:nativeAddress]];
+ }
+ return result;
+}
+
+- (void) setCc:(NSArray *)cc
+{
+ _nativeHeader->setCc((mailcore::Array *) [cc mco_mcObject]);
+}
+
+- (NSArray *) bcc
+{
+ mailcore::Array * addresses = _nativeHeader->bcc();
+ if (addresses == NULL)
+ return nil;
+
+ NSMutableArray * result = [NSMutableArray array];
+ for(unsigned int i = 0 ; i < addresses->count() ; i ++) {
+ mailcore::Address * nativeAddress = (mailcore::Address *) addresses->objectAtIndex(i);
+ [result addObject:[MCOAddress addressWithMCAddress:nativeAddress]];
+ }
+ return result;
+}
+
+- (void) setBcc:(NSArray *)bcc
+{
+ _nativeHeader->setBcc((mailcore::Array *) [bcc mco_mcObject]);
+}
+
+- (NSArray *) replyTo
+{
+ mailcore::Array * addresses = _nativeHeader->replyTo();
+ if (addresses == NULL)
+ return nil;
+
+ NSMutableArray * result = [NSMutableArray array];
+ for(unsigned int i = 0 ; i < addresses->count() ; i ++) {
+ mailcore::Address * nativeAddress = (mailcore::Address *) addresses->objectAtIndex(i);
+ [result addObject:[MCOAddress addressWithMCAddress:nativeAddress]];
+ }
+ return result;
+}
+
+- (void) setReplyTo:(NSArray *)replyTo
+{
+ _nativeHeader->setReplyTo((mailcore::Array *) [replyTo mco_mcObject]);
+}
+
+- (NSString *) subject
+{
+ return [NSString mco_stringWithMCString:_nativeHeader->subject()];
+}
+
+- (void) setSubject:(NSString *)subject
+{
+ _nativeHeader->setSubject([subject mco_mcString]);
+}
+
+- (NSString *) userAgent
+{
+ return [NSString mco_stringWithMCString:_nativeHeader->userAgent()];
+}
+
+- (void) setUserAgent:(NSString *)userAgent
+{
+ _nativeHeader->setUserAgent([userAgent mco_mcString]);
+}
+
+- (NSString *) extractedSuject
+{
+ return [NSString mco_stringWithMCString:_nativeHeader->extractedSubject()];
+}
+
+- (NSString *) partialExtractedSuject
+{
+ return [NSString mco_stringWithMCString:_nativeHeader->partialExtractedSubject()];
+}
+
+- (void) importHeadersData:(NSData *)data
+{
+ _nativeHeader->importHeadersData([data mco_mcData]);
+}
+
+- (mailcore::Object *) mco_mcObject
+{
+ return _nativeHeader;
+}
+
+@end