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 mResult = GpgME::SigningResult( err );
00088 return err;
00089 }
00090
00091 GpgME::SigningResult Kleo::QGpgMESignJob::exec( const std::vector<GpgME::Key> & signers,
00092 const QByteArray & plainText,
00093 GpgME::Context::SignatureMode mode,
00094 QByteArray & signature ) {
00095 if ( const GpgME::Error err = setup( signers, plainText ) )
00096 return mResult = GpgME::SigningResult( 0, err );
00097 mResult = mCtx->sign( *mInData, *mOutData, mode );
00098 signature = mOutDataDataProvider->data();
00099 return mResult;
00100 }
00101
00102 void Kleo::QGpgMESignJob::doOperationDoneEvent( const GpgME::Error & ) {
00103 emit result( mResult = mCtx->signingResult(), mOutDataDataProvider->data() );
00104 }
00105
00106 void Kleo::QGpgMESignJob::showErrorDialog( QWidget * parent, const QString & caption ) const {
00107 if ( !mResult.error() || mResult.error().isCanceled() )
00108 return;
00109 const QString msg = i18n("Signing failed: %1")
00110 .arg( QString::fromLocal8Bit( mResult.error().asString() ) );
00111 KMessageBox::error( parent, msg, caption );
00112 }
00113
00114 #include "qgpgmesignjob.moc"
|