aboutsummaryrefslogtreecommitdiffhomepage
path: root/example/mac/macExample/macExample/AppDelegate.m
blob: 8ba89c37e2708bd84c4284fcc4168e6f6656d962 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
//
//  AppDelegate.m
//  testUI
//
//  Created by DINH Viêt Hoà on 1/19/13.
//  Copyright (c) 2013 MailCore. All rights reserved.
//

#import "AppDelegate.h"

#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

- (void) dealloc
{
    [super dealloc];
}

- (void) awakeFromNib
{
	[[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
{
    NSLog(@"try login");
	[[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];
	
		[self willChangeValueForKey:@"loggingIn"];
                
        [self.checkOp release];
        _checkOp = nil;
        [self.session release];
        _session = nil;
		
		[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
{
    [_checkOp cancel];
    [_checkOp release];
    _checkOp = nil;
    [_session release];
    _session = nil;
}

+ (NSSet *)keyPathsForValuesAffectingLoginEnabled
{
	return [NSSet setWithObjects:@"password", @"login", @"hostname", nil];
}

+ (NSSet *)keyPathsForValuesAffectingLoggingIn
{
	return [NSSet setWithObjects:@"checkOp", nil];
}

- (BOOL)loginEnabled
{
	return self.password.length && self.login.length && self.hostname.length && _checkOp == nil;
}

- (BOOL)loggingIn
{
	return (self.checkOp != nil);
}

@end