00001
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 {
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 );
00111 }
00112
00113
#include "qgpgmesignjob.moc"