akonadi
movejobimpl_p.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef AKONADI_MOVEJOBIMPL_P_H
00021 #define AKONADI_MOVEJOBIMPL_P_H
00022
00023 #include "collection.h"
00024 #include "job.h"
00025 #include "job_p.h"
00026 #include "protocolhelper_p.h"
00027
00028 #include <KLocale>
00029
00030 namespace Akonadi {
00031
00033 template <typename T, typename MoveJob> class MoveJobImpl : public JobPrivate
00034 {
00035 public:
00036 MoveJobImpl( Job *parent ) : JobPrivate( parent ) {}
00037
00038 inline void sendCommand( const char* asapCommand )
00039 {
00040 MoveJob *q = static_cast<MoveJob*>( q_func() );
00041 if ( objectsToMove.isEmpty() ) {
00042 q->setError( Job::Unknown );
00043 q->setErrorText( i18n( "No objects specified for moving" ) );
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( objectsToMove, 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 command += ' ';
00064 if ( objectsToMove.first().isValid() )
00065 command += QByteArray::number( destination.id() );
00066 else
00067 command += ImapParser::quote( destination.remoteId().toUtf8() );
00068 command += '\n';
00069 writeData( command );
00070 }
00071
00072 typename T::List objectsToMove;
00073 Collection destination;
00074 };
00075
00076 }
00077
00078 #endif