aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-05-04 23:17:33 -0700
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-05-04 23:17:33 -0700
commit55f998e5076e6ee5607580a56bdac68e605e1050 (patch)
tree8313b526775f494806ff82f67d0f6e31e39ab6bb
parentcf0e72e7f751413c57b0a2dd1c7adcf7e1a37c38 (diff)
Cleaned provider implementation
-rw-r--r--build-mac/mailcore2.xcodeproj/project.pbxproj12
-rw-r--r--src/core/provider/MCMailProvider.cc84
-rw-r--r--src/core/provider/MCMailProvider.h47
-rw-r--r--src/core/provider/MCMailProvidersManager.cc15
-rw-r--r--src/core/provider/MCMailProvidersManager.h25
-rw-r--r--src/core/provider/MCNetService.cc44
-rw-r--r--src/core/provider/MCNetService.h31
-rw-r--r--src/core/renderer/MCHTMLRendererCallback.cc (renamed from src/core/renderer/MCHTMLRendererCallback.c)0
-rw-r--r--src/objc/imap/MCOIMAPSession.mm3
-rw-r--r--src/objc/provider/MCOMailProvider.mm42
-rw-r--r--src/objc/provider/MCOMailProvidersManager.h2
-rw-r--r--src/objc/provider/MCOMailProvidersManager.mm22
-rw-r--r--src/objc/provider/MCONetService.h12
-rw-r--r--src/objc/provider/MCONetService.mm31
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
{