00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef AKONADI_LINKJOBIMPL_P_H
00021 #define AKONADI_LINKJOBIMPL_P_H
00022
00023 #include "collection.h"
00024 #include "item.h"
00025 #include "job.h"
00026 #include "job_p.h"
00027 #include "protocolhelper_p.h"
00028
00029 #include <kdebug.h>
00030 #include <KLocale>
00031
00032 namespace Akonadi {
00033
00035 template <typename LinkJob> class LinkJobImpl : public JobPrivate
00036 {
00037 public:
00038 LinkJobImpl( Job *parent ) : JobPrivate( parent ) {}
00039
00040 inline void sendCommand( const char* asapCommand )
00041 {
00042 LinkJob *q = static_cast<LinkJob*>( q_func() );
00043 if ( objectsToLink.isEmpty() ) {
00044 q->emitResult();
00045 return;
00046 }
00047 if ( !destination.isValid() && destination.remoteId().isEmpty() ) {
00048 q->setError( Job::Unknown );
00049 q->setErrorText( i18n( "No valid destination specified" ) );
00050 q->emitResult();
00051 return;
00052 }
00053
00054 QByteArray command = newTag();
00055 try {
00056 command += ProtocolHelper::entitySetToByteArray( Collection::List() << destination, asapCommand );
00057 } catch ( const std::exception &e ) {
00058 q->setError( Job::Unknown );
00059 q->setErrorText( QString::fromUtf8( e.what() ) );
00060 q->emitResult();
00061 return;
00062 }
00063
00064 command += ProtocolHelper::entitySetToByteArray( objectsToLink, QByteArray() );
00065 command += '\n';
00066
00067 writeData( command );
00068 }
00069
00070 Item::List objectsToLink;
00071 Collection destination;
00072 };
00073
00074 }
00075
00076 #endif