certmanager/lib
qgpgmesignjob.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifdef HAVE_CONFIG_H
00034 #include <config.h>
00035 #endif
00036
00037 #include "qgpgmesignjob.h"
00038
00039 #include <qgpgme/eventloopinteractor.h>
00040 #include <qgpgme/dataprovider.h>
00041
00042 #include <gpgmepp/context.h>
00043 #include <gpgmepp/signingresult.h>
00044 #include <gpgmepp/data.h>
00045 #include <gpgmepp/key.h>
00046
00047 #include <kmessagebox.h>
00048 #include <klocale.h>
00049
00050 #include <assert.h>
00051
00052 Kleo::QGpgMESignJob::QGpgMESignJob( GpgME::Context * context )
00053 : SignJob( QGpgME::EventLoopInteractor::instance(), "Kleo::QGpgMESignJob" ),
00054 QGpgMEJob( this, context )
00055 {
00056 assert( context );
00057 }
00058
00059 Kleo::QGpgMESignJob::~QGpgMESignJob() {
00060 }
00061
00062 GpgME::Error Kleo::QGpgMESignJob::setup( const std::vector<GpgME::Key> & signers,
00063 const QByteArray & plainText ) {
00064 assert( !mInData );
00065 assert( !mOutData );
00066
00067 createInData( plainText );
00068 createOutData();
00069
00070 return setSigningKeys( signers );
00071 }
00072
00073 GpgME::Error Kleo::QGpgMESignJob::start( const std::vector<GpgME::Key> & signers,
00074 const QByteArray & plainText,
00075 GpgME::Context::SignatureMode mode ) {
00076 if ( const GpgME::Error error = setup( signers, plainText ) ) {
00077 deleteLater();
00078 return error;
00079 }
00080
00081 hookupContextToEventLoopInteractor();
00082
00083 const GpgME::Error err = mCtx->startSigning( *mInData, *mOutData, mode );
00084
00085 if ( err )
00086 deleteLater();
00087 return err;
00088 }
00089
00090 GpgME::SigningResult Kleo::QGpgMESignJob::exec( const std::vector<GpgME::Key> & signers,
00091 const QByteArray & plainText,
00092 GpgME::Context::SignatureMode mode,
00093 QByteArray & signature ) {
00094 if ( const GpgME::Error err = setup( signers, plainText ) )
00095 return mResult = GpgME::SigningResult( 0, err );
00096 mResult = mCtx->sign( *mInData, *mOutData, mode );
00097 signature = mOutDataDataProvider->data();
00098 return mResult;
00099 }
00100
00101 void Kleo::QGpgMESignJob::doOperationDoneEvent( const GpgME::Error & ) {
00102 emit result( mResult, mOutDataDataProvider->data() );
00103 }
00104
00105 void Kleo::QGpgMESignJob::showErrorDialog( QWidget * parent, const QString & caption ) const {
00106 if ( !mResult.error() || mResult.error().isCanceled() )
00107 return;
00108 const QString msg = i18n("Signing failed: %1")
00109 .arg( QString::fromLocal8Bit( mResult.error().asString() ) );
00110 KMessageBox::error( parent, msg, caption );
00111 }
00112
00113 #include "qgpgmesignjob.moc"
|