22 #include <QtCore/QTimer>
23 #include <KDE/KLocalizedString>
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"
Idles the connection to the IMAP server.
int lastMessageCount() const
The last message count that was reported.
int lastRecentCount() const
The last recent message count that was reported.
void stop()
Stops the idle job.
QString lastMailBox() const
The last mailbox status that was reported.