Diffstat (limited to 'noncore/net/mail/genericwrapper.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/net/mail/genericwrapper.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/noncore/net/mail/genericwrapper.cpp b/noncore/net/mail/genericwrapper.cpp index 62116ba..714396b 100644 --- a/noncore/net/mail/genericwrapper.cpp +++ b/noncore/net/mail/genericwrapper.cpp @@ -129,57 +129,73 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi qDebug("too deep recursion!"); } if (!message || !mime) { return; } int r; char*data = 0; size_t len; clistiter * cur = 0; QString b; 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()) { encodedString*r = new encodedString(); r->setContent(data,len); encodedString*res = decode_String(r,part.Encoding()); - b = QString(res->Content()); + if (countlist.count()>2) { + bodyCache[b]=r; + target.addPart(part); + } else { delete r; + } + b = QString(res->Content()); delete res; target.setBodytext(b); target.setDescription(part); } else { bodyCache[b]=new encodedString(data,len); target.addPart(part); } } break; case MAILMIME_MULTIPLE: { - unsigned int ccount = current_count; + unsigned int ccount = 1; + mailmime*cbody=0; + QValueList<int>countlist = recList; 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),recList,current_rec+1,ccount); + cbody = (mailmime*)clist_content(cur); + if (cbody->mm_type==MAILMIME_MULTIPLE) { + RecPart targetPart; + targetPart.setType("multipart"); + countlist.append(current_count); + targetPart.setPositionlist(countlist); + target.addPart(targetPart); + } + traverseBody(target,message, cbody,countlist,current_rec+1,ccount); + if (cbody->mm_type==MAILMIME_MULTIPLE) { + countlist = recList; + } ++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); |