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
49 ~ItemFetchJobPrivate()
57 mEmitTimer =
new QTimer( q );
58 mEmitTimer->setSingleShot(
true );
59 mEmitTimer->setInterval( 100 );
60 q->connect( mEmitTimer, SIGNAL(timeout()), q, SLOT(timeout()) );
61 q->connect( q, SIGNAL(result(KJob*)), q, SLOT(timeout()) );
69 if ( !mPendingItems.isEmpty() ) {
71 emit q->itemsReceived( mPendingItems );
72 mPendingItems.clear();
77 void selectDone( KJob * job );
82 Item::List mRequestedItems;
83 Item::List mResultItems;
85 Item::List mPendingItems;
87 ProtocolHelperValuePool *mValuePool;
90 void ItemFetchJobPrivate::startFetchJob()
93 QByteArray command = newTag();
94 if ( mRequestedItems.isEmpty() ) {
95 command +=
" " AKONADI_CMD_ITEMFETCH
" 1:*";
101 q->setErrorText( QString::fromUtf8( e.
what() ) );
109 writeData( command );
112 void ItemFetchJobPrivate::selectDone( KJob * job )
120 :
Job( new ItemFetchJobPrivate( this ), parent )
125 d->mCollection = collection;
126 d->mValuePool =
new ProtocolHelperValuePool;
130 :
Job( new ItemFetchJobPrivate( this ), parent )
135 d->mRequestedItems.append( item );
139 :
Job( new ItemFetchJobPrivate( this ), parent )
144 d->mRequestedItems =
items;
148 :
Job( new ItemFetchJobPrivate( this ), parent )
154 d->mRequestedItems.append(
Item(
id));
166 if ( d->mRequestedItems.isEmpty() ) {
168 setErrorText( i18n(
"Cannot list root collection." ) );
173 connect( job, SIGNAL(result(KJob*)), SLOT(selectDone(KJob*)) );
184 int begin = data.indexOf(
"FETCH" );
188 QList<QByteArray> fetchResponse;
189 ImapParser::parseParenthesizedList( data, fetchResponse, begin + 6 );
196 d->mResultItems.append( item );
197 d->mPendingItems.append( item );
198 if ( !d->mEmitTimer->isActive() )
199 d->mEmitTimer->start();
203 kDebug() <<
"Unhandled response: " << tag << data;
210 return d->mResultItems;
231 return d->mFetchScope;
238 d->mCollection = collection;
242 #include "itemfetchjob.moc"