diff options
author | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2013-05-04 23:17:33 -0700 |
---|---|---|
committer | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2013-05-04 23:17:33 -0700 |
commit | 55f998e5076e6ee5607580a56bdac68e605e1050 (patch) | |
tree | 8313b526775f494806ff82f67d0f6e31e39ab6bb | |
parent | cf0e72e7f751413c57b0a2dd1c7adcf7e1a37c38 (diff) |
Cleaned provider implementation
-rw-r--r-- | build-mac/mailcore2.xcodeproj/project.pbxproj | 12 | ||||
-rw-r--r-- | src/core/provider/MCMailProvider.cc | 84 | ||||
-rw-r--r-- | src/core/provider/MCMailProvider.h | 47 | ||||
-rw-r--r-- | src/core/provider/MCMailProvidersManager.cc | 15 | ||||
-rw-r--r-- | src/core/provider/MCMailProvidersManager.h | 25 | ||||
-rw-r--r-- | src/core/provider/MCNetService.cc | 44 | ||||
-rw-r--r-- | src/core/provider/MCNetService.h | 31 | ||||
-rw-r--r-- | src/core/renderer/MCHTMLRendererCallback.cc (renamed from src/core/renderer/MCHTMLRendererCallback.c) | 0 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPSession.mm | 3 | ||||
-rw-r--r-- | src/objc/provider/MCOMailProvider.mm | 42 | ||||
-rw-r--r-- | src/objc/provider/MCOMailProvidersManager.h | 2 | ||||
-rw-r--r-- | src/objc/provider/MCOMailProvidersManager.mm | 22 | ||||
-rw-r--r-- | src/objc/provider/MCONetService.h | 12 | ||||
-rw-r--r-- | src/objc/provider/MCONetService.mm | 31 |
14 files changed, 191 insertions, 179 deletions
diff --git a/build-mac/mailcore2.xcodeproj/project.pbxproj b/build-mac/mailcore2.xcodeproj/project.pbxproj index ea82454f..4085a7ec 100644 --- a/build-mac/mailcore2.xcodeproj/project.pbxproj +++ b/build-mac/mailcore2.xcodeproj/project.pbxproj @@ -76,7 +76,7 @@ C63CD68016BDCDD400DB18F1 /* MCDateFormatter.cc in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67916BDCDD400DB18F1 /* MCDateFormatter.cc */; }; C63CD68116BDCDD400DB18F1 /* MCHTMLRenderer.cc in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67B16BDCDD400DB18F1 /* MCHTMLRenderer.cc */; }; C63CD68216BDCDD400DB18F1 /* MCSizeFormatter.cc in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67D16BDCDD400DB18F1 /* MCSizeFormatter.cc */; }; - C63CD68616BE148B00DB18F1 /* MCHTMLRendererCallback.c in Sources */ = {isa = PBXBuildFile; fileRef = C63CD68416BE148B00DB18F1 /* MCHTMLRendererCallback.c */; }; + C63CD68616BE148B00DB18F1 /* MCHTMLRendererCallback.cc in Sources */ = {isa = PBXBuildFile; fileRef = C63CD68416BE148B00DB18F1 /* MCHTMLRendererCallback.cc */; }; C63CD68816BE1BBF00DB18F1 /* MCAddressDisplay.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63CD67816BDCDD400DB18F1 /* MCAddressDisplay.h */; }; C63CD68916BE1BC100DB18F1 /* MCDateFormatter.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63CD67A16BDCDD400DB18F1 /* MCDateFormatter.h */; }; C63CD68A16BE1BC400DB18F1 /* MCSizeFormatter.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63CD67E16BDCDD400DB18F1 /* MCSizeFormatter.h */; }; @@ -512,7 +512,7 @@ C6BA2BE81705F4E6003F0E9E /* MCDateFormatter.cc in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67916BDCDD400DB18F1 /* MCDateFormatter.cc */; }; C6BA2BE91705F4E6003F0E9E /* MCHTMLRenderer.cc in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67B16BDCDD400DB18F1 /* MCHTMLRenderer.cc */; }; C6BA2BEA1705F4E6003F0E9E /* MCSizeFormatter.cc in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67D16BDCDD400DB18F1 /* MCSizeFormatter.cc */; }; - C6BA2BEB1705F4E6003F0E9E /* MCHTMLRendererCallback.c in Sources */ = {isa = PBXBuildFile; fileRef = C63CD68416BE148B00DB18F1 /* MCHTMLRendererCallback.c */; }; + C6BA2BEB1705F4E6003F0E9E /* MCHTMLRendererCallback.cc in Sources */ = {isa = PBXBuildFile; fileRef = C63CD68416BE148B00DB18F1 /* MCHTMLRendererCallback.cc */; }; C6BA2BEC1705F4E6003F0E9E /* MCHTMLCleaner.cc in Sources */ = {isa = PBXBuildFile; fileRef = C63CD68F16BE566D00DB18F1 /* MCHTMLCleaner.cc */; }; C6BA2BED1705F4E6003F0E9E /* MCIMAPSyncResult.cc in Sources */ = {isa = PBXBuildFile; fileRef = C64BB21F16E34DCA000DB34C /* MCIMAPSyncResult.cc */; }; C6BA2BEE1705F4E6003F0E9E /* MCIMAPCapabilityOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = C64BB22916E5C0A3000DB34C /* MCIMAPCapabilityOperation.cc */; }; @@ -1072,7 +1072,7 @@ C63CD67C16BDCDD400DB18F1 /* MCHTMLRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCHTMLRenderer.h; sourceTree = "<group>"; }; C63CD67D16BDCDD400DB18F1 /* MCSizeFormatter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCSizeFormatter.cc; sourceTree = "<group>"; }; C63CD67E16BDCDD400DB18F1 /* MCSizeFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCSizeFormatter.h; sourceTree = "<group>"; }; - C63CD68416BE148B00DB18F1 /* MCHTMLRendererCallback.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = MCHTMLRendererCallback.c; sourceTree = "<group>"; }; + C63CD68416BE148B00DB18F1 /* MCHTMLRendererCallback.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCHTMLRendererCallback.cc; sourceTree = "<group>"; }; C63CD68516BE148B00DB18F1 /* MCHTMLRendererCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCHTMLRendererCallback.h; sourceTree = "<group>"; }; C63CD68716BE1AB600DB18F1 /* MCRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCRenderer.h; sourceTree = "<group>"; }; C63CD68F16BE566D00DB18F1 /* MCHTMLCleaner.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCHTMLCleaner.cc; sourceTree = "<group>"; }; @@ -1469,7 +1469,7 @@ C63CD67E16BDCDD400DB18F1 /* MCSizeFormatter.h */, C63CD67B16BDCDD400DB18F1 /* MCHTMLRenderer.cc */, C63CD67C16BDCDD400DB18F1 /* MCHTMLRenderer.h */, - C63CD68416BE148B00DB18F1 /* MCHTMLRendererCallback.c */, + C63CD68416BE148B00DB18F1 /* MCHTMLRendererCallback.cc */, C63CD68516BE148B00DB18F1 /* MCHTMLRendererCallback.h */, C63CD68716BE1AB600DB18F1 /* MCRenderer.h */, ); @@ -2324,7 +2324,7 @@ C63CD68016BDCDD400DB18F1 /* MCDateFormatter.cc in Sources */, C63CD68116BDCDD400DB18F1 /* MCHTMLRenderer.cc in Sources */, C63CD68216BDCDD400DB18F1 /* MCSizeFormatter.cc in Sources */, - C63CD68616BE148B00DB18F1 /* MCHTMLRendererCallback.c in Sources */, + C63CD68616BE148B00DB18F1 /* MCHTMLRendererCallback.cc in Sources */, C63CD69116BE566E00DB18F1 /* MCHTMLCleaner.cc in Sources */, C64BB22116E34DCB000DB34C /* MCIMAPSyncResult.cc in Sources */, C64BB22B16E5C0A4000DB34C /* MCIMAPCapabilityOperation.cc in Sources */, @@ -2496,7 +2496,7 @@ C6BA2BE81705F4E6003F0E9E /* MCDateFormatter.cc in Sources */, C6BA2BE91705F4E6003F0E9E /* MCHTMLRenderer.cc in Sources */, C6BA2BEA1705F4E6003F0E9E /* MCSizeFormatter.cc in Sources */, - C6BA2BEB1705F4E6003F0E9E /* MCHTMLRendererCallback.c in Sources */, + C6BA2BEB1705F4E6003F0E9E /* MCHTMLRendererCallback.cc in Sources */, C6BA2BEC1705F4E6003F0E9E /* MCHTMLCleaner.cc in Sources */, C6BA2BED1705F4E6003F0E9E /* MCIMAPSyncResult.cc in Sources */, C6BA2BEE1705F4E6003F0E9E /* MCIMAPCapabilityOperation.cc in Sources */, diff --git a/src/core/provider/MCMailProvider.cc b/src/core/provider/MCMailProvider.cc index 40d4abf7..08cedfd6 100644 --- a/src/core/provider/MCMailProvider.cc +++ b/src/core/provider/MCMailProvider.cc @@ -17,31 +17,57 @@ using namespace mailcore; void MailProvider::init() { + mIdentifier = NULL; mImapServices = new Array(); mSmtpServices = new Array(); mPopServices = new Array(); + mDomainMatch = new Array(); mMxSet = new Set(); + mMailboxPaths = NULL; } -void MailProvider::initWihInfo(HashMap * info) +MailProvider::MailProvider() +{ + init(); +} + +MailProvider::~MailProvider() +{ + MC_SAFE_RELEASE(mImapServices); + MC_SAFE_RELEASE(mSmtpServices); + MC_SAFE_RELEASE(mPopServices); + MC_SAFE_RELEASE(mMxSet); + MC_SAFE_RELEASE(mDomainMatch); + MC_SAFE_RELEASE(mMailboxPaths); + MC_SAFE_RELEASE(mIdentifier); +} + +MailProvider * MailProvider::providerWithInfo(HashMap * info) +{ + MailProvider * provider = new MailProvider(); + provider->fillWithInfo(info); + provider->autorelease(); + return provider; +} + +void MailProvider::fillWithInfo(HashMap * info) { - init(); - Array * imapInfos; Array * smtpInfos; Array * popInfos; HashMap * serverInfo; Array * mxs; - - mDomainMatch = NULL; + + MC_SAFE_RELEASE(mDomainMatch); if (info->objectForKey(MCSTR("domain-match")) != NULL) { mDomainMatch = (Array *) info->objectForKey(MCSTR("domain-match"))->retain(); } - mMailboxPaths = NULL; + MC_SAFE_RELEASE(mMailboxPaths); if (info->objectForKey(MCSTR("mailboxes")) != NULL) { mMailboxPaths = (HashMap *) info->objectForKey(MCSTR("mailboxes"))->retain(); } mxs = (Array *) info->objectForKey(MCSTR("mx")); + mMxSet->removeAllObjects(); mc_foreacharray(String, mx, mxs) { mMxSet->addObject(mx->lowercaseString()); } @@ -51,55 +77,34 @@ void MailProvider::initWihInfo(HashMap * info) smtpInfos = (Array *) serverInfo->objectForKey(MCSTR("smtp")); popInfos = (Array *) serverInfo->objectForKey(MCSTR("pop")); + mImapServices->removeAllObjects(); mc_foreacharray(HashMap, imapInfo, imapInfos) { - NetService * service; - - service = new NetService(imapInfo); + NetService * service = NetService::serviceWithInfo(imapInfo); mImapServices->addObject(service); - service->release(); } + mSmtpServices->removeAllObjects(); mc_foreacharray(HashMap, smtpInfo, smtpInfos) { - NetService * service; - - service = new NetService(smtpInfo); + NetService * service = NetService::serviceWithInfo(smtpInfo); mSmtpServices->addObject(service); service->release(); } + mPopServices->removeAllObjects(); mc_foreacharray(HashMap, popInfo, popInfos) { - NetService * service; - - service = new NetService(popInfo); + NetService * service = NetService::serviceWithInfo(popInfo); mPopServices->addObject(service); service->release(); } } -MailProvider::MailProvider(HashMap * info) +void MailProvider::setIdentifier(String * identifier) { - initWihInfo(info); -} - -MailProvider::MailProvider(Data * infoData) { - initWihInfo((HashMap *) JSON::objectFromJSONData(infoData)); -} - -MailProvider::~MailProvider() { - delete mImapServices; - delete mSmtpServices; - delete mPopServices; - delete mMxSet; - delete mDomainMatch; - delete mMailboxPaths; - delete mIdentifier; + MC_SAFE_REPLACE_COPY(String, mIdentifier, identifier); } -void MailProvider::setIdentifier(String * identifier) { - mIdentifier = identifier; -} - -String * MailProvider::identifier() { +String * MailProvider::identifier() +{ return mIdentifier; } @@ -212,6 +217,7 @@ bool MailProvider::isMainFolder(String * folderPath, String * prefix) return false; } -String * MailProvider::description() { - return String::stringWithUTF8Format("<%s:%p, %s>", className()->UTF8Characters(), this, identifier()); +String * MailProvider::description() +{ + return String::stringWithUTF8Format("<%s:%p, %s>", className()->UTF8Characters(), this, MCUTF8(mIdentifier)); } diff --git a/src/core/provider/MCMailProvider.h b/src/core/provider/MCMailProvider.h index 04f46750..da8b2fa3 100644 --- a/src/core/provider/MCMailProvider.h +++ b/src/core/provider/MCMailProvider.h @@ -6,8 +6,8 @@ // Copyright (c) 2013 MailCore. All rights reserved. // -#ifndef __MAILCORE__MCMailProvider__ -#define __MAILCORE__MCMailProvider__ +#ifndef __MAILCORE_MCMAILPROVIDER_H_ +#define __MAILCORE_MCMAILPROVIDER_H_ #include <MailCore/MCBaseTypes.h> @@ -19,32 +19,38 @@ namespace mailcore { class MailProvider : public Object { public: - MailProvider(HashMap * info); - MailProvider(Data * infoData); - ~MailProvider(); + static MailProvider * providerWithInfo(HashMap * info); + + MailProvider(); + virtual ~MailProvider(); - void setIdentifier(String * identifier); - String * identifier(); + virtual String * identifier(); - Array * imapServices(); - Array * smtpServices(); - Array * popServices(); + virtual Array * imapServices(); + virtual Array * smtpServices(); + virtual Array * popServices(); - bool matchEmail(String * email); - bool matchMX(String * hostname); + virtual bool matchEmail(String * email); + virtual bool matchMX(String * hostname); - String * sentMailFolderPath(); - String * starredFolderPath(); - String * allMailFolderPath(); - String * trashFolderPath(); - String * draftsFolderPath(); - String * spamFolderPath(); - String * importantFolderPath(); + virtual String * sentMailFolderPath(); + virtual String * starredFolderPath(); + virtual String * allMailFolderPath(); + virtual String * trashFolderPath(); + virtual String * draftsFolderPath(); + virtual String * spamFolderPath(); + virtual String * importantFolderPath(); - bool isMainFolder(String * folderPath, String * prefix); + // Returns true if one of the folders above matches the given one. + virtual bool isMainFolder(String * folderPath, String * prefix); + public: // subclass behavior virtual String * description(); + public: // private + virtual void setIdentifier(String * identifier); + virtual void fillWithInfo(HashMap * info); + private: String * mIdentifier; Array * mDomainMatch; @@ -55,7 +61,6 @@ namespace mailcore { Set* mMxSet; void init(); - void initWihInfo(HashMap * info); }; }; diff --git a/src/core/provider/MCMailProvidersManager.cc b/src/core/provider/MCMailProvidersManager.cc index 9924a911..71041c06 100644 --- a/src/core/provider/MCMailProvidersManager.cc +++ b/src/core/provider/MCMailProvidersManager.cc @@ -21,6 +21,13 @@ MailProvidersManager::MailProvidersManager() { init(); } +MailProvidersManager * MailProvidersManager::sharedManager() +{ + static MailProvidersManager * instance = new MailProvidersManager(); + return instance; +} + + MailProvider * MailProvidersManager::providerForEmail(String * email) { mc_foreachdictionaryValue(MailProvider, provider, mProviders) { @@ -49,19 +56,17 @@ MailProvider * MailProvidersManager::providerForIdentifier(String * identifier) void MailProvidersManager::registerProviders(HashMap * providers) { mc_foreachdictionaryKeyAndValue(String, identifier, HashMap, providerInfo, providers) { - MailProvider * provider = new MailProvider(providerInfo); + MailProvider * provider = MailProvider::providerWithInfo(providerInfo); provider->setIdentifier(identifier); - MCLog("register %s", MCUTF8DESC(identifier)); + //MCLog("register %s", MCUTF8DESC(identifier)); mProviders->setObjectForKey(identifier, provider); - provider->release(); } } -void MailProvidersManager::registerProvidersFilename(String * filename) +void MailProvidersManager::registerProvidersWithFilename(String * filename) { HashMap * providersInfos; providersInfos = (HashMap *) JSON::objectFromJSONData(Data::dataWithContentsOfFile(filename)); registerProviders(providersInfos); - providersInfos->release(); } diff --git a/src/core/provider/MCMailProvidersManager.h b/src/core/provider/MCMailProvidersManager.h index 6dc33b2b..d91f89a1 100644 --- a/src/core/provider/MCMailProvidersManager.h +++ b/src/core/provider/MCMailProvidersManager.h @@ -6,8 +6,8 @@ // Copyright (c) 2013 MailCore. All rights reserved. // -#ifndef __MAILCORE__MCMailProvidersManager__ -#define __MAILCORE__MCMailProvidersManager__ +#ifndef __MAILCORE_MCMAILPROVIDERSMANAGER_H_ +#define __MAILCORE_MCMAILPROVIDERSMANAGER_H_ #include <MailCore/MCBaseTypes.h> @@ -17,26 +17,19 @@ namespace mailcore { class MailProvider; class MailProvidersManager : public Object { - + public: - static MailProvidersManager * sharedManager() - { - static MailProvidersManager * instance = new MailProvidersManager(); - instance->init(); - return instance; - } + static MailProvidersManager * sharedManager(); - MailProvider * providerForEmail(String * email); - MailProvider * providerForMX(String * hostname); - MailProvider * providerForIdentifier(String * identifier); + virtual MailProvider * providerForEmail(String * email); + virtual MailProvider * providerForMX(String * hostname); + virtual MailProvider * providerForIdentifier(String * identifier); - void registerProviders(HashMap * providers); - void registerProvidersFilename(String * filename); + virtual void registerProvidersWithFilename(String * filename); private: MailProvidersManager(); - MailProvidersManager(MailProvidersManager const&); - void operator=(MailProvidersManager const&); + void registerProviders(HashMap * providers); HashMap * mProviders; diff --git a/src/core/provider/MCNetService.cc b/src/core/provider/MCNetService.cc index aef092e1..53ae7475 100644 --- a/src/core/provider/MCNetService.cc +++ b/src/core/provider/MCNetService.cc @@ -10,19 +10,39 @@ using namespace mailcore; -void NetService::init() { - +void NetService::init() +{ + mHostname = NULL; + mPort = 0; + mConnectionType = ConnectionTypeClear; } -NetService::NetService(HashMap * info) { +NetService::NetService() +{ init(); - +} + +NetService::~NetService() +{ + MC_SAFE_RELEASE(mHostname); +} + +NetService * NetService::serviceWithInfo(HashMap * info) +{ + NetService * service = new NetService(); + service->fillWithInfo(info); + service->autorelease(); + return service; +} + +void NetService::fillWithInfo(HashMap * info) +{ bool ssl = false; bool starttls = false; - this->setHostname((String *) info->objectForKey(MCSTR("hostname"))); + setHostname((String *) info->objectForKey(MCSTR("hostname"))); if (info->objectForKey(MCSTR("port")) != NULL) { - this->setPort(((Value *) info->objectForKey(MCSTR("port")))->intValue()); + setPort(((Value *) info->objectForKey(MCSTR("port")))->intValue()); } if (info->objectForKey(MCSTR("ssl")) != NULL) { ssl = ((Value *) info->objectForKey(MCSTR("ssl")))->boolValue(); @@ -41,13 +61,9 @@ NetService::NetService(HashMap * info) { } } -NetService::~NetService() { - delete mHostname; -} - void NetService::setHostname(String *hostname) { - mHostname = hostname; + MC_SAFE_REPLACE_COPY(String, mHostname, hostname); } String * NetService::hostname() @@ -75,7 +91,8 @@ ConnectionType NetService::connectionType() return mConnectionType; } -String * NetService::normalizedHostnameWithEmail(String * email) { +String * NetService::normalizedHostnameWithEmail(String * email) +{ Array *components = email->componentsSeparatedByString(MCSTR("@")); String *hostname = (String *) mHostname->copy(); if (components->count() != 0) { @@ -85,7 +102,8 @@ String * NetService::normalizedHostnameWithEmail(String * email) { return mHostname; } -HashMap * NetService::info() { +HashMap * NetService::info() +{ HashMap * result; result = new HashMap(); diff --git a/src/core/provider/MCNetService.h b/src/core/provider/MCNetService.h index c2560ec3..42c884f8 100644 --- a/src/core/provider/MCNetService.h +++ b/src/core/provider/MCNetService.h @@ -6,8 +6,8 @@ // Copyright (c) 2013 MailCore. All rights reserved. // -#ifndef __MAILCORE__MCNetService__ -#define __MAILCORE__MCNetService__ +#ifndef __MAILCORE_MCNETSERVICE_H_ +#define __MAILCORE_MCNETSERVICE_H_ #include <MailCore/MCBaseTypes.h> #include <MailCore/MCMessageConstants.h> @@ -18,28 +18,31 @@ namespace mailcore { class NetService : public Object { public: - NetService(HashMap * info); - ~NetService(); + NetService(); + virtual ~NetService(); - void setHostname(String * hostname); - String * hostname(); + virtual void setHostname(String * hostname); + virtual String * hostname(); - void setPort(unsigned int port); - unsigned int port(); + virtual void setPort(unsigned int port); + virtual unsigned int port(); - void setConnectionType(ConnectionType connectionType); - ConnectionType connectionType(); - - HashMap * info(); - - String * normalizedHostnameWithEmail(String * email); + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + virtual String * normalizedHostnameWithEmail(String * email); + + public: // serialization + static NetService * serviceWithInfo(HashMap * info); + virtual HashMap * info(); + private: String * mHostname; unsigned int mPort; ConnectionType mConnectionType; void init(); + void fillWithInfo(HashMap * info); }; } diff --git a/src/core/renderer/MCHTMLRendererCallback.c b/src/core/renderer/MCHTMLRendererCallback.cc index 4de4630c..4de4630c 100644 --- a/src/core/renderer/MCHTMLRendererCallback.c +++ b/src/core/renderer/MCHTMLRendererCallback.cc diff --git a/src/objc/imap/MCOIMAPSession.mm b/src/objc/imap/MCOIMAPSession.mm index 0be1afa3..9f00d1e7 100644 --- a/src/objc/imap/MCOIMAPSession.mm +++ b/src/objc/imap/MCOIMAPSession.mm @@ -138,9 +138,6 @@ MCO_OBJC_SYNTHESIZE_SCALAR(unsigned int, unsigned int, setMaximumConnections, ma requestKind:(MCOIMAPMessagesRequestKind)requestKind uids:(MCOIndexSet *)uids { - NSLog(@"1:%p", MCO_NATIVE_INSTANCE); - NSLog(@"2:%p", [folder mco_mcString]); - NSLog(@"3:%p", MCO_FROM_OBJC(IndexSet, uids)); IMAPFetchMessagesOperation * coreOp = MCO_NATIVE_INSTANCE->fetchMessagesByUIDOperation([folder mco_mcString], (IMAPMessagesRequestKind) requestKind, MCO_FROM_OBJC(IndexSet, uids)); diff --git a/src/objc/provider/MCOMailProvider.mm b/src/objc/provider/MCOMailProvider.mm index 4eb5f9fb..e8d80407 100644 --- a/src/objc/provider/MCOMailProvider.mm +++ b/src/objc/provider/MCOMailProvider.mm @@ -7,16 +7,27 @@ // #import "MCOMailProvider.h" + +#include <typeinfo> + #include "MCMailProvider.h" #import "NSDictionary+MCO.h" #import "NSArray+MCO.h" #import "NSString+MCO.h" +#import "NSObject+MCO.h" @implementation MCOMailProvider { mailcore::MailProvider * _provider; } +#define nativeType mailcore::MailProvider + ++ (void) load +{ + MCORegisterClass(self, &typeid(nativeType)); +} + - (mailcore::Object *) mco_mcObject { return _provider; @@ -25,40 +36,42 @@ + (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object { mailcore::MailProvider * provider = (mailcore::MailProvider *) object; - return [[self alloc] initWithProvider:provider]; + return [[self alloc] initWithMCProvider:provider]; } - (id) initWithInfo:(NSDictionary *)info { self = [super init]; - _provider = new mailcore::MailProvider([info mco_mcHashMap]); + _provider = mailcore::MailProvider::providerWithInfo([info mco_mcHashMap]); + _provider->retain(); return self; } -- (id) initWithProvider:(mailcore::MailProvider *)provider +- (id) initWithMCProvider:(mailcore::MailProvider *)provider { self = [super init]; _provider = provider; + _provider->retain(); return self; } - (NSArray *) imapServices { - return [NSArray mco_arrayWithMCArray:_provider->imapServices()]; + return MCO_OBJC_BRIDGE_GET(imapServices); } - (NSArray *) smtpServices { - return [NSArray mco_arrayWithMCArray:_provider->smtpServices()]; + return MCO_OBJC_BRIDGE_GET(smtpServices); } - (NSArray *) popServices { - return [NSArray mco_arrayWithMCArray:_provider->popServices()]; + return MCO_OBJC_BRIDGE_GET(popServices); } - (BOOL) matchEmail:(NSString *)email @@ -73,40 +86,41 @@ - (NSString *) sentMailFolderPath { - return [NSString mco_stringWithMCString:_provider->sentMailFolderPath()]; + return MCO_OBJC_BRIDGE_GET(sentMailFolderPath); } - (NSString *) starredFolderPath { - return [NSString mco_stringWithMCString:_provider->starredFolderPath()]; + return MCO_OBJC_BRIDGE_GET(starredFolderPath); } - (NSString *) allMailFolderPath { - return [NSString mco_stringWithMCString:_provider->allMailFolderPath()]; + return MCO_OBJC_BRIDGE_GET(allMailFolderPath); } - (NSString *) trashFolderPath { - return [NSString mco_stringWithMCString:_provider->trashFolderPath()]; + return MCO_OBJC_BRIDGE_GET(trashFolderPath); } - (NSString *) draftsFolderPath { - return [NSString mco_stringWithMCString:_provider->draftsFolderPath()]; + return MCO_OBJC_BRIDGE_GET(draftsFolderPath); } - (NSString *) spamFolderPath { - return [NSString mco_stringWithMCString:_provider->spamFolderPath()]; + return MCO_OBJC_BRIDGE_GET(spamFolderPath); } - (NSString *) importantFolderPath { - return [NSString mco_stringWithMCString:_provider->spamFolderPath()]; + return MCO_OBJC_BRIDGE_GET(importantFolderPath); } -- (BOOL) isMainFolder:(NSString *)folderPath prefix:(NSString *)prefix { +- (BOOL) isMainFolder:(NSString *)folderPath prefix:(NSString *)prefix +{ return _provider->isMainFolder(folderPath.mco_mcString, prefix.mco_mcString); } diff --git a/src/objc/provider/MCOMailProvidersManager.h b/src/objc/provider/MCOMailProvidersManager.h index 55b5e6af..78d10ff2 100644 --- a/src/objc/provider/MCOMailProvidersManager.h +++ b/src/objc/provider/MCOMailProvidersManager.h @@ -17,7 +17,5 @@ - (MCOMailProvider *) providerForEmail:(NSString *)email; - (MCOMailProvider *) providerForMX:(NSString *)hostname; - (MCOMailProvider *) providerForIdentifier:(NSString *)identifier; -- (void) registerProviders:(NSDictionary *)providers; -- (void) registerProvidersFilename:(NSString *)filename; @end diff --git a/src/objc/provider/MCOMailProvidersManager.mm b/src/objc/provider/MCOMailProvidersManager.mm index f7b11cb9..8f12aa11 100644 --- a/src/objc/provider/MCOMailProvidersManager.mm +++ b/src/objc/provider/MCOMailProvidersManager.mm @@ -18,7 +18,7 @@ + (MCOMailProvidersManager *) sharedManager { - static MCOMailProvidersManager *sharedInstance = nil; + static MCOMailProvidersManager * sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[self alloc] init]; \ @@ -31,39 +31,29 @@ NSString * filename; self = [super init]; - + filename = [[NSBundle bundleForClass:[self class]] pathForResource:@"providers" ofType:@"json"]; - [self registerProvidersFilename:filename]; + mailcore::MailProvidersManager::sharedManager()->registerProvidersWithFilename(filename.mco_mcString); return self; } -- (void) registerProviders:(NSDictionary *)providers -{ - mailcore::MailProvidersManager::sharedManager()->registerProviders(providers.mco_mcHashMap); -} - -- (void) registerProvidersFilename:(NSString *)filename -{ - mailcore::MailProvidersManager::sharedManager()->registerProvidersFilename(filename.mco_mcString); -} - - (MCOMailProvider *) providerForEmail:(NSString *)email { mailcore::MailProvider *provider = mailcore::MailProvidersManager::sharedManager()->providerForEmail(email.mco_mcString); - return [MCOMailProvider mco_objectWithMCObject:(mailcore::Object *) provider]; + return MCO_TO_OBJC(provider); } - (MCOMailProvider *) providerForMX:(NSString *)hostname { mailcore::MailProvider *provider = mailcore::MailProvidersManager::sharedManager()->providerForMX(hostname.mco_mcString); - return [MCOMailProvider mco_objectWithMCObject:(mailcore::Object *) provider]; + return MCO_TO_OBJC(provider); } - (MCOMailProvider *) providerForIdentifier:(NSString *)identifier { mailcore::MailProvider *provider = mailcore::MailProvidersManager::sharedManager()->providerForIdentifier(identifier.mco_mcString); - return [MCOMailProvider mco_objectWithMCObject:(mailcore::Object *) provider]; + return MCO_TO_OBJC(provider); } @end diff --git a/src/objc/provider/MCONetService.h b/src/objc/provider/MCONetService.h index e1e02141..06a9f2af 100644 --- a/src/objc/provider/MCONetService.h +++ b/src/objc/provider/MCONetService.h @@ -7,21 +7,15 @@ // #import <Foundation/Foundation.h> - -typedef enum { - MCONetServiceConnectionTypeClear = 1 << 0, - MCONetServiceConnectionTypeStartTLS = 1 << 1, - MCONetServiceConnectionTypeTLS = 1 << 2, - MCONetServiceConnectionTypeMask = (MCONetServiceConnectionTypeClear | MCONetServiceConnectionTypeStartTLS | MCONetServiceConnectionTypeTLS) -} MCONetServiceConnectionType; +#import <MailCore/MCOConstants.h> @interface MCONetService : NSObject @property (nonatomic, copy) NSString * hostname; @property (nonatomic, assign) unsigned int port; -@property (nonatomic, assign) MCONetServiceConnectionType connectionType; +@property (nonatomic, assign) MCOConnectionType connectionType; -+ (MCONetService *) netServiceWithInfo:(NSDictionary *)info; ++ (MCONetService *) serviceWithInfo:(NSDictionary *)info; - (id) initWithInfo:(NSDictionary *)info; - (NSDictionary *) info; diff --git a/src/objc/provider/MCONetService.mm b/src/objc/provider/MCONetService.mm index eb2ad6f5..614e2337 100644 --- a/src/objc/provider/MCONetService.mm +++ b/src/objc/provider/MCONetService.mm @@ -11,11 +11,14 @@ #import "NSDictionary+MCO.h" #import "NSString+MCO.h" +#import "NSObject+MCO.h" @implementation MCONetService { mailcore::NetService * _netService; } +#define nativeType mailcore::NetService + - (mailcore::Object *) mco_mcObject { return _netService; @@ -29,14 +32,15 @@ + (MCONetService *) netServiceWithInfo:(NSDictionary *)info { - return [[[MCONetService alloc] initWithInfo:info] autorelease]; + return [[[self alloc] initWithInfo:info] autorelease]; } - (id) initWithInfo:(NSDictionary *)info { self = [super init]; - _netService = new mailcore::NetService(info.mco_mcHashMap); + _netService = mailcore::NetService::serviceWithInfo(info.mco_mcHashMap); + _netService->retain(); return self; } @@ -46,29 +50,14 @@ self = [super init]; _netService = netService; + _netService->retain(); return self; } -- (void) setHostname:(NSString *)hostname { - _netService->setHostname(hostname.mco_mcString); -} - -- (NSString *) hostname { - return [NSString mco_stringWithMCString:_netService->hostname()]; -} - -- (void) setPort:(unsigned int)port { - _netService->setPort(port); -} - -- (unsigned int) port { - return _netService->port(); -} - -- (MCONetServiceConnectionType) connectionType { - return (MCONetServiceConnectionType) _netService->connectionType(); -} +MCO_OBJC_SYNTHESIZE_STRING(setHostname, hostname) +MCO_OBJC_SYNTHESIZE_SCALAR(unsigned int, unsigned int, setPort, port) +MCO_OBJC_SYNTHESIZE_SCALAR(MCOConnectionType, mailcore::ConnectionType, setConnectionType, connectionType) - (NSDictionary *) info { |