-rw-r--r-- | noncore/net/mail/libmailwrapper/pop3wrapper.cpp | 33 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/pop3wrapper.h | 1 | ||||
-rw-r--r-- | noncore/net/mail/pop3wrapper.cpp | 33 | ||||
-rw-r--r-- | noncore/net/mail/pop3wrapper.h | 1 |
4 files changed, 52 insertions, 16 deletions
diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp index 2c2a42a..65cd4ba 100644 --- a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp +++ b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp @@ -443,25 +443,20 @@ void POP3wrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mime, return; } int r; char*data = 0; size_t len; clistiter * cur = 0; - mailmime_single_fields fields; int res; QString b; - memset(&fields, 0, sizeof(struct mailmime_single_fields)); RecPart part; - if (mime->mm_mime_fields != NULL) { - mailmime_single_fields_init(&fields, mime->mm_mime_fields, - mime->mm_content_type); - } switch (mime->mm_type) { case MAILMIME_SINGLE: r = mailmessage_fetch_section(message,mime,&data,&len); + part.setSize(len); fillSingleBody(part,message,mime); if (part.Type()=="text" && target.Bodytext().isNull()) { encodedString*r = new encodedString(); r->setContent(data,len); encodedString*res = decode_String(r,part.Encoding()); b = QString(res->Content()); @@ -520,14 +515,21 @@ QString POP3wrapper::getencoding(mailmime_mechanism*aEnc) void POP3wrapper::fillSingleBody(RecPart&target,mailmessage*,mailmime*mime) { if (!mime) { return; } - mailmime_content*type = mime->mm_content_type; 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); @@ -551,12 +553,15 @@ void POP3wrapper::fillSingleBody(RecPart&target,mailmessage*,mailmime*mime) default: if (type->ct_type->tp_data.tp_discrete_type->dt_extension) { target.setType(type->ct_type->tp_data.tp_discrete_type->dt_extension); } break; } + if (type->ct_parameters) { + fillParameters(target,type->ct_parameters); + } } if (mime->mm_mime_fields && mime->mm_mime_fields->fld_list) { for (current=clist_begin(mime->mm_mime_fields->fld_list);current!=0;current=clist_next(current)) { field = (mailmime_field*)current->data; switch(field->fld_type) { case MAILMIME_FIELD_TRANSFER_ENCODING: @@ -570,8 +575,20 @@ void POP3wrapper::fillSingleBody(RecPart&target,mailmessage*,mailmime*mime) break; default: break; } } } - // TODO search the parameter list for unique id and so on +} + +void POP3wrapper::fillParameters(RecPart&target,clist*parameters) +{ + if (!parameters) {return;} + clistcell*current=0; + mailmime_parameter*param; + for (current=clist_begin(parameters);current!=0;current=clist_next(current)) { + param = (mailmime_parameter*)current->data; + if (param) { + target.addParameter(QString(param->pa_name).lower(),QString(param->pa_value)); + } + } } diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.h b/noncore/net/mail/libmailwrapper/pop3wrapper.h index 4171a76..b17928e 100644 --- a/noncore/net/mail/libmailwrapper/pop3wrapper.h +++ b/noncore/net/mail/libmailwrapper/pop3wrapper.h @@ -43,12 +43,13 @@ protected: QString parseGroup( mailimf_group *group ); QString parseAddressList( mailimf_address_list *list ); QString parseDateTime( mailimf_date_time *date ); static void traverseBody(RecBody&target,mailmessage*message,mailmime*mime,unsigned int current_rek=0); static void fillSingleBody(RecPart&target,mailmessage*message,mailmime*mime); + static void fillParameters(RecPart&target,clist*parameters); static QString POP3wrapper::getencoding(mailmime_mechanism*aEnc); POP3account *account; mailpop3 *m_pop3; QString msgTempName; unsigned int last_msg_id; diff --git a/noncore/net/mail/pop3wrapper.cpp b/noncore/net/mail/pop3wrapper.cpp index 2c2a42a..65cd4ba 100644 --- a/noncore/net/mail/pop3wrapper.cpp +++ b/noncore/net/mail/pop3wrapper.cpp @@ -443,25 +443,20 @@ void POP3wrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mime, return; } int r; char*data = 0; size_t len; clistiter * cur = 0; - mailmime_single_fields fields; int res; QString b; - memset(&fields, 0, sizeof(struct mailmime_single_fields)); RecPart part; - if (mime->mm_mime_fields != NULL) { - mailmime_single_fields_init(&fields, mime->mm_mime_fields, - mime->mm_content_type); - } switch (mime->mm_type) { case MAILMIME_SINGLE: r = mailmessage_fetch_section(message,mime,&data,&len); + part.setSize(len); fillSingleBody(part,message,mime); if (part.Type()=="text" && target.Bodytext().isNull()) { encodedString*r = new encodedString(); r->setContent(data,len); encodedString*res = decode_String(r,part.Encoding()); b = QString(res->Content()); @@ -520,14 +515,21 @@ QString POP3wrapper::getencoding(mailmime_mechanism*aEnc) void POP3wrapper::fillSingleBody(RecPart&target,mailmessage*,mailmime*mime) { if (!mime) { return; } - mailmime_content*type = mime->mm_content_type; 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); @@ -551,12 +553,15 @@ void POP3wrapper::fillSingleBody(RecPart&target,mailmessage*,mailmime*mime) default: if (type->ct_type->tp_data.tp_discrete_type->dt_extension) { target.setType(type->ct_type->tp_data.tp_discrete_type->dt_extension); } break; } + if (type->ct_parameters) { + fillParameters(target,type->ct_parameters); + } } if (mime->mm_mime_fields && mime->mm_mime_fields->fld_list) { for (current=clist_begin(mime->mm_mime_fields->fld_list);current!=0;current=clist_next(current)) { field = (mailmime_field*)current->data; switch(field->fld_type) { case MAILMIME_FIELD_TRANSFER_ENCODING: @@ -570,8 +575,20 @@ void POP3wrapper::fillSingleBody(RecPart&target,mailmessage*,mailmime*mime) break; default: break; } } } - // TODO search the parameter list for unique id and so on +} + +void POP3wrapper::fillParameters(RecPart&target,clist*parameters) +{ + if (!parameters) {return;} + clistcell*current=0; + mailmime_parameter*param; + for (current=clist_begin(parameters);current!=0;current=clist_next(current)) { + param = (mailmime_parameter*)current->data; + if (param) { + target.addParameter(QString(param->pa_name).lower(),QString(param->pa_value)); + } + } } diff --git a/noncore/net/mail/pop3wrapper.h b/noncore/net/mail/pop3wrapper.h index 4171a76..b17928e 100644 --- a/noncore/net/mail/pop3wrapper.h +++ b/noncore/net/mail/pop3wrapper.h @@ -43,12 +43,13 @@ protected: QString parseGroup( mailimf_group *group ); QString parseAddressList( mailimf_address_list *list ); QString parseDateTime( mailimf_date_time *date ); static void traverseBody(RecBody&target,mailmessage*message,mailmime*mime,unsigned int current_rek=0); static void fillSingleBody(RecPart&target,mailmessage*message,mailmime*mime); + static void fillParameters(RecPart&target,clist*parameters); static QString POP3wrapper::getencoding(mailmime_mechanism*aEnc); POP3account *account; mailpop3 *m_pop3; QString msgTempName; unsigned int last_msg_id; |