summaryrefslogtreecommitdiff
path: root/noncore/unsupported/mail2/bend/bend.cpp
blob: ab6eb450b3bba73590261bff53ed13aca25608de (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
#include <qlayout.h>
#include <qpixmap.h>
#include <qlabel.h>
#include <qsound.h>
#include <qtimer.h>
#include <qdir.h>

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

#include <opie/odevice.h>

#include "imapresponse.h"
#include "imaphandler.h"
#include "configfile.h"
#include "bend.h"

using namespace Opie;

BenD::BenD(QWidget *parent, const char *name, WFlags fl)
	: QButton(parent, name, fl)
{
	_config = new Config("mail");
	_config->setGroup("Settings");

	QVBoxLayout *layout = new QVBoxLayout(this);
	layout->addItem(new QSpacerItem(0,0));

	QLabel *pixmap = new QLabel(this);
	pixmap->setPixmap(Resource::loadPixmap("mail/mailchecker"));
	layout->addWidget(pixmap);

	layout->addItem(new QSpacerItem(0,0));

	hide();

	connect(this, SIGNAL(clicked()), SLOT(slotClicked()));

	if (!_config->readBoolEntry("Disabled", false)) {
		_intervalMs = _config->readNumEntry("CheckEvery", 5) * 60000;
		_intervalTimer = new QTimer();
		_intervalTimer->start(_intervalMs);
		connect(_intervalTimer, SIGNAL(timeout()), SLOT(slotCheck()));

		QTimer::singleShot(0, this, SLOT(slotCheck()));
	}
}

void BenD::drawButton(QPainter *) { }
void BenD::drawButtonText(QPainter *) { }

void BenD::slotClicked()
{
	QCopEnvelope e("QPE/System", "execute(QString)");
	e << QString("mail");
	
	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);
	}
}

void BenD::slotCheck()
{
	// Check wether the check interval has been changed.
	int newIntervalMs = _config->readNumEntry("CheckEvery", 5) * 60000;
	if (newIntervalMs != _intervalMs) {
		_intervalTimer->changeInterval(newIntervalMs);
		_intervalMs = newIntervalMs;
#ifndef QT_NO_DEBUG
		qWarning("BenD: Detected interval change");
#endif
	}

	QValueList<Account> acList = ConfigFile::getAccounts();
	QValueList<Account>::Iterator ot;
	for (ot = acList.begin(); ot != acList.end(); ot++) {
		if (!((*ot).imapServer().isEmpty() || 
		      (*ot).imapPort().isEmpty() || 
		      (*ot).user().isEmpty() ||
		      (*ot).pass().isEmpty())) {
			if (!((*ot).imapSsl() && 
			      (*ot).imapSslPort().isEmpty())) {
				IMAPHandler *handler = new IMAPHandler(*ot);
				handler->iStatus("INBOX", "RECENT");
				connect(handler, SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPStatus(IMAPResponse&)));
			}
		}
	}
}

void BenD::slotIMAPStatus(IMAPResponse &response)
{
	disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPStatus(IMAPResponse&)));

	if (response.statusResponse().status() == IMAPResponseEnums::OK) {
		if (response.STATUS()[0].recent().toInt() > 0) {
			ODevice *device = ODevice::inst();
			if (isHidden()) show();
			if (_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 (_config->readBoolEntry("PlaySound", false))
				device->alarmSound();
		} 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);
			}
		}
		response.imapHandler()->iLogout();
	} else qWarning("BenD: WARNING: Couldn't retrieve INBOX status.");
}