diff options
author | 2013-05-04 23:17:33 -0700 | |
---|---|---|
committer | 2013-05-04 23:17:33 -0700 | |
commit | 55f998e5076e6ee5607580a56bdac68e605e1050 (patch) | |
tree | 8313b526775f494806ff82f67d0f6e31e39ab6bb /src/core/provider | |
parent | cf0e72e7f751413c57b0a2dd1c7adcf7e1a37c38 (diff) |
Cleaned provider implementation
Diffstat (limited to 'src/core/provider')
-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 |
6 files changed, 138 insertions, 108 deletions
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); }; } |