aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objc/provider
diff options
context:
space:
mode:
authorGravatar CodaFi <devteam.codafi@gmail.com>2013-04-28 17:37:52 -0600
committerGravatar CodaFi <devteam.codafi@gmail.com>2013-04-28 17:37:52 -0600
commitd9da8ea6e22361a35c0bf94237c8c16d5021a3b4 (patch)
treee5e68ac9a9906d128c2179b82cd8b60c8a64c721 /src/objc/provider
parent10c9d0abf0e8009277fb2006cffb76b8a26865c7 (diff)
Providers API
Diffstat (limited to 'src/objc/provider')
-rw-r--r--src/objc/provider/MCOMailProvider.h32
-rw-r--r--src/objc/provider/MCOMailProvider.mm113
-rw-r--r--src/objc/provider/MCOMailProvidersManager.h23
-rw-r--r--src/objc/provider/MCOMailProvidersManager.mm69
-rw-r--r--src/objc/provider/MCONetService.h29
-rw-r--r--src/objc/provider/MCONetService.mm90
6 files changed, 356 insertions, 0 deletions
diff --git a/src/objc/provider/MCOMailProvider.h b/src/objc/provider/MCOMailProvider.h
new file mode 100644
index 00000000..6a5ed9b4
--- /dev/null
+++ b/src/objc/provider/MCOMailProvider.h
@@ -0,0 +1,32 @@
+//
+// MCOMailProvider.h
+// mailcore2
+//
+// Created by Robert Widmann on 4/28/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface MCOMailProvider : NSObject
+
+@property (nonatomic, copy) NSString * identifier;
+
+- (id) initWithInfo:(NSDictionary *)info;
+
+- (NSArray *) imapServices;
+- (NSArray *) smtpServices;
+- (NSArray *) popServices;
+
+- (BOOL) matchEmail:(NSString *)email;
+- (BOOL) matchMX:(NSString *)hostname;
+
+- (NSString *) sentMailFolderPath;
+- (NSString *) starredFolderPath;
+- (NSString *) allMailFolderPath;
+- (NSString *) trashFolderPath;
+- (NSString *) draftsFolderPath;
+- (NSString *) spamFolderPath;
+- (NSString *) importantFolderPath;
+
+@end
diff --git a/src/objc/provider/MCOMailProvider.mm b/src/objc/provider/MCOMailProvider.mm
new file mode 100644
index 00000000..4eb5f9fb
--- /dev/null
+++ b/src/objc/provider/MCOMailProvider.mm
@@ -0,0 +1,113 @@
+//
+// MCOMailProvider.m
+// mailcore2
+//
+// Created by Robert Widmann on 4/28/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import "MCOMailProvider.h"
+#include "MCMailProvider.h"
+
+#import "NSDictionary+MCO.h"
+#import "NSArray+MCO.h"
+#import "NSString+MCO.h"
+
+@implementation MCOMailProvider {
+ mailcore::MailProvider * _provider;
+}
+
+- (mailcore::Object *) mco_mcObject
+{
+ return _provider;
+}
+
++ (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ mailcore::MailProvider * provider = (mailcore::MailProvider *) object;
+ return [[self alloc] initWithProvider:provider];
+}
+
+- (id) initWithInfo:(NSDictionary *)info
+{
+ self = [super init];
+
+ _provider = new mailcore::MailProvider([info mco_mcHashMap]);
+
+ return self;
+}
+
+- (id) initWithProvider:(mailcore::MailProvider *)provider
+{
+ self = [super init];
+
+ _provider = provider;
+
+ return self;
+}
+
+- (NSArray *) imapServices
+{
+ return [NSArray mco_arrayWithMCArray:_provider->imapServices()];
+}
+
+- (NSArray *) smtpServices
+{
+ return [NSArray mco_arrayWithMCArray:_provider->smtpServices()];
+}
+
+- (NSArray *) popServices
+{
+ return [NSArray mco_arrayWithMCArray:_provider->popServices()];
+}
+
+- (BOOL) matchEmail:(NSString *)email
+{
+ return _provider->matchEmail(email.mco_mcString);
+}
+
+- (BOOL) matchMX:(NSString *)hostname
+{
+ return _provider->matchMX(hostname.mco_mcString);
+}
+
+- (NSString *) sentMailFolderPath
+{
+ return [NSString mco_stringWithMCString:_provider->sentMailFolderPath()];
+}
+
+- (NSString *) starredFolderPath
+{
+ return [NSString mco_stringWithMCString:_provider->starredFolderPath()];
+}
+
+- (NSString *) allMailFolderPath
+{
+ return [NSString mco_stringWithMCString:_provider->allMailFolderPath()];
+}
+
+- (NSString *) trashFolderPath
+{
+ return [NSString mco_stringWithMCString:_provider->trashFolderPath()];
+}
+
+- (NSString *) draftsFolderPath
+{
+ return [NSString mco_stringWithMCString:_provider->draftsFolderPath()];
+}
+
+- (NSString *) spamFolderPath
+{
+ return [NSString mco_stringWithMCString:_provider->spamFolderPath()];
+}
+
+- (NSString *) importantFolderPath
+{
+ return [NSString mco_stringWithMCString:_provider->spamFolderPath()];
+}
+
+- (BOOL) isMainFolder:(NSString *)folderPath prefix:(NSString *)prefix {
+ return _provider->isMainFolder(folderPath.mco_mcString, prefix.mco_mcString);
+}
+
+@end
diff --git a/src/objc/provider/MCOMailProvidersManager.h b/src/objc/provider/MCOMailProvidersManager.h
new file mode 100644
index 00000000..55b5e6af
--- /dev/null
+++ b/src/objc/provider/MCOMailProvidersManager.h
@@ -0,0 +1,23 @@
+//
+// MCOMailProvidersManager.h
+// mailcore2
+//
+// Created by Robert Widmann on 4/28/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class MCOMailProvider;
+
+@interface MCOMailProvidersManager : NSObject
+
++ (MCOMailProvidersManager *) sharedManager;
+
+- (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
new file mode 100644
index 00000000..f7b11cb9
--- /dev/null
+++ b/src/objc/provider/MCOMailProvidersManager.mm
@@ -0,0 +1,69 @@
+//
+// MCOMailProvidersManager.m
+// mailcore2
+//
+// Created by Robert Widmann on 4/28/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import "MCOMailProvidersManager.h"
+#include "MCMailProvidersManager.h"
+#import "MCOMailProvider.h"
+
+#import "NSString+MCO.h"
+#import "NSDictionary+MCO.h"
+#import "NSObject+MCO.h"
+
+@implementation MCOMailProvidersManager
+
++ (MCOMailProvidersManager *) sharedManager
+{
+ static MCOMailProvidersManager *sharedInstance = nil;
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ sharedInstance = [[self alloc] init]; \
+ });
+ return sharedInstance;
+}
+
+- (id) init
+{
+ NSString * filename;
+
+ self = [super init];
+
+ filename = [[NSBundle bundleForClass:[self class]] pathForResource:@"providers" ofType:@"json"];
+ [self registerProvidersFilename:filename];
+
+ 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];
+}
+
+- (MCOMailProvider *) providerForMX:(NSString *)hostname
+{
+ mailcore::MailProvider *provider = mailcore::MailProvidersManager::sharedManager()->providerForMX(hostname.mco_mcString);
+ return [MCOMailProvider mco_objectWithMCObject:(mailcore::Object *) provider];
+}
+
+- (MCOMailProvider *) providerForIdentifier:(NSString *)identifier
+{
+ mailcore::MailProvider *provider = mailcore::MailProvidersManager::sharedManager()->providerForIdentifier(identifier.mco_mcString);
+ return [MCOMailProvider mco_objectWithMCObject:(mailcore::Object *) provider];
+}
+
+@end
diff --git a/src/objc/provider/MCONetService.h b/src/objc/provider/MCONetService.h
new file mode 100644
index 00000000..e1e02141
--- /dev/null
+++ b/src/objc/provider/MCONetService.h
@@ -0,0 +1,29 @@
+//
+// MCONetService.h
+// mailcore2
+//
+// Created by Robert Widmann on 4/28/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+typedef enum {
+ MCONetServiceConnectionTypeClear = 1 << 0,
+ MCONetServiceConnectionTypeStartTLS = 1 << 1,
+ MCONetServiceConnectionTypeTLS = 1 << 2,
+ MCONetServiceConnectionTypeMask = (MCONetServiceConnectionTypeClear | MCONetServiceConnectionTypeStartTLS | MCONetServiceConnectionTypeTLS)
+} MCONetServiceConnectionType;
+
+@interface MCONetService : NSObject
+
+@property (nonatomic, copy) NSString * hostname;
+@property (nonatomic, assign) unsigned int port;
+@property (nonatomic, assign) MCONetServiceConnectionType connectionType;
+
++ (MCONetService *) netServiceWithInfo:(NSDictionary *)info;
+
+- (id) initWithInfo:(NSDictionary *)info;
+- (NSDictionary *) info;
+
+@end
diff --git a/src/objc/provider/MCONetService.mm b/src/objc/provider/MCONetService.mm
new file mode 100644
index 00000000..eb2ad6f5
--- /dev/null
+++ b/src/objc/provider/MCONetService.mm
@@ -0,0 +1,90 @@
+//
+// MCONetService.m
+// mailcore2
+//
+// Created by Robert Widmann on 4/28/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import "MCONetService.h"
+#include "MCNetService.h"
+
+#import "NSDictionary+MCO.h"
+#import "NSString+MCO.h"
+
+@implementation MCONetService {
+ mailcore::NetService * _netService;
+}
+
+- (mailcore::Object *) mco_mcObject
+{
+ return _netService;
+}
+
++ (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ mailcore::NetService * netService = (mailcore::NetService *) object;
+ return [[self alloc] initWithNetService:netService];
+}
+
++ (MCONetService *) netServiceWithInfo:(NSDictionary *)info
+{
+ return [[[MCONetService alloc] initWithInfo:info] autorelease];
+}
+
+- (id) initWithInfo:(NSDictionary *)info
+{
+ self = [super init];
+
+ _netService = new mailcore::NetService(info.mco_mcHashMap);
+
+ return self;
+}
+
+- (id) initWithNetService:(mailcore::NetService *)netService
+{
+ self = [super init];
+
+ _netService = netService;
+
+ 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();
+}
+
+- (NSDictionary *) info
+{
+ return [NSDictionary mco_dictionaryWithMCHashMap:_netService->info()];
+}
+
+- (NSString*)hostnameWithEmail:(NSString*)email
+{
+ NSString *result = nil;
+ NSArray *components = [email componentsSeparatedByString:@"@"];
+ if (components.count == 0) {
+ return self.hostname;
+ } else {
+ result = [self.hostname stringByReplacingOccurrencesOfString:@"{domain}" withString:[components lastObject]];
+ }
+ return [NSString mco_stringWithMCString:_netService->normalizedHostnameWithEmail(email.mco_mcString)];
+}
+
+@end