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
|