Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1:kernel-2.6.32
kdepim4
r890879.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File r890879.diff of Package kdepim4
Subject: kmail: update detected encoding on inserting file in composer From: wstephenson@suse.de Bug: kde#88781 Patch-upstream: 890879 --- kmail/kmcomposewin.cpp (revision 890878) +++ kmail/kmcomposewin.cpp (revision 890879) @@ -2291,10 +2291,13 @@ void KMComposeWin::slotAttachFileData( K { QMap<KIO::Job*, atmLoadData>::Iterator it = mMapAtmLoadData.find( job ); assert( it != mMapAtmLoadData.end() ); - QBuffer buff( &(*it).data ); - buff.open( QIODevice::WriteOnly | QIODevice::Append ); - buff.write( data.data(), data.size() ); - buff.close(); + + if ( data.size() > 0 ) { + QBuffer buff( &(*it).data ); + buff.open( QIODevice::WriteOnly | QIODevice::Append ); + buff.write( data.data(), data.size() ); + buff.close(); + } } //----------------------------------------------------------------------------- @@ -2320,28 +2323,55 @@ void KMComposeWin::slotAttachFileResult( return; } - if ( (*it).insert ) { - (*it).data.resize((*it).data.size() + 1); - (*it).data[(*it).data.size() - 1] = '\0'; - if ( const QTextCodec *codec = KGlobal::charsets()->codecForName((*it).encoding) ) { - mEditor->textCursor().insertText( codec->toUnicode( (*it).data ) ); + atmLoadData &loadData = *it; + + // If we only want to insert this file into the composer and not attach it, + // do that now and return + if ( loadData.insert ) { + + // Actually insert the file as text + const QTextCodec *fileCodec = KGlobal::charsets()->codecForName( loadData.encoding ); + if ( fileCodec ) { + mEditor->textCursor().insertText( fileCodec->toUnicode( loadData.data.data() ) ); } else { - mEditor->textCursor().insertText( QString::fromLocal8Bit( (*it).data ) ); + mEditor->textCursor().insertText( QString::fromLocal8Bit( loadData.data.data() ) ); + } + + // If the user has set a custom encoding, check if that encoding can still encode + // the whole text. If not, change the encoding back to automatic. + if ( !mAutoCharset ) { + const QTextCodec *currentCodec = KMMsgBase::codecForName( mCharset ); + if ( currentCodec ) { + QString editorText = mEditor->toPlainText(); + QByteArray encodedText = currentCodec->fromUnicode( editorText ); + if ( currentCodec->toUnicode( encodedText ) != editorText ) { + kDebug() << "Current encoding" << mCharset << "can't encode content, changing to auto."; + mEncodingAction->setCurrentItem( 0 ); + slotSetCharset(); + } + } + else + kWarning() << "No codec found for current encoding. How can this happen!?"; } - mMapAtmLoadData.erase(it); + + mMapAtmLoadData.erase( it ); if ( attachURLfound ) { emit attachmentAdded( attachUrl, true ); } return; } - const QByteArray partCharset = (*it).url.fileEncoding().isEmpty() - ? mCharset - : QByteArray((*it).url.fileEncoding().toLatin1()); + + QByteArray partCharset; + if ( !loadData.url.fileEncoding().isEmpty() ) { + partCharset = loadData.url.fileEncoding().toLatin1(); + } else { + partCharset = mCharset; + } KMMessagePart* msgPart; KCursorSaver busy( KBusyPtr::busy() ); - QString name( (*it).url.fileName() ); + QString name( loadData.url.fileName() ); // ask the job for the mime type of the file QString mimeType = static_cast<KIO::TransferJob*>(job)->mimetype(); @@ -2389,11 +2419,11 @@ void KMComposeWin::slotAttachFileResult( msgPart->setName( name ); QList<int> allowedCTEs; if ( mimeType == "message/rfc822" ) { - msgPart->setMessageBody( (*it).data ); + msgPart->setMessageBody( loadData.data ); allowedCTEs << DwMime::kCte7bit; allowedCTEs << DwMime::kCte8bit; } else { - msgPart->setBodyAndGuessCte( (*it).data, allowedCTEs, + msgPart->setBodyAndGuessCte( loadData.data, allowedCTEs, !kmkernel->msgSender()->sendQuotedPrintable() ); kDebug(5006) <<"autodetected cte:" << msgPart->cteStr(); } @@ -2435,10 +2465,11 @@ void KMComposeWin::slotAttachFileResult( } } mAtmModified = true; - if (msgPart->typeStr().toLower() != "text") msgPart->setCharset(QByteArray()); + if ( msgPart->typeStr().toLower() != "text" ) + msgPart->setCharset( QByteArray() ); // add the new attachment to the list - addAttach(msgPart); + addAttach( msgPart ); if ( attachURLfound ) { emit attachmentAdded( attachUrl, true ); Index: kmail/kmcomposewin.cpp ===================================================================
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor