summaryrefslogtreecommitdiffabout
path: root/kmicromail/libmailwrapper/statusmail.cpp
blob: 90c9233510882f672e02f4ee5f461af545b2fbbe (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
#include "statusmail.h"



using namespace Opie::Core;

StatusMail::StatusMail(QList<Account>&list)
{
    currentImapStat.message_count=0;
    currentImapStat.message_unseen=0;
    currentImapStat.message_recent=0;
    lastPop3Stat = currentImapStat;
    currentPop3Stat = currentImapStat;
    connectionList.setAutoDelete(true);
    connectionList.clear();
    initAccounts(list);
}

StatusMail::~StatusMail()
{
}

void StatusMail::initAccounts(QList<Account>&accounts)
{

    Account *it;
    folderStat currentStat;
    AbstractMail * current = 0;
    currentPop3Stat.message_count=0;
    currentPop3Stat.message_recent=0;
    currentPop3Stat.message_unseen=0;
    for ( it = accounts.first(); it; it = accounts.next() ) {
        if ( it->getType()==MAILLIB::A_IMAP && !it->getOffline() ) {
            IMAPaccount*ima = static_cast<IMAPaccount *>(it);
            current = AbstractMail::getWrapper(ima);
            connectionList.append(current);
            current->statusFolder(currentStat);
            currentImapStat.message_count+=currentStat.message_unseen;
            currentImapStat.message_count+=currentStat.message_recent;
            currentImapStat.message_count+=currentStat.message_count;
        } else if ( it->getType() == MAILLIB::A_POP3 && !it->getOffline() ) {
            POP3account *pop3 = static_cast<POP3account *>(it);
            current = AbstractMail::getWrapper(pop3);
            connectionList.append(current);
            current->statusFolder(currentStat);
            currentPop3Stat.message_count+=currentStat.message_count;
        }
        current->logout();
    }
    ; //  << "Pop3 init count: " << currentPop3Stat.message_count << "" << oendl; 
    currentPop3Stat.message_recent = currentPop3Stat.message_unseen = 0;
    lastPop3Stat.message_unseen = currentPop3Stat.message_unseen;
    lastPop3Stat.message_recent = currentPop3Stat.message_recent;
    lastPop3Stat.message_count = currentPop3Stat.message_count;
}

void StatusMail::reset_status()
{
    lastPop3Stat = currentPop3Stat;
}

void StatusMail::check_current_stat(folderStat&targetStat)
{
    AbstractMail*it = 0;
    folderStat currentStat;
    currentPop3Stat.message_recent = 0;
    currentPop3Stat.message_count = 0;
    currentPop3Stat.message_unseen = 0;
    currentImapStat = currentPop3Stat;
    for ( it = connectionList.first(); it; it = connectionList.next() ) {
        it->statusFolder(currentStat);
        it->logout();
        if (it->getType() == MAILLIB::A_IMAP) {
            currentImapStat.message_unseen+=currentStat.message_unseen;
            currentImapStat.message_recent+=currentStat.message_recent;
            currentImapStat.message_count+=currentStat.message_count;
        } else if (it->getType() == MAILLIB::A_POP3) {
            currentPop3Stat.message_count+=currentStat.message_count;
            ; //  << "Pop3 count: " << currentPop3Stat.message_count << "" << oendl; 
        }
    }
    ; //  << "Pop3 last: " << lastPop3Stat.message_count << "" << oendl; 
    if (currentPop3Stat.message_count > lastPop3Stat.message_count) {
        currentPop3Stat.message_recent = currentPop3Stat.message_count - lastPop3Stat.message_count;
        currentPop3Stat.message_unseen = currentPop3Stat.message_recent;
    } else {
        lastPop3Stat.message_count = currentPop3Stat.message_count;
        currentPop3Stat.message_recent = currentPop3Stat.message_unseen = 0;
    }
    targetStat = currentImapStat;
    targetStat.message_unseen+=currentPop3Stat.message_unseen;
    targetStat.message_recent+=currentPop3Stat.message_recent;
    targetStat.message_count+=currentPop3Stat.message_count;
}