diff options
-rwxr-xr-x | build-mac/mailcore2.xcodeproj/project.pbxproj | 6 | ||||
-rw-r--r-- | src/cmake/core.cmake | 1 | ||||
-rw-r--r-- | src/core/basetypes/MCData.h | 7 | ||||
-rw-r--r-- | src/core/basetypes/MCDataMac.mm | 22 | ||||
-rw-r--r-- | src/core/rfc822/MCMessageParser.cc | 6 | ||||
-rw-r--r-- | src/core/rfc822/MCMessageParser.h | 10 | ||||
-rw-r--r-- | src/core/rfc822/MCMessageParserMac.mm | 34 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPFetchContentOperation.mm | 2 |
8 files changed, 79 insertions, 9 deletions
diff --git a/build-mac/mailcore2.xcodeproj/project.pbxproj b/build-mac/mailcore2.xcodeproj/project.pbxproj index e4763f82..23efb138 100755 --- a/build-mac/mailcore2.xcodeproj/project.pbxproj +++ b/build-mac/mailcore2.xcodeproj/project.pbxproj @@ -1262,6 +1262,8 @@ C6D4FD3819FA9F57001F7E01 /* MCONNTPFetchServerTimeOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84CFA99319F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.h */; }; C6D4FD3F19FB7534001F7E01 /* MCMessageParserMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD3E19FB7534001F7E01 /* MCMessageParserMac.mm */; }; C6D4FD4019FB7786001F7E01 /* MCMessageParserMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD3E19FB7534001F7E01 /* MCMessageParserMac.mm */; }; + C6D4FD4319FB7DAA001F7E01 /* MCDataMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD4219FB7DAA001F7E01 /* MCDataMac.mm */; }; + C6D4FD4419FB7DB2001F7E01 /* MCDataMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD4219FB7DAA001F7E01 /* MCDataMac.mm */; }; C6D6F7F9171E595D006F5B28 /* MCJSON.cc in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F7F7171E595D006F5B28 /* MCJSON.cc */; }; C6D6F7FA171E595D006F5B28 /* MCJSON.cc in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F7F7171E595D006F5B28 /* MCJSON.cc */; }; C6D6F954171E5CB8006F5B28 /* MCMD5.cc in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F950171E5CB8006F5B28 /* MCMD5.cc */; }; @@ -2258,6 +2260,7 @@ C6D42C1B16AE03D6002BB4F9 /* NSString+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MCO.h"; sourceTree = "<group>"; }; C6D42C1C16AE03D6002BB4F9 /* NSString+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSString+MCO.mm"; sourceTree = "<group>"; }; C6D4FD3E19FB7534001F7E01 /* MCMessageParserMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCMessageParserMac.mm; sourceTree = "<group>"; }; + C6D4FD4219FB7DAA001F7E01 /* MCDataMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCDataMac.mm; sourceTree = "<group>"; }; C6D6F7F7171E595D006F5B28 /* MCJSON.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCJSON.cc; sourceTree = "<group>"; }; C6D6F7F8171E595D006F5B28 /* MCJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCJSON.h; sourceTree = "<group>"; }; C6D6F950171E5CB8006F5B28 /* MCMD5.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCMD5.cc; sourceTree = "<group>"; }; @@ -2809,6 +2812,7 @@ C68B2AF617797389005E61EF /* MCConnectionLoggerUtils.h */, C64EA6A9169E847800778456 /* MCData.cc */, C64EA6AA169E847800778456 /* MCData.h */, + C6D4FD4219FB7DAA001F7E01 /* MCDataMac.mm */, C64EA6AB169E847800778456 /* MCHash.cc */, C64EA6AC169E847800778456 /* MCHash.h */, C64EA6AD169E847800778456 /* MCHashMap.cc */, @@ -4150,6 +4154,7 @@ C64BB23516EDAA17000DB34C /* MCOAbstractMessage.mm in Sources */, C64BB23916EDAA3F000DB34C /* MCOAbstractMessagePart.mm in Sources */, C64BB23C16EDAAC7000DB34C /* MCOAbstractMultipart.mm in Sources */, + C6D4FD4319FB7DAA001F7E01 /* MCDataMac.mm in Sources */, C64BB23F16EDAAE1000DB34C /* MCOAbstractPart.mm in Sources */, C64BB24216EDAAF4000DB34C /* MCOAddress.mm in Sources */, C64BB24516EDAAFE000DB34C /* MCOMessageHeader.mm in Sources */, @@ -4387,6 +4392,7 @@ 84D73765199BFFC7005124E5 /* MCONNTPSession.mm in Sources */, C6BA2BF01705F4E6003F0E9E /* MCOAbstractMessage.mm in Sources */, C6BA2BF11705F4E6003F0E9E /* MCOAbstractMessagePart.mm in Sources */, + C6D4FD4419FB7DB2001F7E01 /* MCDataMac.mm in Sources */, C6BA2BF21705F4E6003F0E9E /* MCOAbstractMultipart.mm in Sources */, C6BA2BF31705F4E6003F0E9E /* MCOAbstractPart.mm in Sources */, C6BA2BF41705F4E6003F0E9E /* MCOAddress.mm in Sources */, diff --git a/src/cmake/core.cmake b/src/cmake/core.cmake index 59139908..4b0782cf 100644 --- a/src/cmake/core.cmake +++ b/src/cmake/core.cmake @@ -14,6 +14,7 @@ IF(APPLE) core/basetypes/MCAutoreleasePoolMac.mm core/basetypes/MCMainThread.mm core/basetypes/MCObjectMac.mm + core/basetypes/MCDataMac.mm core/rfc822/MCMessageParserMac.mm ) ENDIF() diff --git a/src/core/basetypes/MCData.h b/src/core/basetypes/MCData.h index e7363644..131cb722 100644 --- a/src/core/basetypes/MCData.h +++ b/src/core/basetypes/MCData.h @@ -5,6 +5,10 @@ #include <MailCore/MCObject.h> #include <MailCore/MCMessageConstants.h> +#ifdef __APPLE__ +#import <CoreFoundation/CoreFoundation.h> +#endif + #ifdef __cplusplus namespace mailcore { @@ -41,6 +45,9 @@ namespace mailcore { public: // private virtual String * charsetWithFilteredHTML(bool filterHTML, String * hintCharset = NULL); +#ifdef __APPLE__ + virtual CFDataRef destructiveNSData(); +#endif public: // subclass behavior Data(Data * otherData); diff --git a/src/core/basetypes/MCDataMac.mm b/src/core/basetypes/MCDataMac.mm new file mode 100644 index 00000000..8081b1f9 --- /dev/null +++ b/src/core/basetypes/MCDataMac.mm @@ -0,0 +1,22 @@ +// +// MCDataMac.m +// mailcore2 +// +// Created by Hoa V. DINH on 10/24/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCData.h" + +#import <Foundation/Foundation.h> + +using namespace mailcore; + +CFDataRef Data::destructiveNSData() +{ + NSData * result = [NSData dataWithBytesNoCopy:(void *) mBytes length:mLength]; + mBytes = NULL; + mAllocated = 0; + mLength = 0; + return (CFDataRef) result; +} diff --git a/src/core/rfc822/MCMessageParser.cc b/src/core/rfc822/MCMessageParser.cc index f8a25bda..404bc862 100644 --- a/src/core/rfc822/MCMessageParser.cc +++ b/src/core/rfc822/MCMessageParser.cc @@ -105,12 +105,12 @@ AbstractPart * MessageParser::mainPart() Data * MessageParser::data() { +#if __APPLE__ if (mNSData != NULL) { return dataFromNSData(); } - else { - return mData; - } +#endif + return mData; } String * MessageParser::description() diff --git a/src/core/rfc822/MCMessageParser.h b/src/core/rfc822/MCMessageParser.h index 3b34ab9e..eba0e052 100644 --- a/src/core/rfc822/MCMessageParser.h +++ b/src/core/rfc822/MCMessageParser.h @@ -5,8 +5,8 @@ #include <MailCore/MCBaseTypes.h> #include <MailCore/MCAbstractMessage.h> #include <MailCore/MCAbstractPart.h> -#ifdef __OBJC__ -#import <Foundation/Foundation.h> +#ifdef __APPLE__ +#import <CoreFoundation/CoreFoundation.h> #endif #ifdef __cplusplus @@ -42,10 +42,10 @@ namespace mailcore { virtual HashMap * serializable(); -#ifdef __OBJC__ +#ifdef __APPLE__ public: - static MessageParser * messageParserWithData(NSData * data); - MessageParser(NSData * data); + static MessageParser * messageParserWithData(CFDataRef data); + MessageParser(CFDataRef data); #endif private: diff --git a/src/core/rfc822/MCMessageParserMac.mm b/src/core/rfc822/MCMessageParserMac.mm new file mode 100644 index 00000000..6748ed1a --- /dev/null +++ b/src/core/rfc822/MCMessageParserMac.mm @@ -0,0 +1,34 @@ +// +// MCMessageParserMac.m +// mailcore2 +// +// Created by Hoa V. DINH on 10/24/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCMessageParser.h" + +#import <Foundation/Foundation.h> + +#import "NSData+MCO.h" + +using namespace mailcore; + +MessageParser * MessageParser::messageParserWithData(CFDataRef data) +{ + MessageParser * parser = new MessageParser(data); + return (MessageParser *) parser->autorelease(); +} + +MessageParser::MessageParser(CFDataRef data) +{ + init(); + + setBytes((char *) [(NSData *) data bytes], (unsigned int) [(NSData *) data length]); + mNSData = [(NSData *) data retain]; +} + +Data * MessageParser::dataFromNSData() +{ + return [(NSData *) mNSData mco_mcData]; +} diff --git a/src/objc/imap/MCOIMAPFetchContentOperation.mm b/src/objc/imap/MCOIMAPFetchContentOperation.mm index 791307ca..9ca4c1c4 100644 --- a/src/objc/imap/MCOIMAPFetchContentOperation.mm +++ b/src/objc/imap/MCOIMAPFetchContentOperation.mm @@ -61,7 +61,7 @@ typedef void (^CompletionType)(NSError *error, NSData * data); nativeType *op = MCO_NATIVE_INSTANCE; if (op->error() == mailcore::ErrorNone) { - _completionBlock(nil, MCO_TO_OBJC(op->data())); + _completionBlock(nil, (NSData *) op->data()->destructiveNSData()); } else { _completionBlock([NSError mco_errorWithErrorCode:op->error()], nil); } |