aboutsummaryrefslogtreecommitdiffhomepage
path: root/example/mac/macExample/macExample/MCTMsgListViewController.m
blob: 0d7cee7a104913e9c734ca289bea0dc417c0e779 (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
//
//  MCTMsgListViewController.m
//  testUI
//
//  Created by DINH Viêt Hoà on 1/20/13.
//  Copyright (c) 2013 MailCore. All rights reserved.
//

#import "MCTMsgListViewController.h"

#include <MailCore/MailCore.h>

#import "MCTMsgViewController.h"
#import "FXKeychain.h"

#define FOLDER @"INBOX"

@interface MCTMsgListViewController () <NSTableViewDelegate, NSTableViewDataSource>
@property (nonatomic, assign) BOOL loading;
@end

@implementation MCTMsgListViewController

- (void) connectWithHostname:(NSString *)hostname
                       login:(NSString *)login
                    password:(NSString *)password
                 oauth2Token:(NSString *)oauth2Token
{
    [_msgViewController setFolder:FOLDER];

    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"OAuth2Enabled"]) {
        if (([login length] == 0) || ([oauth2Token length] == 0))
            return;
    }
    else {
        if (([login length] == 0) || ([password length] == 0))
            return;
    }
    
	self.loading = YES;
	
    _session = [[MCOIMAPSession alloc] init];
    [_session setHostname:hostname];
    [_session setPort:993];
    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"OAuth2Enabled"]) {
        [_session setUsername:login];
        [_session setOAuth2Token:oauth2Token];
        [_session setAuthType:MCOAuthTypeXOAuth2];
    }
    else {
        [_session setUsername:login];
        [_session setPassword:password];
    }
    [_session setConnectionType:MCOConnectionTypeTLS];
    
    MCOIMAPMessagesRequestKind requestKind = (MCOIMAPMessagesRequestKind)
    (MCOIMAPMessagesRequestKindHeaders | MCOIMAPMessagesRequestKindStructure |
     MCOIMAPMessagesRequestKindInternalDate | MCOIMAPMessagesRequestKindHeaderSubject |
     MCOIMAPMessagesRequestKindFlags);
    
    _op = [_session fetchMessagesByUIDOperationWithFolder:FOLDER requestKind:requestKind uids:[MCOIndexSet indexSetWithRange:MCORangeMake(1, UINT64_MAX)]];
    [_op setProgress:^(unsigned int current){
        //NSLog(@"progress: %u", current);
    }];
    [_op start:^(NSError * error, NSArray * messages, MCOIndexSet * vanishedMessages) {
        [_messages release];
		
		// Sort the messages with the most recent first.
		NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"header.date" ascending:NO];
        _messages = [[messages sortedArrayUsingDescriptors:@[sort]] retain];
		
        NSLog(@"error: %@", error);
        NSLog(@"%i messages", (int) [_messages count]);
        //NSLog(@"%@", _messages);
        [_tableView reloadData];
		self.loading = NO;
    }];
}

- (NSInteger) numberOfRowsInTableView:(NSTableView *)aTableView
{
    return [_messages count];
}

- (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
    MCOIMAPMessage * msg = [_messages objectAtIndex:rowIndex];
    return [[msg header] subject];
}

- (void) tableViewSelectionDidChange:(NSNotification *)notification
{
    int rowIndex = (int) [_tableView selectedRow];
    if (rowIndex == -1) {
        [_msgViewController setSession:nil];
        [_msgViewController setMessage:nil];
    }
    else {
        MCOIMAPMessage * msg = [_messages objectAtIndex:rowIndex];
        [_msgViewController setSession:_session];
        [_msgViewController setMessage:msg];
    }
}

@end