From a388cc47c6c3e4eff25e26ed18818aec7fd74bf2 Mon Sep 17 00:00:00 2001 From: Thomas McGuire Date: Fri, 4 Dec 2009 10:40:06 +0000 Subject: [PATCH] SVN_MERGE Merged revisions 1055350 via svnmerge from svn+ssh://tmcguire@svn.kde.org/home/kde/branches/kdepim/enterprise4/kdepim ................ r1055350 | winterz | 2009-11-27 22:17:25 +0100 (Fri, 27 Nov 2009) | 10 lines Merged revisions 1055258 via svnmerge from https://svn.kde.org/home/kde/branches/kdepim/enterprise/kdepim ........ r1055258 | tmcguire | 2009-11-27 13:02:48 -0500 (Fri, 27 Nov 2009) | 3 lines Extract the code that RFC-2231-encodes a string with an autodetected charset, it was duplicated in a number of places. ........ ................ svn path=/trunk/KDE/kdepim/; revision=1058349 --- kmmessage.cpp | 26 +++++++++----------------- kmmsgbase.cpp | 10 ++++++++++ kmmsgbase.h | 9 ++++++++- kmmsgpartdlg.cpp | 5 +---- messagecomposer.cpp | 9 +-------- 5 files changed, 29 insertions(+), 30 deletions(-) diff --git a/kmmessage.cpp b/kmmessage.cpp index 2da549477..48a372632 100644 --- a/kmmessage.cpp +++ b/kmmessage.cpp @@ -2785,9 +2785,7 @@ DwBodyPart* KMMessage::createDWBodyPart(const KMMessagePart* aPart) QByteArray contDesc = aPart->contentDescriptionEncoded(); QByteArray contDisp = aPart->contentDisposition(); QByteArray contID = aPart->contentId(); - QByteArray encoding = autoDetectCharset(charset, s->prefCharsets, aPart->name()); - if (encoding.isEmpty()) encoding = "utf-8"; - QByteArray name = KMMsgBase::encodeRFC2231String(aPart->name(), encoding); + QByteArray name = KMMsgBase::encodeRFC2231StringAutoDetectCharset( aPart->name(), charset ); bool RFC2231encoded = aPart->name() != QString(name); QByteArray paramAttr = aPart->parameterAttribute(); @@ -2862,24 +2860,18 @@ DwBodyPart* KMMessage::createDWBodyPart(const KMMessagePart* aPart) } } - if (!paramAttr.isEmpty()) - { - QByteArray encoding = autoDetectCharset(charset, s->prefCharsets, - aPart->parameterValue()); - if (encoding.isEmpty()) encoding = "utf-8"; + if ( !paramAttr.isEmpty() ) { QByteArray paramValue; - paramValue = KMMsgBase::encodeRFC2231String(aPart->parameterValue(), - encoding); + paramValue = KMMsgBase::encodeRFC2231StringAutoDetectCharset( aPart->parameterValue(), charset ); DwParameter *param = new DwParameter; - if (aPart->parameterValue() != QString(paramValue)) - { - param->SetAttribute((paramAttr + '*').data()); - param->SetValue(paramValue.data(),true); + if ( aPart->parameterValue() != QString( paramValue ) ) { + param->SetAttribute( ( paramAttr + '*' ).data() ); + param->SetValue( paramValue.data(), true ); } else { - param->SetAttribute(paramAttr.data()); - param->SetValue(paramValue.data()); + param->SetAttribute( paramAttr.data() ); + param->SetValue( paramValue.data() ); } - ct.AddParameter(param); + ct.AddParameter( param ); } if (!cte.isEmpty()) diff --git a/kmmsgbase.cpp b/kmmsgbase.cpp index 1eeee4d62..a5aba08ed 100644 --- a/kmmsgbase.cpp +++ b/kmmsgbase.cpp @@ -690,6 +690,16 @@ QByteArray KMMsgBase::encodeRFC2231String( const QString& _str, return result; } +//----------------------------------------------------------------------------- +QByteArray KMMsgBase::encodeRFC2231StringAutoDetectCharset( const QString &str, + const QByteArray &defaultCharset ) +{ + QByteArray encoding = KMMsgBase::autoDetectCharset( defaultCharset, + KMMessage::preferredCharsets(), str ); + if ( encoding.isEmpty() ) + encoding = "utf-8"; + return KMMsgBase::encodeRFC2231String( str, encoding ); +} //----------------------------------------------------------------------------- QString KMMsgBase::decodeRFC2231String(const QByteArray& _str) diff --git a/kmmsgbase.h b/kmmsgbase.h index 570557702..bb8afa1b4 100644 --- a/kmmsgbase.h +++ b/kmmsgbase.h @@ -125,7 +125,7 @@ public: virtual QString tagString( void ) const = 0; /**Get a pointer to the tag label list*/ virtual KMMessageTagList *tagList( void ) const = 0; - /**Split @p aString at commas and set the tag list to the resulting + /**Split @p aString at commas and set the tag list to the resulting list and set dirty*/ virtual void setTagList( const QString &aString ); /**Set the tag list to @p aTagList and set dirty*/ @@ -304,6 +304,13 @@ public: static QByteArray encodeRFC2231String( const QString &aStr, const QByteArray &charset ); + /** + * Just like encodeRFC2231String, only that the encoding is auto-detected. + * @param defaultCharset If given, this will be the prefered charset + */ + static QByteArray encodeRFC2231StringAutoDetectCharset( const QString &str, + const QByteArray &defaultCharset = "" ); + /** Decode given string as described in RFC2231 */ static QString decodeRFC2231String( const QByteArray &aStr ); diff --git a/kmmsgpartdlg.cpp b/kmmsgpartdlg.cpp index 2a57d438d..f7548d278 100644 --- a/kmmsgpartdlg.cpp +++ b/kmmsgpartdlg.cpp @@ -399,10 +399,7 @@ void KMMsgPartDialogCompat::applyChanges() QString name = fileName(); if ( !name.isEmpty() || !mMsgPart->name().isEmpty()) { mMsgPart->setName( name ); - QByteArray encoding = KMMsgBase::autoDetectCharset( mMsgPart->charset(), - KMMessage::preferredCharsets(), name ); - if ( encoding.isEmpty() ) encoding = "utf-8"; - QByteArray encName = KMMsgBase::encodeRFC2231String( name, encoding ); + QByteArray encName = KMMsgBase::encodeRFC2231StringAutoDetectCharset( name, mMsgPart->charset() ); cDisp += "\n\tfilename"; if ( name != QString( encName ) ) diff --git a/messagecomposer.cpp b/messagecomposer.cpp index 621853d4f..ff6ba24a5 100644 --- a/messagecomposer.cpp +++ b/messagecomposer.cpp @@ -645,14 +645,7 @@ void MessageComposer::chiasmusEncryptAllAttachments() { part->setTypeStr( "application" ); part->setSubtypeStr( "vnd.de.bund.bsi.chiasmus" ); part->setName( filename + ".xia" ); - - // this is taken from kmmsgpartdlg.cpp: - QByteArray encoding = - KMMsgBase::autoDetectCharset( part->charset(), - KMMessage::preferredCharsets(), filename ); - if ( encoding.isEmpty() ) - encoding = "utf-8"; - const QByteArray enc_name = KMMsgBase::encodeRFC2231String( filename + ".xia", encoding ); + const QByteArray enc_name = KMMsgBase::encodeRFC2231StringAutoDetectCharset( filename + ".xia", part->charset() ); const QByteArray cDisp = "attachment;\n\tfilename" + ( QString( enc_name ) != filename + ".xia" ? "*=" + enc_name