[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdepim
From: Leo Franchi <lfranchi () kde ! org>
Date: 2010-04-29 15:00:25
Message-ID: 20100429150025.81E7AAC8A7 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1120649 by lfranchi:
move preferred charset list into libmessagecomposer
properly encode replies to original message charset if option is selected, if fails, \
use preferred ones.
M +2 -1 kmail/codecmanager.cpp
M +2 -2 kmail/configuredialog.cpp
M +0 -4 kmail/kmail.kcfg.cmake
M +3 -0 messagecomposer/messagecomposer.kcfg
M +33 -3 messagecomposer/messagefactory.cpp
M +8 -0 messagecomposer/messagefactory.h
--- trunk/KDE/kdepim/kmail/codecmanager.cpp #1120648:1120649
@@ -37,6 +37,7 @@
#include <KDebug>
#include <KGlobal>
#include <KLocale>
+#include <messagecomposersettings.h>
class CodecManagerPrivate
{
@@ -83,7 +84,7 @@
void CodecManager::updatePreferredCharsets()
{
- const QStringList prefCharsets = GlobalSettings::self()->preferedCharsets();
+ const QStringList prefCharsets = \
MessageComposer::MessageComposerSettings::self()->preferredCharsets(); \
d->preferredCharsets.clear(); foreach( const QString &str, prefCharsets ) {
QByteArray charset = str.toLatin1().toLower();
--- trunk/KDE/kdepim/kmail/configuredialog.cpp #1120648:1120649
@@ -2800,7 +2800,7 @@
{
KConfigGroup composer( KMKernel::config(), "Composer" );
- QStringList charsets = GlobalSettings::preferedCharsets();
+ QStringList charsets = \
MessageComposer::MessageComposerSettings::preferredCharsets(); for ( \
QStringList::Iterator it = charsets.begin() ; it != charsets.end() ; ++it )
if ( (*it) == QString::fromLatin1("locale") ) {
@@ -2822,7 +2822,7 @@
for ( ; it != charsetList.end() ; ++it )
if ( (*it).endsWith( QLatin1String("(locale)") ) )
(*it) = "locale";
- GlobalSettings::setPreferedCharsets( charsetList );
+ MessageComposer::MessageComposerSettings::setPreferredCharsets( charsetList );
MessageComposer::MessageComposerSettings::setForceReplyCharset( \
mKeepReplyCharsetCheck->isChecked() ); }
--- trunk/KDE/kdepim/kmail/kmail.kcfg.cmake #1120648:1120649
@@ -383,10 +383,6 @@
<default>false</default>
</entry>
- <entry name="PreferedCharsets" key="pref-charsets" type="StringList">
- <default>us-ascii,iso-8859-1,locale,utf-8</default>
- </entry>
-
</group>
<!-- Composer -->
--- trunk/KDE/kdepim/messagecomposer/messagecomposer.kcfg #1120648:1120649
@@ -43,6 +43,9 @@
<default>false</default>
</entry>
+ <entry name="PreferredCharsets" key="pref-charsets" type="StringList">
+ <default>us-ascii,iso-8859-1,locale,utf-8</default>
+ </entry>
</group>
--- trunk/KDE/kdepim/messagecomposer/messagefactory.cpp #1120648:1120649
@@ -21,6 +21,7 @@
#include "messageinfo.h"
#include "messagecomposersettings.h"
+#include "util.h"
#include <akonadi/item.h>
#include <messageviewer/kcursorsaver.h>
@@ -36,6 +37,8 @@
#include "templateparser/templateparser.h"
#include <messagecore/mailinglist-magic.h>
#include <KLocalizedString>
+#include <kcharsets.h>
+#include <QTextCodec>
MessageFactory::MessageFactory( const KMime::Message::Ptr& origMsg, \
Akonadi::Item::Id id ) @@ -258,10 +261,9 @@
else
parser.process( m_origMsg );
}
- if( MessageComposer::MessageComposerSettings::forceReplyCharset() ) {
- msg->contentType()->setCharset( m_origMsg->contentType()->charset() );
- }
+ applyCharset( msg );
+
link( msg, m_id, KPIM::MessageStatus::statusReplied() );
if ( m_parentFolderId > 0 ) {
KMime::Headers::Generic *header = new KMime::Headers::Generic( "X-KMail-Fcc", \
msg.get(), QString::number( m_parentFolderId ), "utf-8" ); @@ -272,6 +274,7 @@
m_origMsg->headerByType( \
QLatin1String("X-KMail-EncryptActionEnabled").latin1() )->as7BitString() == "true" ) \
{
msg->setHeader( new KMime::Headers::Generic( "X-KMail-EncryptActionEnabled", \
msg.get(), QLatin1String("true"), "utf-8" ) ); }
+ msg->assemble();
MessageReply reply;
reply.msg = msg;
@@ -338,7 +341,10 @@
else
parser.process( m_origMsg );
+ applyCharset( msg );
+
link( msg, m_id, KPIM::MessageStatus::statusForwarded() );
+ msg->assemble();
return msg;
}
@@ -825,7 +831,31 @@
return result;
}
+void MessageFactory::applyCharset( const KMime::Message::Ptr msg )
+{
+ if( MessageComposer::MessageComposerSettings::forceReplyCharset() ) {
+ msg->contentType()->setCharset( m_origMsg->contentType()->charset() );
+ QTextCodec *codec = KGlobal::charsets()->codecForName( QString::fromLatin1( \
msg->contentType()->charset() ) ); + if( !codec ) {
+ kError() << "Could not get text codec for charset" << \
msg->contentType()->charset(); + } else if( !codec->canEncode( \
QString::fromLatin1( msg->body() ) ) ) { // charset can't encode body, fall back to \
preferred + const QStringList charsets = \
MessageComposer::MessageComposerSettings::preferredCharsets(); + \
QList<QByteArray> chars; + foreach( QString charset, charsets )
+ chars << charset.toAscii();
+ QByteArray fallbackCharset = Message::Util::selectCharset( chars, \
QString::fromLatin1( msg->body() ) ); + if( fallbackCharset.isEmpty() ) // UTF-8 \
as fall-through + fallbackCharset = "UTF-8";
+ codec = KGlobal::charsets()->codecForName( QString::fromLatin1( \
fallbackCharset ) ); + msg->setBody( codec->fromUnicode( QString::fromLatin1( \
msg->body() ) ) ); + } else {
+ msg->setBody( codec->fromUnicode( QString::fromLatin1( msg->body() ) ) );
+ }
+ }
+}
+
+
QByteArray MessageFactory::getRefStr( const KMime::Message::Ptr &msg )
{
QByteArray firstRef, lastRef, refStr, retRefStr;
--- trunk/KDE/kdepim/messagecomposer/messagefactory.h #1120648:1120649
@@ -236,6 +236,14 @@
uint identityUoid(const KMime::Message::Ptr &msg );
QString replaceHeadersInString( const KMime::Message::Ptr &msg, const QString & s \
); +
+ /*
+ * If force charset option is enabled, try to set the original charset
+ * in the newly created message. If unable to encode, fall back to
+ * preferred charsets, and if all fail, use UTF-8.
+ */
+ void applyCharset( const KMime::Message::Ptr msg );
+
QByteArray getRefStr( const KMime::Message::Ptr &msg );
// TODO move IdentityManager used in KMail to kdepimlibs when not in freeze
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic