Diffstat (limited to 'noncore/net/mail/libmailwrapper/genericwrapper.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/mail/libmailwrapper/genericwrapper.cpp | 69 |
1 files changed, 67 insertions, 2 deletions
diff --git a/noncore/net/mail/libmailwrapper/genericwrapper.cpp b/noncore/net/mail/libmailwrapper/genericwrapper.cpp index c1b6e48..bef6ae5 100644 --- a/noncore/net/mail/libmailwrapper/genericwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/genericwrapper.cpp @@ -1,51 +1,50 @@ #include "genericwrapper.h" -#include <libetpan/mailmime.h> -#include <libetpan/data_message_driver.h> +#include <libetpan/libetpan.h> #include "mailtypes.h" Genericwrapper::Genericwrapper() : AbstractMail() { bodyCache.clear(); } Genericwrapper::~Genericwrapper() { cleanMimeCache(); } void Genericwrapper::fillSingleBody(RecPart&target,mailmessage*,mailmime*mime) { if (!mime) { return; } mailmime_field*field = 0; mailmime_single_fields fields; memset(&fields, 0, sizeof(struct mailmime_single_fields)); if (mime->mm_mime_fields != NULL) { mailmime_single_fields_init(&fields, mime->mm_mime_fields, mime->mm_content_type); } mailmime_content*type = fields.fld_content; clistcell*current; if (!type) { target.setType("text"); target.setSubtype("plain"); } else { target.setSubtype(type->ct_subtype); switch(type->ct_type->tp_data.tp_discrete_type->dt_type) { case MAILMIME_DISCRETE_TYPE_TEXT: target.setType("text"); break; case MAILMIME_DISCRETE_TYPE_IMAGE: target.setType("image"); break; case MAILMIME_DISCRETE_TYPE_AUDIO: target.setType("audio"); break; case MAILMIME_DISCRETE_TYPE_VIDEO: target.setType("video"); break; case MAILMIME_DISCRETE_TYPE_APPLICATION: target.setType("application"); @@ -346,48 +345,114 @@ QString Genericwrapper::parseMailboxList( mailimf_mailbox_list *list ) if ( !first ) { result.append( "," ); } else { first = false; } result.append( parseMailbox( box ) ); } return result; } encodedString* Genericwrapper::fetchDecodedPart(const RecMail&,const RecPart&part) { QMap<QString,encodedString*>::ConstIterator it = bodyCache.find(part.Identifier()); if (it==bodyCache.end()) return new encodedString(); encodedString*t = decode_String(it.data(),part.Encoding()); return t; } encodedString* Genericwrapper::fetchRawPart(const RecMail&mail,const RecPart&part) { QMap<QString,encodedString*>::ConstIterator it = bodyCache.find(part.Identifier()); if (it==bodyCache.end()) return new encodedString(); encodedString*t = it.data(); return t; } QString Genericwrapper::fetchTextPart(const RecMail&mail,const RecPart&part) { encodedString*t = fetchDecodedPart(mail,part); QString text=t->Content(); delete t; return text; } void Genericwrapper::cleanMimeCache() { QMap<QString,encodedString*>::Iterator it = bodyCache.begin(); for (;it!=bodyCache.end();++it) { encodedString*t = it.data(); //it.setValue(0); if (t) delete t; } bodyCache.clear(); qDebug("Genericwrapper: cache cleaned"); } + +void Genericwrapper::parseList(QList<RecMail> &target,mailsession*session,const QString&mailbox) +{ + int r; + mailmessage_list * env_list = 0; + r = mailsession_get_messages_list(session,&env_list); + if (r != MAIL_NO_ERROR) { + qDebug("Error message list"); + return; + } + r = mailsession_get_envelopes_list(session, env_list); + if (r != MAIL_NO_ERROR) { + qDebug("Error filling message list"); + if (env_list) { + mailmessage_list_free(env_list); + } + return; + } + mailimf_references * refs; + uint32_t i = 0; + for(; i < carray_count(env_list->msg_tab) ; ++i) { + mailmessage * msg; + QBitArray mFlags(7); + msg = (mailmessage*)carray_get(env_list->msg_tab, i); + if (msg->msg_fields == NULL) { + qDebug("could not fetch envelope of message %i", i); + continue; + } + RecMail * mail = new RecMail(); + mail->setWrapper(this); + mail_flags * flag_result = 0; + r = mailmessage_get_flags(msg,&flag_result); + if (r == MAIL_ERROR_NOT_IMPLEMENTED) { + mFlags.setBit(FLAG_SEEN); + } + mailimf_single_fields single_fields; + mailimf_single_fields_init(&single_fields, msg->msg_fields); + mail->setMsgsize(msg->msg_size); + mail->setFlags(mFlags); + mail->setMbox(mailbox); + mail->setNumber(i+1); + if (single_fields.fld_subject) + mail->setSubject( convert_String(single_fields.fld_subject->sbj_value)); + if (single_fields.fld_from) + mail->setFrom(parseMailboxList(single_fields.fld_from->frm_mb_list)); + if (single_fields.fld_to) + mail->setTo( parseAddressList( single_fields.fld_to->to_addr_list ) ); + if (single_fields.fld_cc) + mail->setCC( parseAddressList( single_fields.fld_cc->cc_addr_list ) ); + if (single_fields.fld_bcc) + mail->setBcc( parseAddressList( single_fields.fld_bcc->bcc_addr_list ) ); + if (single_fields.fld_orig_date) + mail->setDate( parseDateTime( single_fields.fld_orig_date->dt_date_time ) ); + if (single_fields.fld_message_id->mid_value) + mail->setMsgid(QString(single_fields.fld_message_id->mid_value)); + refs = single_fields.fld_references; + if (refs && refs->mid_list && clist_count(refs->mid_list)) { + char * text = (char*)refs->mid_list->first->data; + mail->setReplyto(QString(text)); + } + target.append(mail); + } + if (env_list) { + mailmessage_list_free(env_list); + } +} |