-rw-r--r-- | noncore/net/mail/genericwrapper.cpp | 47 | ||||
-rw-r--r-- | noncore/net/mail/genericwrapper.h | 2 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/genericwrapper.cpp | 47 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/genericwrapper.h | 2 |
4 files changed, 78 insertions, 20 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 @@ -125,3 +125,3 @@ 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) { @@ -140,6 +140,14 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi + //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); @@ -155,4 +163,2 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi } else { - b = gen_attachment_id(); - part.setIdentifier(b); bodyCache[b]=new encodedString(data,len); @@ -160,13 +166,35 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi } - break; + } + 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; + } + 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; + } + break; } @@ -183,3 +211,4 @@ RecBody Genericwrapper::parseMail( mailmessage * msg ) 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 @@ -47,3 +47,3 @@ protected: - 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); 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 @@ -125,3 +125,3 @@ 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) { @@ -140,6 +140,14 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi + //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); @@ -155,4 +163,2 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi } else { - b = gen_attachment_id(); - part.setIdentifier(b); bodyCache[b]=new encodedString(data,len); @@ -160,13 +166,35 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi } - break; + } + 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; + } + 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; + } + break; } @@ -183,3 +211,4 @@ RecBody Genericwrapper::parseMail( mailmessage * msg ) 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 @@ -47,3 +47,3 @@ protected: - 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); |