qt: Allow deferred start of import job
* lang/qt/src/importjob.h (ImportJob::startLater): New pure virtual method. * lang/qt/src/qgpgmeimportjob.cpp, lang/qt/src/qgpgmeimportjob.h (QGpgMEImportJob::startLater): New method. * lang/qt/tests/t-import.cpp (ImportTest::testDeferredStart): New. -- This makes it possible to prepare an import job for a deferred start. GnuPG-bug-id: 6323
This commit is contained in:
parent
18c2c0b250
commit
398375a0ab
3
NEWS
3
NEWS
@ -18,6 +18,8 @@ Noteworthy changes in version 1.18.1 (unreleased)
|
|||||||
* qt: Extend ListAllKeysJob to allow disabling the automatic trust database
|
* qt: Extend ListAllKeysJob to allow disabling the automatic trust database
|
||||||
check when listing all keys. [T6261]
|
check when listing all keys. [T6261]
|
||||||
|
|
||||||
|
* qt: Allow deferred start of import jobs. [T6323]
|
||||||
|
|
||||||
* Interface changes relative to the 1.18.0 release:
|
* Interface changes relative to the 1.18.0 release:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
gpgme_get_ctx_flag EXTENDED: New flag 'no-auto-check-trustdb'.
|
gpgme_get_ctx_flag EXTENDED: New flag 'no-auto-check-trustdb'.
|
||||||
@ -29,6 +31,7 @@ Noteworthy changes in version 1.18.1 (unreleased)
|
|||||||
qt: ListAllKeysJob::setOptions NEW.
|
qt: ListAllKeysJob::setOptions NEW.
|
||||||
qt: ListAllKeysJob::options NEW.
|
qt: ListAllKeysJob::options NEW.
|
||||||
qt: Job::startNow NEW.
|
qt: Job::startNow NEW.
|
||||||
|
qt: ImportJob::startLater NEW.
|
||||||
|
|
||||||
|
|
||||||
Noteworthy changes in version 1.18.0 (2022-08-10)
|
Noteworthy changes in version 1.18.0 (2022-08-10)
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
Copyright (c) 2004 Klarälvdalens Datakonsult AB
|
Copyright (c) 2004 Klarälvdalens Datakonsult AB
|
||||||
Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik
|
Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik
|
||||||
Software engineering by Intevation GmbH
|
Software engineering by Intevation GmbH
|
||||||
|
Copyright (c) 2023 g10 Code GmbH
|
||||||
|
Software engineering by Ingo Klöcker <dev@ingo-kloecker.de>
|
||||||
|
|
||||||
QGpgME is free software; you can redistribute it and/or
|
QGpgME is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU General Public License as
|
modify it under the terms of the GNU General Public License as
|
||||||
@ -88,6 +90,8 @@ public:
|
|||||||
virtual GpgME::Error start(const QByteArray &keyData) = 0;
|
virtual GpgME::Error start(const QByteArray &keyData) = 0;
|
||||||
|
|
||||||
virtual GpgME::ImportResult exec(const QByteArray &keyData) = 0;
|
virtual GpgME::ImportResult exec(const QByteArray &keyData) = 0;
|
||||||
|
|
||||||
|
virtual GpgME::Error startLater(const QByteArray &keyData) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -154,6 +154,12 @@ GpgME::ImportResult QGpgME::QGpgMEImportJob::exec(const QByteArray &keyData)
|
|||||||
return mResult;
|
return mResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Error QGpgMEImportJob::startLater(const QByteArray &certData)
|
||||||
|
{
|
||||||
|
setWorkerFunction(std::bind(&import_qba, std::placeholders::_1, certData, importFilter(), keyOrigin(), keyOriginUrl()));
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
// PENDING(marc) implement showErrorDialog()
|
// PENDING(marc) implement showErrorDialog()
|
||||||
|
|
||||||
void QGpgME::QGpgMEImportJob::resultHook(const result_type &tuple)
|
void QGpgME::QGpgMEImportJob::resultHook(const result_type &tuple)
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB
|
Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB
|
||||||
Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik
|
Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik
|
||||||
Software engineering by Intevation GmbH
|
Software engineering by Intevation GmbH
|
||||||
|
Copyright (c) 2023 g10 Code GmbH
|
||||||
|
Software engineering by Ingo Klöcker <dev@ingo-kloecker.de>
|
||||||
|
|
||||||
QGpgME is free software; you can redistribute it and/or
|
QGpgME is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU General Public License as
|
modify it under the terms of the GNU General Public License as
|
||||||
@ -70,6 +72,8 @@ public:
|
|||||||
/* from ImportJob */
|
/* from ImportJob */
|
||||||
GpgME::ImportResult exec(const QByteArray &keyData) Q_DECL_OVERRIDE;
|
GpgME::ImportResult exec(const QByteArray &keyData) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
GpgME::Error startLater(const QByteArray &keyData) override;
|
||||||
|
|
||||||
/* from ThreadedJobMixin */
|
/* from ThreadedJobMixin */
|
||||||
void resultHook(const result_type &r) Q_DECL_OVERRIDE;
|
void resultHook(const result_type &r) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
@ -162,6 +162,43 @@ private Q_SLOTS:
|
|||||||
QVERIFY(key.origin() == Key::OriginWKD);
|
QVERIFY(key.origin() == Key::OriginWKD);
|
||||||
// the origin URL is currently not available in GpgME
|
// the origin URL is currently not available in GpgME
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void testDeferredStart()
|
||||||
|
{
|
||||||
|
// pub ed25519 2023-01-05 [SC]
|
||||||
|
// 4D1367FE9AF6334D8A55BA635A817A94C7B37E5D
|
||||||
|
// uid importDeferred@example.net
|
||||||
|
static const char keyFpr[] = "4D1367FE9AF6334D8A55BA635A817A94C7B37E5D";
|
||||||
|
static const char keyData[] =
|
||||||
|
"-----BEGIN PGP PUBLIC KEY BLOCK-----\n"
|
||||||
|
"\n"
|
||||||
|
"mDMEY7bNSxYJKwYBBAHaRw8BAQdAazIWyd/xEMeObDSUnh2+AXQuo0oM+TDBG49z\n"
|
||||||
|
"KHvTAYG0GmltcG9ydERlZmVycmVkQGV4YW1wbGUubmV0iJMEExYKADsWIQRNE2f+\n"
|
||||||
|
"mvYzTYpVumNagXqUx7N+XQUCY7bNSwIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIe\n"
|
||||||
|
"BwIXgAAKCRBagXqUx7N+XasrAP4qPzLzPd6tWDZvP29ZYPTSrjrTb0U5MOJeIPKX\n"
|
||||||
|
"73jZswEAwWRvgH+GmhTOigw0UVtinAFvUEFVyvcW/GR19mw5XA0=\n"
|
||||||
|
"=JnpA\n"
|
||||||
|
"-----END PGP PUBLIC KEY BLOCK-----\n";
|
||||||
|
|
||||||
|
auto *job = openpgp()->importJob();
|
||||||
|
job->startLater(QByteArray{keyData});
|
||||||
|
connect(job, &ImportJob::result, this,
|
||||||
|
[this](ImportResult result, QString, Error)
|
||||||
|
{
|
||||||
|
QVERIFY(!result.error());
|
||||||
|
QVERIFY(!result.imports().empty());
|
||||||
|
QVERIFY(result.numImported());
|
||||||
|
Q_EMIT asyncDone();
|
||||||
|
});
|
||||||
|
job->startNow();
|
||||||
|
QSignalSpy spy (this, SIGNAL(asyncDone()));
|
||||||
|
QVERIFY(spy.wait());
|
||||||
|
|
||||||
|
auto ctx = Context::createForProtocol(GpgME::OpenPGP);
|
||||||
|
GpgME::Error err;
|
||||||
|
const auto key = ctx->key(keyFpr, err, false);
|
||||||
|
QVERIFY(!key.isNull());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
QTEST_MAIN(ImportTest)
|
QTEST_MAIN(ImportTest)
|
||||||
|
Loading…
Reference in New Issue
Block a user