Index: messageviewer/src/viewer/messagepart.h =================================================================== --- messageviewer/src/viewer/messagepart.h +++ messageviewer/src/viewer/messagepart.h @@ -105,6 +105,12 @@ bool mPassphraseError; QByteArray mDecryptedData; std::vector mSignatures; + +private: + /** Writes out the block that we use when the node is encrypted, + but we're deferring decryption for later. */ + void writeDeferredDecryptionBlock() const; + protected: const Kleo::CryptoBackend::Protocol *mCryptoProto; QString mFromAddress; Index: messageviewer/src/viewer/messagepart.cpp =================================================================== --- messageviewer/src/viewer/messagepart.cpp +++ messageviewer/src/viewer/messagepart.cpp @@ -237,6 +237,29 @@ } +void CryptoMessagePart::writeDeferredDecryptionBlock() const +{ + Q_ASSERT(!mMetaData->isEncrypted); + Q_ASSERT(mDecryptMessage); + + MessageViewer::HtmlWriter* writer = mOtp->htmlWriter(); + if (!writer) { + return; + } + + const QString iconName = QLatin1String("file:///") + KIconLoader::global()->iconPath(QStringLiteral("document-decrypt"), + KIconLoader::Small); + writer->queue(QLatin1String("
") + + i18n("This message is encrypted.") + + QLatin1String("
" + "
" + "" + "") + + i18n("Decrypt Message") + + QLatin1String("
")); +} + void CryptoMessagePart::html(bool decorate) const { @@ -261,14 +284,21 @@ } if (mMetaData->isEncrypted && !mDecryptMessage) { - mOtp->writeDeferredDecryptionBlock(); + mMetaData->isDecryptable = true; + } + + if (mMetaData->isEncrypted && !mDecryptMessage) { + const CryptoBlock block(mOtp, mMetaData, mCryptoProto, mFromAddress, mNode); + writeDeferredDecryptionBlock(); } else if (mMetaData->inProgress) { - mOtp->writeDecryptionInProgressBlock(); + const CryptoBlock block(mOtp, mMetaData, mCryptoProto, mFromAddress, mNode); + // In progress has no special body } else if (mMetaData->isEncrypted && !mMetaData->isDecryptable) { const CryptoBlock block(mOtp, mMetaData, mCryptoProto, mFromAddress, mNode); writer->queue(text()); //Do not quote ErrorText } else { if (mMetaData->isSigned && mVerifiedText.isEmpty() && !hideErrors) { + const CryptoBlock block(mOtp, mMetaData, mCryptoProto, mFromAddress, mNode); writer->queue(QStringLiteral("

")); writer->queue(i18n("The crypto engine returned no cleartext data.")); writer->queue(QStringLiteral("

")); Index: messageviewer/src/viewer/objecttreeparser.h =================================================================== --- messageviewer/src/viewer/objecttreeparser.h +++ messageviewer/src/viewer/objecttreeparser.h @@ -397,14 +397,6 @@ find out if opaque data is signed or not. */ bool writeOpaqueOrMultipartSignedData(KMime::Content* data, KMime::Content& sign, const QString& fromAddress, bool hideErrors = false); - /** Writes out the block that we use when the node is encrypted, - but we're deferring decryption for later. */ - void writeDeferredDecryptionBlock(); - - /** Writes out the block that we use when the node is encrypted, - but we've just kicked off async decryption. */ - void writeDecryptionInProgressBlock(); - /** Writes out the information contained in a GpgME::ImportResult */ void writeCertificateImportResult(const GpgME::ImportResult &res); Index: messageviewer/src/viewer/objecttreeparser.cpp =================================================================== --- messageviewer/src/viewer/objecttreeparser.cpp +++ messageviewer/src/viewer/objecttreeparser.cpp @@ -621,53 +621,6 @@ return bIsOpaqueSigned; } -void ObjectTreeParser::writeDeferredDecryptionBlock() -{ - const QString iconName = QLatin1String("file:///") + KIconLoader::global()->iconPath(QStringLiteral("document-decrypt"), - KIconLoader::Small); - const QString decryptedData = QLatin1String("
") - + i18n("This message is encrypted.") - + QLatin1String("
" - "
" - "" - "") - + i18n("Decrypt Message") - + QLatin1String("
"); - PartMetaData messagePart; - messagePart.isDecryptable = true; - messagePart.isEncrypted = true; - messagePart.isSigned = false; - - if (htmlWriter()) { //TODO: check if this check should be here or at the beginning of the method - htmlWriter()->queue(writeSigstatHeader(messagePart, - cryptoProtocol(), - QString())); - htmlWriter()->queue(decryptedData); - htmlWriter()->queue(writeSigstatFooter(messagePart)); - } -} - -void ObjectTreeParser::writeDecryptionInProgressBlock() -{ - if (!htmlWriter()) { - return; - } - // PENDING(marc) find an animated icon here: - //const QString iconName = KGlobal::instance()->iconLoader()->iconPath( "decrypted", KIcon::Small ); - //const QString decryptedData = i18n("Encrypted data not shown"); - PartMetaData messagePart; - messagePart.isDecryptable = true; - messagePart.isEncrypted = true; - messagePart.isSigned = false; - messagePart.inProgress = true; - htmlWriter()->queue(writeSigstatHeader(messagePart, - cryptoProtocol(), - QString())); - //htmlWriter()->queue( decryptedData ); - htmlWriter()->queue(writeSigstatFooter(messagePart)); -} - void ObjectTreeParser::writeCertificateImportResult(const GpgME::ImportResult &res) { if (res.error()) {