File indexing completed on 2024-06-23 05:19:20

0001 /*
0002   SPDX-FileCopyrightText: 2014-2024 Laurent Montel <montel@kde.org>
0003 
0004   SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "decryptverifybodypartmemento.h"
0008 
0009 #include <QGpgME/DecryptVerifyJob>
0010 
0011 using namespace QGpgME;
0012 using namespace GpgME;
0013 using namespace MimeTreeParser;
0014 
0015 DecryptVerifyBodyPartMemento::DecryptVerifyBodyPartMemento(DecryptVerifyJob *job, const QByteArray &cipherText)
0016     : CryptoBodyPartMemento()
0017     , m_cipherText(cipherText)
0018     , m_job(job)
0019 {
0020     Q_ASSERT(m_job);
0021 }
0022 
0023 DecryptVerifyBodyPartMemento::~DecryptVerifyBodyPartMemento()
0024 {
0025     if (m_job) {
0026         m_job->slotCancel();
0027     }
0028 }
0029 
0030 bool DecryptVerifyBodyPartMemento::start()
0031 {
0032     Q_ASSERT(m_job);
0033     if (const Error err = m_job->start(m_cipherText)) {
0034         m_dr = DecryptionResult(err);
0035         return false;
0036     }
0037     connect(m_job.data(), &DecryptVerifyJob::result, this, &DecryptVerifyBodyPartMemento::slotResult);
0038     setRunning(true);
0039     return true;
0040 }
0041 
0042 void DecryptVerifyBodyPartMemento::exec()
0043 {
0044     Q_ASSERT(m_job);
0045     QByteArray plainText;
0046     setRunning(true);
0047     const std::pair<DecryptionResult, VerificationResult> p = m_job->exec(m_cipherText, plainText);
0048     saveResult(p.first, p.second, plainText);
0049     m_job->deleteLater(); // exec'ed jobs don't delete themselves
0050     m_job = nullptr;
0051 }
0052 
0053 void DecryptVerifyBodyPartMemento::saveResult(const DecryptionResult &dr, const VerificationResult &vr, const QByteArray &plainText)
0054 {
0055     Q_ASSERT(m_job);
0056     setRunning(false);
0057     m_dr = dr;
0058     m_vr = vr;
0059     m_plainText = plainText;
0060     setAuditLog(m_job->auditLogError(), m_job->auditLogAsHtml());
0061 }
0062 
0063 void DecryptVerifyBodyPartMemento::slotResult(const DecryptionResult &dr, const VerificationResult &vr, const QByteArray &plainText)
0064 {
0065     saveResult(dr, vr, plainText);
0066     m_job = nullptr;
0067     notify();
0068 }
0069 
0070 #include "moc_decryptverifybodypartmemento.cpp"