summaryrefslogtreecommitdiff
path: root/noncore/net/mail/taskbarapplet/mailapplet.cpp
blob: 35198d1796778e6805b1d9432d31f49f1691c8df (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
119
120
121
122
123
124
125
126
127
128
#include <qpainter.h>
#include <qtimer.h>

#include <qpe/qcopenvelope_qws.h>
#include <qpe/resource.h>
#include <qpe/config.h>
#include <qpe/applnk.h>

#include <opie/odevice.h>

#include <libmailwrapper/settings.h>

#include "mailapplet.h"

using namespace Opie;

MailApplet::MailApplet( QWidget *parent )
: QWidget( parent ) {

    m_config = new Config( "mail" );
    m_config->setGroup( "Applet" );

    setFixedWidth( AppLnk::smallIconSize() );
    setFixedHeight( AppLnk::smallIconSize() );

    hide();

    m_newMails = 0;
    m_statusMail = 0l;

    if ( !m_config->readBoolEntry( "Disabled", false ) ) {
        // delay 5 sec until the whole mail backend gets started .-)
        QTimer::singleShot( 5000, this, SLOT( startup() ) );
    }
    repaint( true );
}


MailApplet::~MailApplet() {
    if ( m_statusMail )
        delete m_statusMail;
    if ( m_config )
        delete m_config;
}

void MailApplet::paintEvent( QPaintEvent* ) {
    QPainter p( this );
    p.drawPixmap( 0, 0, Resource::loadPixmap( "mail/mailchecker" ) );
    QFont f( "Fixed", AppLnk::smallIconSize() );
    QFontMetrics fm( f );
    p.setFont( f );
    p.drawText( AppLnk::smallIconSize()/2, AppLnk::smallIconSize()/2, QString::number( m_newMails ) );
    return;

}

void MailApplet::mouseReleaseEvent( QMouseEvent* e ) {
    slotClicked();
}

void MailApplet::slotClicked() {
    QCopEnvelope e( "QPE/System", "execute(QString)" );
    e << QString( "opiemail" );

    ODevice *device = ODevice::inst();
    if ( !device-> ledList().isEmpty() ) {
        OLed led = ( device->ledList().contains( Led_Mail ) ) ? Led_Mail : device->ledList()[0];

        device->setLedState( led, Led_Off );
    }

    // m_statusMails->reset_status();
}

void MailApplet::startup() {
    Settings *settings = new Settings();
    QList<Account> ma = settings->getAccounts();
    StatusMail m_statusMail = StatusMail( ma );
    delete settings;

    m_intervalMs = m_config->readNumEntry( "CheckEvery", 5 ) * 60000;
    m_intervalTimer = new QTimer();
    m_intervalTimer->start( m_intervalMs );
    connect( m_intervalTimer, SIGNAL( timeout() ), this, SLOT( slotCheck() ) );
}

void MailApplet::slotCheck() {
    // Check wether the check interval has been changed.
    int newIntervalMs = m_config->readNumEntry( "CheckEvery", 5 ) * 60000;
    if ( newIntervalMs != m_intervalMs ) {
        m_intervalTimer->changeInterval( newIntervalMs );
        m_intervalMs = newIntervalMs;
    }

    folderStat stat;
    m_statusMail->check_current_stat( stat );
    m_newMails = stat.message_unseen;
    qDebug( QString( "test %1" ).arg( m_newMails ) );
    if ( m_newMails > 0 ) {
        ODevice *device = ODevice::inst();
        if ( isHidden() )
            show();
        if ( m_config->readBoolEntry( "BlinkLed", true ) ) {
            if ( !device->ledList().isEmpty() ) {
                OLed led = ( device->ledList().contains( Led_Mail ) ) ? Led_Mail : device->ledList()[0];
                device->setLedState( led, device->ledStateList( led ).contains( Led_BlinkSlow ) ? Led_BlinkSlow : Led_On );
            }
        }
        if ( m_config->readBoolEntry( "PlaySound", false ) )
            device->alarmSound();

        Config cfg( "mail" );
        cfg.setGroup( "Status" );
        cfg.writeEntry( "NewMails", m_newMails );
        QCopEnvelope env( "QPE/Pim", "newMails(int)" );
        env << stat.message_unseen;
        repaint( true );

    } else {
        ODevice *device = ODevice::inst();
        if ( !isHidden() )
            hide();
        if ( !device->ledList().isEmpty() ) {
            OLed led = ( device->ledList().contains( Led_Mail ) ) ? Led_Mail : device->ledList()[0];
            device->setLedState( led, Led_Off );
        }
    }
}