certmanager/lib

qgpgmejob.h

00001 /*
00002     qgpgmejob.h
00003 
00004     This file is part of libkleopatra, the KDE keymanagement library
00005     Copyright (c) 2004 Klarälvdalens Datakonsult AB
00006 
00007     Libkleopatra is free software; you can redistribute it and/or
00008     modify it under the terms of the GNU General Public License as
00009     published by the Free Software Foundation; either version 2 of the
00010     License, or (at your option) any later version.
00011 
00012     Libkleopatra is distributed in the hope that it will be useful,
00013     but WITHOUT ANY WARRANTY; without even the implied warranty of
00014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015     General Public License for more details.
00016 
00017     You should have received a copy of the GNU General Public License
00018     along with this program; if not, write to the Free Software
00019     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
00020 
00021     In addition, as a special exception, the copyright holders give
00022     permission to link the code of this program with any edition of
00023     the Qt library by Trolltech AS, Norway (or with modified versions
00024     of Qt that use the same license as Qt), and distribute linked
00025     combinations including the two.  You must obey the GNU General
00026     Public License in all respects for all of the code used other than
00027     Qt.  If you modify this file, you may extend this exception to
00028     your version of the file, but you are not obligated to do so.  If
00029     you do not wish to do so, delete this exception statement from
00030     your version.
00031 */
00032 
00033 #ifndef __KLEO_QGPGMEJOB_H__
00034 #define __KLEO_QGPGMEJOB_H__
00035 
00036 #include <gpgmepp/interfaces/progressprovider.h>
00037 #include <gpgmepp/interfaces/passphraseprovider.h>
00038 
00039 #include <gpgmepp/key.h>
00040 
00041 #include <qcstring.h>
00042 #include <qstring.h>
00043 
00044 #include <vector>
00045 #include <kdepimmacros.h>
00046 
00047 namespace GpgME {
00048   class Error;
00049   class Context;
00050   class Data;
00051 }
00052 
00053 namespace Kleo {
00054   class Job;
00055 }
00056 
00057 namespace QGpgME {
00058   class QByteArrayDataProvider;
00059 }
00060 
00061 class QString;
00062 class QStringList;
00063 
00064 namespace Kleo {
00065 
00079   class KDE_EXPORT QGpgMEJob : public GpgME::ProgressProvider, public GpgME::PassphraseProvider {
00080   public:
00081     QGpgMEJob( Kleo::Job * _this, GpgME::Context * context );
00082     ~QGpgMEJob();
00083 
00084   protected:
00087     virtual void doOperationDoneEvent( const GpgME::Error & e ) = 0;
00089     void hookupContextToEventLoopInteractor();
00091     void setPatterns( const QStringList & sl, bool allowEmpty=false );
00093     unsigned int numPatterns() const { return mNumPatterns; }
00095     const char* * nextChunk();
00097     const char* * patterns() const;
00099     void setChunkSize( unsigned int size );
00101     unsigned int chunkSize() const { return mChunkSize; }
00103     void createOutData();
00106     void createInData( const QByteArray & in );
00108     GpgME::Error setSigningKeys( const std::vector<GpgME::Key> & signers );
00110     void doSlotOperationDoneEvent( GpgME::Context * context, const GpgME::Error & e );
00112     void getAuditLog();
00113 
00114     //
00115     // only boring stuff below this line...
00116     //
00117 
00118   protected:
00119     virtual void doEmitProgressSignal( const QString & what, int current, int total ) = 0;
00120     virtual void doEmitDoneSignal() = 0;
00121     void doSlotCancel();
00122     QString auditLogAsHtml() const { return mAuditLogAsHtml; }
00123 
00124   private:
00126     void showProgress( const char * what, int type, int current, int total );
00127     char * getPassphrase( const char * useridHint, const char * description,
00128               bool previousWasBad, bool & canceled );
00129     void deleteAllPatterns();
00130 
00131   public:
00132     void checkInvariants() const;
00133 
00134   protected:
00135     Kleo::Job * mThis;
00136     GpgME::Context * mCtx;
00137     GpgME::Data * mInData;
00138     QGpgME::QByteArrayDataProvider * mInDataDataProvider;
00139     GpgME::Data * mOutData;
00140     QGpgME::QByteArrayDataProvider * mOutDataDataProvider;
00141   private:
00142     const char* * mPatterns;
00143     // holds the entry - if any - in mPattern that was replaced with
00144     // NULL to create a temporary end-of-array marker for gpgme:
00145     const char * mReplacedPattern;
00146     unsigned int mNumPatterns;
00147     unsigned int mChunkSize;
00148     unsigned int mPatternStartIndex, mPatternEndIndex;
00149     QString mAuditLogAsHtml;
00150   };
00151 
00152 }
00153 
00154 #define make_slot_cancel private: void slotCancel() { QGpgMEJob::doSlotCancel(); }
00155 #define make_progress_emitter private: void doEmitProgressSignal( const QString & what, int cur, int tot ) { emit progress( what, cur, tot ); }
00156 #define make_done_emitter private: void doEmitDoneSignal() { emit done(); }
00157 #define make_auditLogAsHtml private: QString auditLogAsHtml() const { return QGpgMEJob::auditLogAsHtml(); }
00158 #define QGPGME_JOB make_slot_cancel make_progress_emitter make_done_emitter make_auditLogAsHtml
00159 
00160 #endif // __KLEO_QGPGMEJOB_H__
KDE Home | KDE Accessibility Home | Description of Access Keys