-rw-r--r-- | noncore/net/mail/genericwrapper.cpp | 41 | ||||
-rw-r--r-- | noncore/net/mail/genericwrapper.h | 2 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/genericwrapper.cpp | 41 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/genericwrapper.h | 2 |
4 files changed, 72 insertions, 14 deletions
diff --git a/noncore/net/mail/genericwrapper.cpp b/noncore/net/mail/genericwrapper.cpp index bef6ae5..5de9299 100644 --- a/noncore/net/mail/genericwrapper.cpp +++ b/noncore/net/mail/genericwrapper.cpp @@ -124,5 +124,5 @@ QString Genericwrapper::getencoding(mailmime_mechanism*aEnc) } -void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mime,unsigned int current_rec) +void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mime,QValueList<int>recList,unsigned int current_rec,int current_count) { if (current_rec >= 10) { @@ -139,8 +139,16 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi RecPart part; + //current_count; + switch (mime->mm_type) { case MAILMIME_SINGLE: + { + QValueList<int>countlist = recList; + countlist.append(current_count); r = mailmessage_fetch_section(message,mime,&data,&len); part.setSize(len); + part.setPositionlist(countlist); + b = gen_attachment_id(); + part.setIdentifier(b); fillSingleBody(part,message,mime); if (part.Type()=="text" && target.Bodytext().isNull()) { @@ -154,18 +162,38 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi target.setDescription(part); } else { - b = gen_attachment_id(); - part.setIdentifier(b); bodyCache[b]=new encodedString(data,len); target.addPart(part); } + } break; case MAILMIME_MULTIPLE: + { + unsigned int ccount = current_count; for (cur = clist_begin(mime->mm_data.mm_multipart.mm_mp_list) ; cur != NULL ; cur = clist_next(cur)) { - traverseBody(target,message, (mailmime*)clist_content(cur),current_rec+1); + traverseBody(target,message, (mailmime*)clist_content(cur),recList,current_rec+1,ccount); + ++ccount; + } } break; case MAILMIME_MESSAGE: + { + QValueList<int>countlist = recList; + countlist.append(current_count); + /* the own header is always at recursion 0 - we don't need that */ + if (current_rec > 0) { + part.setPositionlist(countlist); + r = mailmessage_fetch_section(message,mime,&data,&len); + part.setSize(len); + part.setPositionlist(countlist); + b = gen_attachment_id(); + part.setIdentifier(b); + part.setType("message"); + part.setSubtype("rfc822"); + bodyCache[b]=new encodedString(data,len); + target.addPart(part); + } if (mime->mm_data.mm_message.mm_msg_mime != NULL) { - traverseBody(target,message,mime->mm_data.mm_message.mm_msg_mime,current_rec+1); + traverseBody(target,message,mime->mm_data.mm_message.mm_msg_mime,countlist,current_rec+1); + } } break; @@ -182,5 +210,6 @@ RecBody Genericwrapper::parseMail( mailmessage * msg ) memset(&fields, 0, sizeof(struct mailmime_single_fields)); err = mailmessage_get_bodystructure(msg,&mime); - traverseBody(body,msg,mime); + QValueList<int>recList; + traverseBody(body,msg,mime,recList); return body; } diff --git a/noncore/net/mail/genericwrapper.h b/noncore/net/mail/genericwrapper.h index 54d6ea9..c00d864 100644 --- a/noncore/net/mail/genericwrapper.h +++ b/noncore/net/mail/genericwrapper.h @@ -46,5 +46,5 @@ protected: QString parseDateTime( mailimf_date_time *date ); - void traverseBody(RecBody&target,mailmessage*message,mailmime*mime,unsigned int current_rek=0); + void traverseBody(RecBody&target,mailmessage*message,mailmime*mime,QValueList<int>recList,unsigned int current_rek=0,int current_count=0); static void fillSingleBody(RecPart&target,mailmessage*message,mailmime*mime); static void fillParameters(RecPart&target,clist*parameters); diff --git a/noncore/net/mail/libmailwrapper/genericwrapper.cpp b/noncore/net/mail/libmailwrapper/genericwrapper.cpp index bef6ae5..5de9299 100644 --- a/noncore/net/mail/libmailwrapper/genericwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/genericwrapper.cpp @@ -124,5 +124,5 @@ QString Genericwrapper::getencoding(mailmime_mechanism*aEnc) } -void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mime,unsigned int current_rec) +void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mime,QValueList<int>recList,unsigned int current_rec,int current_count) { if (current_rec >= 10) { @@ -139,8 +139,16 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi RecPart part; + //current_count; + switch (mime->mm_type) { case MAILMIME_SINGLE: + { + QValueList<int>countlist = recList; + countlist.append(current_count); r = mailmessage_fetch_section(message,mime,&data,&len); part.setSize(len); + part.setPositionlist(countlist); + b = gen_attachment_id(); + part.setIdentifier(b); fillSingleBody(part,message,mime); if (part.Type()=="text" && target.Bodytext().isNull()) { @@ -154,18 +162,38 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi target.setDescription(part); } else { - b = gen_attachment_id(); - part.setIdentifier(b); bodyCache[b]=new encodedString(data,len); target.addPart(part); } + } break; case MAILMIME_MULTIPLE: + { + unsigned int ccount = current_count; for (cur = clist_begin(mime->mm_data.mm_multipart.mm_mp_list) ; cur != NULL ; cur = clist_next(cur)) { - traverseBody(target,message, (mailmime*)clist_content(cur),current_rec+1); + traverseBody(target,message, (mailmime*)clist_content(cur),recList,current_rec+1,ccount); + ++ccount; + } } break; case MAILMIME_MESSAGE: + { + QValueList<int>countlist = recList; + countlist.append(current_count); + /* the own header is always at recursion 0 - we don't need that */ + if (current_rec > 0) { + part.setPositionlist(countlist); + r = mailmessage_fetch_section(message,mime,&data,&len); + part.setSize(len); + part.setPositionlist(countlist); + b = gen_attachment_id(); + part.setIdentifier(b); + part.setType("message"); + part.setSubtype("rfc822"); + bodyCache[b]=new encodedString(data,len); + target.addPart(part); + } if (mime->mm_data.mm_message.mm_msg_mime != NULL) { - traverseBody(target,message,mime->mm_data.mm_message.mm_msg_mime,current_rec+1); + traverseBody(target,message,mime->mm_data.mm_message.mm_msg_mime,countlist,current_rec+1); + } } break; @@ -182,5 +210,6 @@ RecBody Genericwrapper::parseMail( mailmessage * msg ) memset(&fields, 0, sizeof(struct mailmime_single_fields)); err = mailmessage_get_bodystructure(msg,&mime); - traverseBody(body,msg,mime); + QValueList<int>recList; + traverseBody(body,msg,mime,recList); return body; } diff --git a/noncore/net/mail/libmailwrapper/genericwrapper.h b/noncore/net/mail/libmailwrapper/genericwrapper.h index 54d6ea9..c00d864 100644 --- a/noncore/net/mail/libmailwrapper/genericwrapper.h +++ b/noncore/net/mail/libmailwrapper/genericwrapper.h @@ -46,5 +46,5 @@ protected: QString parseDateTime( mailimf_date_time *date ); - void traverseBody(RecBody&target,mailmessage*message,mailmime*mime,unsigned int current_rek=0); + void traverseBody(RecBody&target,mailmessage*message,mailmime*mime,QValueList<int>recList,unsigned int current_rek=0,int current_count=0); static void fillSingleBody(RecPart&target,mailmessage*message,mailmime*mime); static void fillParameters(RecPart&target,clist*parameters); |