aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/async/imap/MCIMAPMultiDisconnectOperation.cpp
blob: f6d0b180c2fa6754681803ef8c60ad75c2eb67c9 (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
//
//  MCIMAPMultiDisconnectOperation.cc
//  mailcore2
//
//  Created by Hoa V. DINH on 11/7/13.
//  Copyright (c) 2013 MailCore. All rights reserved.
//

#include "MCIMAPMultiDisconnectOperation.h"

using namespace mailcore;

IMAPMultiDisconnectOperation::IMAPMultiDisconnectOperation()
{
    _count = 0;
    _operations = new Array();
}

IMAPMultiDisconnectOperation::~IMAPMultiDisconnectOperation()
{
    MC_SAFE_RELEASE(_operations);
}

void IMAPMultiDisconnectOperation::addOperation(IMAPOperation * op)
{
    _operations->addObject(op);
}

void IMAPMultiDisconnectOperation::start()
{
    if (_operations->count() == 0) {
        if (callback() != NULL) {
            callback()->operationFinished(this);
        }
        return;
    }
    
    retain();
    mc_foreacharray(IMAPOperation, op, _operations) {
#if __APPLE__
        op->setCallbackDispatchQueue(this->callbackDispatchQueue());
#endif
        op->setCallback(this);
        op->start();
    }
}

void IMAPMultiDisconnectOperation::operationFinished(Operation * op)
{
    _count ++;
    if (_count == _operations->count()) {
        if (callback() != NULL) {
            callback()->operationFinished(this);
        }
        release();
    }
}