22 #include <QtCore/QTimer>
23 #include <KDE/KLocale>
26 #include "message_p.h"
27 #include "session_p.h"
31 class IdleJobPrivate :
public JobPrivate
34 IdleJobPrivate(
IdleJob *job, Session *session,
const QString& name )
35 : JobPrivate( session, name ), q(job),
36 messageCount( -1 ), recentCount( -1 ),
37 lastMessageCount( -1 ), lastRecentCount( -1 ),
38 originalSocketTimeout( -1 ) { }
43 emitStatsTimer.stop();
45 emit q->mailBoxStats(q, m_session->selectedMailBox(),
46 messageCount, recentCount);
48 lastMessageCount = messageCount;
49 lastRecentCount = recentCount;
57 QTimer emitStatsTimer;
65 int originalSocketTimeout;
69 using namespace KIMAP;
71 IdleJob::IdleJob( Session *session )
72 : Job( *new IdleJobPrivate(this, session, i18nc(
"name of the idle job",
"Idle")) )
75 connect( &d->emitStatsTimer, SIGNAL(timeout()),
76 this, SLOT(emitStats()) );
86 d->sessionInternal()->setSocketTimeout( d->originalSocketTimeout );
87 d->sessionInternal()->sendData(
"DONE" );
90 void IdleJob::doStart()
93 d->originalSocketTimeout = d->sessionInternal()->socketTimeout();
94 d->sessionInternal()->setSocketTimeout( -1 );
95 d->tags << d->sessionInternal()->sendCommand(
"IDLE" );
98 void IdleJob::handleResponse(
const Message &response )
105 if ( !response.content.isEmpty()
106 && d->tags.size() == 1
107 && d->tags.contains( response.content.first().toString() )
108 && ( d->messageCount>=0 || d->recentCount>=0 ) ) {
113 if (handleErrorReplies(response) == NotHandled ) {
114 if ( response.content.size() > 0 && response.content[0].toString()==
"+" ) {
118 }
else if ( response.content.size() > 2 ) {
119 if ( response.content[2].toString()==
"EXISTS" ) {
120 if ( d->messageCount>=0 ) {
124 d->messageCount = response.content[1].toString().toInt();
125 }
else if ( response.content[2].toString()==
"RECENT" ) {
126 if ( d->recentCount>=0 ) {
130 d->recentCount = response.content[1].toString().toInt();
134 if ( d->messageCount>=0 && d->recentCount>=0 ) {
136 }
else if ( d->messageCount>=0 || d->recentCount>=0 ) {
137 d->emitStatsTimer.start( 200 );
145 return d->m_session->selectedMailBox();
151 return d->lastMessageCount;
157 return d->lastRecentCount;
160 #include "idlejob.moc"