From f42c15f884d4377bc99d73e16fa1722b0fb2a4d3 Mon Sep 17 00:00:00 2001 From: alwin Date: Tue, 16 Dec 2003 02:13:09 +0000 Subject: quoted-printable text will be decoded for display --- (limited to 'noncore/net/mail/libmailwrapper') diff --git a/noncore/net/mail/libmailwrapper/abstractmail.cpp b/noncore/net/mail/libmailwrapper/abstractmail.cpp index 7380c31..0bb2525 100644 --- a/noncore/net/mail/libmailwrapper/abstractmail.cpp +++ b/noncore/net/mail/libmailwrapper/abstractmail.cpp @@ -2,6 +2,10 @@ #include "imapwrapper.h" #include "pop3wrapper.h" +#include +#include +#include + AbstractMail* AbstractMail::getWrapper(IMAPaccount *a) { return new IMAPwrapper(a); @@ -11,3 +15,20 @@ AbstractMail* AbstractMail::getWrapper(POP3account *a) { return new POP3wrapper(a); } + +QString AbstractMail::decode_quoted_printable(const char*text) +{ + char*result_text; + size_t index = 0; + QString result = ""; + /* reset for recursive use! */ + size_t target_length = 0; + result_text = 0; + int err = mailmime_quoted_printable_body_parse(text,strlen(text), + &index,&result_text,&target_length,0); + if (result_text) { + result = result_text; + free(result_text); + } + return result; +} diff --git a/noncore/net/mail/libmailwrapper/abstractmail.h b/noncore/net/mail/libmailwrapper/abstractmail.h index 62e0715..4473ad2 100644 --- a/noncore/net/mail/libmailwrapper/abstractmail.h +++ b/noncore/net/mail/libmailwrapper/abstractmail.h @@ -23,9 +23,9 @@ public: virtual QString fetchPart(const RecMail&mail,const RecPart&part)=0; virtual void deleteMail(const RecMail&mail)=0; virtual void answeredMail(const RecMail&mail)=0; - + static AbstractMail* getWrapper(IMAPaccount *a); static AbstractMail* getWrapper(POP3account *a); + static QString decode_quoted_printable(const char*text); }; - #endif diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp index ad95384..a4e6228 100644 --- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp @@ -392,6 +392,9 @@ void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mai case MAILIMAP_BODY_TYPE_1PART_MSG: path.append(1); body_text = fetchPart(mail,path,true); + if (singlePart.Encoding()=="quoted-printable") { + body_text = decode_quoted_printable(body_text.latin1()); + } target_body.setBodytext(body_text); target_body.setDescription(singlePart); break; @@ -399,6 +402,9 @@ void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mai qDebug("Mediatype single: %s",mailDescription->bd_data.bd_type_text->bd_media_text); path.append(1); body_text = fetchPart(mail,path,true); + if (singlePart.Encoding()=="quoted-printable") { + body_text = decode_quoted_printable(body_text.latin1()); + } target_body.setBodytext(body_text); target_body.setDescription(singlePart); break; @@ -455,7 +461,7 @@ QStringList IMAPwrapper::address_list_to_stringlist(clist*list) return l; } -QString IMAPwrapper::fetchPart(const RecMail&mail,const QValueList&path,bool internal_call) +QString IMAPwrapper::fetchPart(const RecMail&mail,const QValueList&path,bool internal_call,const QString&enc) { QString body(""); const char*mb; @@ -507,7 +513,11 @@ QString IMAPwrapper::fetchPart(const RecMail&mail,const QValueList&path,boo char*text = msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part; msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part = 0L; if (text) { - body = QString(text); + if (enc=="quoted-printable") { + body = decode_quoted_printable(text); + } else { + body = QString(text); + } free(text); } else { body = ""; @@ -547,7 +557,7 @@ void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_mpart*mai clist.append(count); /* important: Check for is NULL 'cause a body can be empty! */ if (currentPart.Type()=="text" && target_body.Bodytext().isNull() ) { - QString body_text = fetchPart(mail,clist,true); + QString body_text = fetchPart(mail,clist,true,currentPart.Encoding()); target_body.setDescription(currentPart); target_body.setBodytext(body_text); } else { @@ -705,7 +715,7 @@ void IMAPwrapper::fillBodyFields(RecPart&target_part,mailimap_body_fields*which) QString IMAPwrapper::fetchPart(const RecMail&mail,const RecPart&part) { - return fetchPart(mail,part.Positionlist(),false); + return fetchPart(mail,part.Positionlist(),false,part.Encoding()); } void IMAPwrapper::deleteMail(const RecMail&mail) diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.h b/noncore/net/mail/libmailwrapper/imapwrapper.h index 700d512..768a517 100644 --- a/noncore/net/mail/libmailwrapper/imapwrapper.h +++ b/noncore/net/mail/libmailwrapper/imapwrapper.h @@ -34,7 +34,7 @@ protected: void login(); void logout(); - virtual QString fetchPart(const RecMail&mail,const QValueList&path,bool internal_call=false); + virtual QString fetchPart(const RecMail&mail,const QValueList&path,bool internal_call=false,const QString&enc=""); void searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body); void searchBodyText(const RecMail&mail,mailimap_body_type_mpart*mailDescription,RecBody&target_body,int current_recursion=0,QValueListrecList=QValueList()); @@ -48,7 +48,7 @@ protected: static void fillBodyFields(RecPart&target_part,mailimap_body_fields*which); static QStringList address_list_to_stringlist(clist*list); -private: + IMAPaccount *account; mailimap *m_imap; }; -- cgit v0.9.0.2