20 #include "itemfetchjob.h"
22 #include "attributefactory.h"
23 #include "collection.h"
24 #include "collectionselectjob_p.h"
25 #include "imapparser_p.h"
26 #include "itemfetchscope.h"
28 #include "protocol_p.h"
29 #include "protocolhelper_p.h"
34 #include <QtCore/QStringList>
35 #include <QtCore/QTimer>
37 using namespace Akonadi;
39 class Akonadi::ItemFetchJobPrivate :
public JobPrivate
50 ~ItemFetchJobPrivate()
58 mEmitTimer =
new QTimer( q );
59 mEmitTimer->setSingleShot(
true );
60 mEmitTimer->setInterval( 100 );
61 q->connect( mEmitTimer, SIGNAL(timeout()), q, SLOT(timeout()) );
62 q->connect( q, SIGNAL(result(KJob*)), q, SLOT(timeout()) );
70 if ( !mPendingItems.isEmpty() ) {
72 emit q->itemsReceived( mPendingItems );
73 mPendingItems.clear();
78 void selectDone( KJob * job );
83 Item::List mRequestedItems;
84 Item::List mResultItems;
86 Item::List mPendingItems;
88 ProtocolHelperValuePool *mValuePool;
91 void ItemFetchJobPrivate::startFetchJob()
94 QByteArray command = newTag();
95 if ( mRequestedItems.isEmpty() ) {
96 command +=
" " AKONADI_CMD_ITEMFETCH
" 1:*";
102 q->setErrorText( QString::fromUtf8( e.
what() ) );
110 writeData( command );
113 void ItemFetchJobPrivate::selectDone( KJob * job )
121 :
Job( new ItemFetchJobPrivate( this ), parent )
126 d->mCollection = collection;
127 d->mValuePool =
new ProtocolHelperValuePool;
131 :
Job( new ItemFetchJobPrivate( this ), parent )
136 d->mRequestedItems.append( item );
140 :
Job( new ItemFetchJobPrivate( this ), parent )
145 d->mRequestedItems =
items;
149 :
Job( new ItemFetchJobPrivate( this ), parent )
155 d->mRequestedItems.append(
Item(
id));
167 if ( d->mRequestedItems.isEmpty() ) {
169 setErrorText( i18n(
"Cannot list root collection." ) );
174 connect( job, SIGNAL(result(KJob*)), SLOT(selectDone(KJob*)) );
185 int begin = data.indexOf(
"FETCH" );
189 QList<QByteArray> fetchResponse;
190 ImapParser::parseParenthesizedList( data, fetchResponse, begin + 6 );
197 d->mResultItems.append( item );
198 d->mPendingItems.append( item );
199 if ( !d->mEmitTimer->isActive() )
200 d->mEmitTimer->start();
204 kDebug() <<
"Unhandled response: " << tag << data;
211 return d->mResultItems;
232 return d->mFetchScope;
239 d->mCollection = collection;
243 #include "moc_itemfetchjob.cpp"