diff options
Diffstat (limited to 'kfile-plugins/mhtml/kfile_mhtml.cpp')
-rw-r--r-- | kfile-plugins/mhtml/kfile_mhtml.cpp | 201 |
1 files changed, 0 insertions, 201 deletions
diff --git a/kfile-plugins/mhtml/kfile_mhtml.cpp b/kfile-plugins/mhtml/kfile_mhtml.cpp deleted file mode 100644 index 0a07ea9..0000000 --- a/kfile-plugins/mhtml/kfile_mhtml.cpp +++ /dev/null @@ -1,201 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005 by Spiros Georgaras * - * sngeorgaras@otenet.gr * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - ***************************************************************************/ - - -#include <config.h> -#include "kfile_mhtml.h" - -#include <kgenericfactory.h> -#include <kmdcodec.h> -#include <tqstring.h> -#include <tqcstring.h> -#include <tqfile.h> -#include <tqtextstream.h> -#include <tqtextcodec.h> - -typedef KGenericFactory<mhtmlPlugin> mhtmlFactory; - -K_EXPORT_COMPONENT_FACTORY(kfile_mhtml, mhtmlFactory( "kfile_mhtml" )) - -mhtmlPlugin::mhtmlPlugin(TQObject *parent, const char *name, - const TQStringList &args) - : KFilePlugin(parent, name, args) -{ - KFileMimeTypeInfo* info = addMimeTypeInfo( "application/x-mimearchive" ); - KFileMimeTypeInfo::GroupInfo* group = 0L; - group = addGroupInfo(info, "mhtmlInfo", i18n("Document Information")); - KFileMimeTypeInfo::ItemInfo* item; - item = addItemInfo(group, "Subject", i18n("Subject"), TQVariant::String); - item = addItemInfo(group, "Sender", i18n("Sender"), TQVariant::String); - item = addItemInfo(group, "Recipient", i18n("Recipient"), TQVariant::String); - item = addItemInfo(group, "CopyTo", i18n("CC"), TQVariant::String); - item = addItemInfo(group, "BlindCopyTo", i18n("BCC"), TQVariant::String); - item = addItemInfo(group, "Date", i18n("Date"), TQVariant::String); -} - -bool mhtmlPlugin::readInfo( KFileMetaInfo& info, uint /*what*/) -{ - TQString mSender; - TQString mRecipient; - TQString mCopyTo; - TQString mBlindCopyTo; - TQString mSubject; - TQString mDate; - bool canUnfold; - if ( info.path().isEmpty() ) // remote file - return false; - - TQFile f(info.path()); - if (!f.open(IO_ReadOnly)) return false; - TQTextStream stream(&f); - TQString l=stream.readLine(); - int nFieldsFound = 0; - while(!l.isEmpty()){ - if(l.startsWith("From: ")) { - mSender=l.mid(6); - nFieldsFound |= 1; - canUnfold=TRUE; - } else if(l.startsWith("To: ")) { - mRecipient=l.mid(4); - nFieldsFound |= 2; - canUnfold=TRUE; - } else if(l.startsWith("Subject: ")) { - mSubject=l.mid(9); - nFieldsFound |= 4; - canUnfold=TRUE; - } else if(l.startsWith("Cc: ")) { - mCopyTo=l.mid(4); - nFieldsFound |= 8; - canUnfold=TRUE; - } else if(l.startsWith("Bcc: ")) { - mBlindCopyTo=l.mid(5); - nFieldsFound |= 16; - canUnfold=TRUE; - } else if(l.startsWith("Date: ")) { - mDate=l.mid(6); - nFieldsFound |= 32; - canUnfold=FALSE; - }else if(l.startsWith(" ") || l.startsWith("\t")){ - // unfold field - if(canUnfold){ - TQString tmp=l.stripWhiteSpace(); - if(nFieldsFound & 16) mBlindCopyTo=mBlindCopyTo+" "+tmp; - else if(nFieldsFound & 8) mCopyTo=mCopyTo+" "+tmp; - else if(nFieldsFound & 4) mSubject=mSubject+" "+tmp; - else if(nFieldsFound & 2) mRecipient=mRecipient+" "+tmp; - else if(nFieldsFound & 1) mSender=mSender+" "+tmp; - } - }else canUnfold=FALSE; - // break out of the loop once the six fields have been found - if ( nFieldsFound == 32+16+8+4+2+1 ) - break; - l=stream.readLine(); - } - f.close(); - KFileMetaInfoGroup group = appendGroup(info, "mhtmlInfo"); - appendItem(group, "Subject", decodeRFC2047Phrase(mSubject,FALSE)); - appendItem(group, "Sender", decodeRFC2047Phrase(mSender)); - appendItem(group, "Recipient", decodeRFC2047Phrase(mRecipient)); - appendItem(group, "CopyTo", decodeRFC2047Phrase(mCopyTo)); - appendItem(group, "BlindCopyTo", decodeRFC2047Phrase(mBlindCopyTo)); - appendItem(group, "Date", mDate); - return true; -} - -TQString mhtmlPlugin::decodeRFC2047Phrase(const TQString &msg, bool removeLessGreater){ - int st=msg.find("=?"); - int en=-1; - TQString msgCopy=msg; - TQString decodedText=msgCopy.left(st); - TQString encodedText=msgCopy.mid(st); - st=encodedText.find("=?"); - while(st!=-1){ - en=encodedText.find("?="); - while(encodedText.mid(en+2,1)!=" " && en+2<(int)encodedText.length()) en=encodedText.find("?=",en+1); - if(en==-1) break; - decodedText+=encodedText.left(st); - TQString tmp=encodedText.mid(st,en-st+2); - encodedText=encodedText.mid(en+2); - decodedText+=decodeRFC2047String(tmp); - st=encodedText.find("=?",st+1); - } - decodedText += encodedText; - // remove unwanted '<' and '>' - if(removeLessGreater){ - if(decodedText.stripWhiteSpace().startsWith("<") && decodedText.stripWhiteSpace().endsWith(">")){ - TQString tmp=decodedText.stripWhiteSpace(); - tmp=tmp.mid(1,tmp.length()-2); - decodedText=tmp; - }else{ - TQString dec=decodedText; - TQString tmp; - - st=decodedText.find("<"); - while(st!=-1){ - st=dec.find("<",st); - if(st==0 || (st!=0 && (dec.mid(st-2,2)==", "))){ - en=dec.find(">",st); - if(en==-1 && dec.find(",",st)<en){ - st++; - continue; - } - dec=dec.left(st)+dec.mid(st+1,en-st-1)+dec.mid(en+1); - }else if(st!=-1) st++; - } - decodedText=dec; - } - } - return decodedText; -} - -TQString mhtmlPlugin::decodeRFC2047String(const TQString &msg){ - TQString charset; - TQString encoding; - TQString notEncodedText; - TQString encodedText; - TQString decodedText; - int encEnd=0; - if(msg.startsWith("=?") && (encEnd=msg.findRev("?="))!=-1){ - notEncodedText=msg.mid(encEnd+2); - encodedText=msg.left(encEnd); - encodedText=encodedText.mid(2,encodedText.length()-2); - int questionMark=encodedText.find('?'); - if(questionMark==-1) return msg; - charset=encodedText.left(questionMark).lower(); - encoding=encodedText.mid(questionMark+1,1).lower(); - if(encoding!="b" && encoding!="q") return msg; - encodedText=encodedText.mid(questionMark+3); - if(charset.find(" ")!=-1 && encodedText.find(" ")!=-1) return msg; - TQCString tmpIn; - TQCString tmpOut; - tmpIn = encodedText.local8Bit(); - if(encoding=="q")tmpOut=KCodecs::quotedPrintableDecode(tmpIn); - else tmpOut=KCodecs::base64Decode(tmpIn); - if(charset!="us-ascii"){ - TQTextCodec *codec = TQTextCodec::codecForName(charset.local8Bit()); - if(!codec) return msg; - decodedText=codec->toUnicode(tmpOut); - decodedText=decodedText.replace("_"," "); - }else decodedText=tmpOut.replace("_"," "); - return decodedText + notEncodedText; - }else return msg; -} -#include "kfile_mhtml.moc" - |