diff --git a/objecttreeparser.cpp b/objecttreeparser.cpp index 060624212..e1c80429c 100644 --- a/objecttreeparser.cpp +++ b/objecttreeparser.cpp @@ -2074,16 +2074,31 @@ static QString writeSimpleSigstatHeader( const PartMetaData &block ) static QString beginVerboseSigstatHeader() { - return ""; + html += "
"; + return "
"; } -static QString endVerboseSigstatHeader() +static QString makeShowAuditLogLink( const QString & auditLog ) { + if ( auditLog.isEmpty() ) + return i18n("No Audit Log available"); + + KUrl url; + url.setProtocol( "kmail" ); + url.setPath( "showAuditLog" ); + url.addQueryItem( "log", auditLog ); + + return "" + i18n("Show Audit Log") + ""; +} + +static QString endVerboseSigstatHeader( const PartMetaData & pmd ) { QString html; html += ""; html += ""; html += i18n( "Hide Details" ); - html += "
"; + html += "
"; + html += makeShowAuditLogLink( pmd.auditLog ); + html += "
"; return html; } @@ -2338,7 +2353,7 @@ QString ObjectTreeParser::writeSigstatHeader( PartMetaData & block, htmlStr += statusStr; } frame = ""; - htmlStr += endVerboseSigstatHeader() + frame; + htmlStr += endVerboseSigstatHeader( block ) + frame; simpleHtmlStr += frame; } else { @@ -2381,7 +2396,7 @@ QString ObjectTreeParser::writeSigstatHeader( PartMetaData & block, } } frame = ""; - htmlStr += endVerboseSigstatHeader() + frame; + htmlStr += endVerboseSigstatHeader( block ) + frame; simpleHtmlStr += frame; } else @@ -2433,7 +2448,7 @@ QString ObjectTreeParser::writeSigstatHeader( PartMetaData & block, } frame = "" ""; - htmlStr += endVerboseSigstatHeader() + frame; + htmlStr += endVerboseSigstatHeader( block ) + frame; simpleHtmlStr += frame; } else @@ -2455,7 +2470,7 @@ QString ObjectTreeParser::writeSigstatHeader( PartMetaData & block, htmlStr += i18n("Warning: The signature is bad."); frame = "" ""; - htmlStr += endVerboseSigstatHeader() + frame; + htmlStr += endVerboseSigstatHeader( block ) + frame; simpleHtmlStr += frame; } } diff --git a/urlhandlermanager.cpp b/urlhandlermanager.cpp index c4cbee83d..c1ca82956 100644 --- a/urlhandlermanager.cpp +++ b/urlhandlermanager.cpp @@ -55,14 +55,14 @@ using std::find; KMail::URLHandlerManager * KMail::URLHandlerManager::self = 0; namespace { - class ShowHtmlSwitchURLHandler : public KMail::URLHandler { + class KMailProtocolURLHandler : public KMail::URLHandler { public: - ShowHtmlSwitchURLHandler() : KMail::URLHandler() {} - ~ShowHtmlSwitchURLHandler() {} + KMailProtocolURLHandler() : KMail::URLHandler() {} + ~KMailProtocolURLHandler() {} bool handleClick( const KUrl &, KMReaderWin * ) const; - bool handleContextMenuRequest( const KUrl &, const QPoint &, KMReaderWin * ) const { - return false; + bool handleContextMenuRequest( const KUrl & url, const QPoint &, KMReaderWin * ) const { + return url.protocol() == "kmail"; } QString statusBarMessage( const KUrl &, KMReaderWin * ) const; }; @@ -126,6 +126,16 @@ namespace { QString statusBarMessage( const KUrl &, KMReaderWin * ) const; }; + class ShowAuditLogURLHandler : public KMail::URLHandler { + public: + ShowAuditLogURLHandler() : KMail::URLHandler() {} + ~ShowAuditLogURLHandler() {} + + bool handleClick( const KUrl &, KMReaderWin * ) const; + bool handleContextMenuRequest( const KUrl &, const QPoint &, KMReaderWin * ) const; + QString statusBarMessage( const KUrl &, KMReaderWin * ) const; + }; + class FallBackURLHandler : public KMail::URLHandler { public: FallBackURLHandler() : KMail::URLHandler() {} @@ -255,13 +265,14 @@ QString KMail::URLHandlerManager::BodyPartURLHandlerManager::statusBarMessage( c // KMail::URLHandlerManager::URLHandlerManager() { - registerHandler( new ShowHtmlSwitchURLHandler() ); + registerHandler( new KMailProtocolURLHandler() ); registerHandler( new ExpandCollapseQuoteURLManager() ); registerHandler( new SMimeURLHandler() ); registerHandler( new MailToURLHandler() ); registerHandler( new HtmlAnchorHandler() ); registerHandler( new AttachmentURLHandler() ); registerHandler( mBodyPartURLHandlerManager = new BodyPartURLHandlerManager() ); + registerHandler( new ShowAuditLogURLHandler() ); registerHandler( new FallBackURLHandler() ); } @@ -327,6 +338,8 @@ QString KMail::URLHandlerManager::statusBarMessage( const KUrl & url, KMReaderWi #include "kmmessage.h" #include "kmmsgpart.h" +#include + #include #include #include @@ -334,7 +347,7 @@ QString KMail::URLHandlerManager::statusBarMessage( const KUrl & url, KMReaderWi #include namespace { - bool ShowHtmlSwitchURLHandler::handleClick( const KUrl & url, KMReaderWin * w ) const { + bool KMailProtocolURLHandler::handleClick( const KUrl & url, KMReaderWin * w ) const { if ( url.protocol() == "kmail" ) { if ( !w ) return false; @@ -363,10 +376,11 @@ namespace { } if ( url.path() == "showSignatureDetails" ) { - w->setShowSignatureDetails(); + w->setShowSignatureDetails( true ); w->update( true ); return true; } + if ( url.path() == "hideSignatureDetails" ) { w->setShowSignatureDetails( false ); w->update( true ); @@ -377,7 +391,7 @@ namespace { return false; } - QString ShowHtmlSwitchURLHandler::statusBarMessage( const KUrl & url, KMReaderWin * ) const { + QString KMailProtocolURLHandler::statusBarMessage( const KUrl & url, KMReaderWin * ) const { if ( url.protocol() == "kmail" ) { if ( url.path() == "showHTML" ) @@ -385,7 +399,13 @@ namespace { if ( url.path() == "loadExternal" ) return i18n("Load external references from the Internet for this message."); if ( url.path() == "goOnline" ) - return i18n("Work online"); + return i18n("Work online."); + if ( url.path() == "decryptMessage" ) + return i18n("Decrypt message."); + if ( url.path() == "showSignatureDetails" ) + return i18n("Show signature details."); + if ( url.path() == "hideSignatureDetails" ) + return i18n("Hide signature details."); } return QString() ; } @@ -509,6 +529,36 @@ namespace { } } +namespace { + static QString extractAuditLog( const KUrl & url ) { + if ( url.protocol() != "kmail" || url.path() != "showAuditLog" ) + return QString(); + assert( !url.queryItem( "log" ).isEmpty() ); + return url.queryItem( "log" ); + } + + bool ShowAuditLogURLHandler::handleClick( const KUrl & url, KMReaderWin * w ) const { + const QString auditLog = extractAuditLog( url ); + if ( auditLog.isEmpty() ) + return false; + Kleo::MessageBox::auditLog( w, auditLog ); + return true; + } + + bool ShowAuditLogURLHandler::handleContextMenuRequest( const KUrl & url, const QPoint &, KMReaderWin * w ) const { + Q_UNUSED( w ); + // disable RMB for my own links: + return !extractAuditLog( url ).isEmpty(); + } + + QString ShowAuditLogURLHandler::statusBarMessage( const KUrl & url, KMReaderWin * ) const { + if ( extractAuditLog( url ).isEmpty() ) + return QString(); + else + return i18n("Show GnuPG Audit Log for this operation"); + } +} + namespace { bool FallBackURLHandler::handleClick( const KUrl & url, KMReaderWin * w ) const { if ( w )