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 ) ) {
112 if ( handleErrorReplies( response ) == NotHandled ) {
113 if ( response.content.size() > 0 && response.content[0].toString() ==
"+" ) {
117 }
else if ( response.content.size() > 2 ) {
118 if ( response.content[2].toString() ==
"EXISTS" ) {
119 if ( d->messageCount >= 0 ) {
123 d->messageCount = response.content[1].toString().toInt();
124 }
else if ( response.content[2].toString() ==
"RECENT" ) {
125 if ( d->recentCount >= 0 ) {
129 d->recentCount = response.content[1].toString().toInt();
133 if ( d->messageCount>=0 && d->recentCount>=0 ) {
135 }
else if ( d->messageCount>=0 || d->recentCount>=0 ) {
136 d->emitStatsTimer.start( 200 );
144 return d->m_session->selectedMailBox();
150 return d->lastMessageCount;
156 return d->lastRecentCount;
159 #include "moc_idlejob.cpp"