aboutsummaryrefslogtreecommitdiffhomepage
path: root/example/mac/macExample/macExample/AppDelegate.m
diff options
context:
space:
mode:
Diffstat (limited to 'example/mac/macExample/macExample/AppDelegate.m')
-rw-r--r--example/mac/macExample/macExample/AppDelegate.m143
1 files changed, 66 insertions, 77 deletions
diff --git a/example/mac/macExample/macExample/AppDelegate.m b/example/mac/macExample/macExample/AppDelegate.m
index 12c744e8..8ba89c37 100644
--- a/example/mac/macExample/macExample/AppDelegate.m
+++ b/example/mac/macExample/macExample/AppDelegate.m
@@ -11,15 +11,20 @@
#import <MailCore/MailCore.h>
#import "MCTMsgListViewController.h"
+#import "FXKeychain.h"
@interface AppDelegate () <NSTextFieldDelegate>
+@property (nonatomic, copy) NSString *login;
+@property (nonatomic, copy) NSString *hostname;
+@property (nonatomic, copy) NSString *password;
+@property (nonatomic, readonly) BOOL loginEnabled;
+@property (nonatomic, readonly) BOOL loggingIn;
+@property (nonatomic, retain) MCOIMAPSession *session;
+@property (nonatomic, retain) MCOIMAPOperation *checkOp;
@end
-@implementation AppDelegate {
- MCOIMAPSession * _session;
- MCOIMAPOperation * _checkOp;
-}
+@implementation AppDelegate
- (void) dealloc
{
@@ -28,61 +33,57 @@
- (void) awakeFromNib
{
- [_loginTextField setDelegate:self];
- [_passwordTextField setDelegate:self];
-}
-
-- (void) applicationDidFinishLaunching:(NSNotification *)aNotification
-{
- [self _updateState];
-
- NSString * login = [[NSUserDefaults standardUserDefaults] stringForKey:@"Login"];
- NSString * password = [[NSUserDefaults standardUserDefaults] stringForKey:@"Password"];
-
- if (([login length] == 0) || ([password length] == 0)) {
- [_accountWindow makeKeyAndOrderFront:nil];
- }
- else {
- [_loginTextField setStringValue:login];
- [_passwordTextField setStringValue:password];
- }
+ [[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"Hostname": @"imap.gmail.com" }];
+
+ self.login = [[NSUserDefaults standardUserDefaults] stringForKey:@"Login"];
+ self.hostname = [[NSUserDefaults standardUserDefaults] stringForKey:@"Hostname"];
+ self.password = [[FXKeychain defaultKeychain] objectForKey:@"Password"];
+
+ if (self.login.length && self.password.length) {
+ [self accountLogin:nil];
+ } else {
+ [_accountWindow makeKeyAndOrderFront:nil];
+ }
}
- (void) accountLogin:(id)sender
{
- NSString * login = [_loginTextField stringValue];
- NSString * password = [_passwordTextField stringValue];
-
NSLog(@"try login");
- _session = [[MCOIMAPSession alloc] init];
- [_session setHostname:@"imap.gmail.com"];
- [_session setPort:993];
- [_session setUsername:login];
- [_session setPassword:password];
- [_session setConnectionType:MCOConnectionTypeTLS];
- _checkOp = [[_session checkAccountOperation] retain];
- NSLog(@"start op");
- [_checkOp start:^(NSError * error) {
+ [[NSUserDefaults standardUserDefaults] setObject:self.login forKey:@"Login"];
+ [[NSUserDefaults standardUserDefaults] setObject:self.hostname forKey:@"Hostname"];
+
+ if (![[[FXKeychain defaultKeychain] objectForKey:@"Password"] isEqualToString:self.password]) {
+ [[FXKeychain defaultKeychain] removeObjectForKey:@"Password"];
+ [[FXKeychain defaultKeychain] setObject:self.password forKey:@"Password"];
+ }
+
+ self.session = [[MCOIMAPSession alloc] init];
+ [self.session setHostname:self.hostname];
+ [self.session setPort:993];
+ [self.session setUsername:self.login];
+ [self.session setPassword:self.password];
+ [self.session setConnectionType:MCOConnectionTypeTLS];
+ self.checkOp = [self.session checkAccountOperation];
+
+ NSLog(@"start op");
+ [self.checkOp start:^(NSError * error) {
[_accountWindow orderOut:nil];
-
- NSString * login = [_loginTextField stringValue];
- NSString * password = [_passwordTextField stringValue];
- [[NSUserDefaults standardUserDefaults] setObject:login forKey:@"Login"];
- [[NSUserDefaults standardUserDefaults] setObject:password forKey:@"Password"];
-
- [_checkOp release];
+
+ [self willChangeValueForKey:@"loggingIn"];
+
+ [self.checkOp release];
_checkOp = nil;
- [_session release];
+ [self.session release];
_session = nil;
-
- [self _updateState];
-
- NSLog(@"op done %@", error);
-
- [_msgListViewController connect];
- }];
-
- [self _updateState];
+
+ [self didChangeValueForKey:@"loggingIn"];
+
+ NSLog(@"op done (error: %@)", error);
+ if (error != nil)
+ [_accountWindow makeKeyAndOrderFront:nil];
+
+ [_msgListViewController connectWithHostname:self.hostname login:self.login password:self.password];
+ }];
}
- (void) accountCancel:(id)sender
@@ -92,38 +93,26 @@
_checkOp = nil;
[_session release];
_session = nil;
-
- [self _updateState];
}
-- (void) _updateState
++ (NSSet *)keyPathsForValuesAffectingLoginEnabled
+{
+ return [NSSet setWithObjects:@"password", @"login", @"hostname", nil];
+}
+
++ (NSSet *)keyPathsForValuesAffectingLoggingIn
+{
+ return [NSSet setWithObjects:@"checkOp", nil];
+}
+
+- (BOOL)loginEnabled
{
- if (_checkOp == nil) {
- [_loginTextField setEnabled:YES];
- [_passwordTextField setEnabled:YES];
- NSString * login = [_loginTextField stringValue];
- NSString * password = [_passwordTextField stringValue];
- if (([login length] > 0) && ([password length] > 0)) {
- [_loginButton setEnabled:YES];
- }
- else {
- [_loginButton setEnabled:NO];
- }
- [_cancelButton setEnabled:NO];
- [_progressView stopAnimation:nil];
- }
- else {
- [_loginTextField setEnabled:NO];
- [_passwordTextField setEnabled:NO];
- [_loginButton setEnabled:NO];
- [_cancelButton setEnabled:YES];
- [_progressView startAnimation:nil];
- }
+ return self.password.length && self.login.length && self.hostname.length && _checkOp == nil;
}
-- (void) controlTextDidChange:(NSNotification *)aNotification
+- (BOOL)loggingIn
{
- [self _updateState];
+ return (self.checkOp != nil);
}
@end