summaryrefslogtreecommitdiff
path: root/noncore/net/mail/libmailwrapper/genericwrapper.cpp
Side-by-side diff
Diffstat (limited to 'noncore/net/mail/libmailwrapper/genericwrapper.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/libmailwrapper/genericwrapper.cpp52
1 files changed, 39 insertions, 13 deletions
diff --git a/noncore/net/mail/libmailwrapper/genericwrapper.cpp b/noncore/net/mail/libmailwrapper/genericwrapper.cpp
index eb2c031..137a6ef 100644
--- a/noncore/net/mail/libmailwrapper/genericwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/genericwrapper.cpp
@@ -30,13 +30,13 @@ void Genericwrapper::fillSingleBody(RecPart&target,mailmessage*,mailmime*mime)
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 {
@@ -142,13 +142,13 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi
int r;
char*data = 0;
size_t len;
clistiter * cur = 0;
QString b;
RecPart part;
-
+
switch (mime->mm_type) {
case MAILMIME_SINGLE:
{
QValueList<int>countlist = recList;
countlist.append(current_count);
r = mailmessage_fetch_section(message,mime,&data,&len);
@@ -238,28 +238,28 @@ RecBody Genericwrapper::parseMail( mailmessage * msg )
return body;
}
QString Genericwrapper::parseDateTime( mailimf_date_time *date )
{
char tmp[23];
-
- snprintf( tmp, 23, "%02i.%02i.%04i %02i:%02i:%02i %+05i",
+
+ snprintf( tmp, 23, "%02i.%02i.%04i %02i:%02i:%02i %+05i",
date->dt_day, date->dt_month, date->dt_year, date->dt_hour, date->dt_min, date->dt_sec, date->dt_zone );
-
+
return QString( tmp );
}
QString Genericwrapper::parseAddressList( mailimf_address_list *list )
{
QString result( "" );
bool first = true;
if (list == 0) return result;
for ( clistiter *current = clist_begin( list->ad_list ); current != NULL; current = current->next ) {
mailimf_address *addr = (mailimf_address *) current->data;
-
+
if ( !first ) {
result.append( "," );
} else {
first = false;
}
@@ -272,13 +272,13 @@ QString Genericwrapper::parseAddressList( mailimf_address_list *list )
break;
default:
qDebug( "Generic: unkown mailimf address type" );
break;
}
}
-
+
return result;
}
QString Genericwrapper::parseGroup( mailimf_group *group )
{
QString result( "" );
@@ -288,13 +288,13 @@ QString Genericwrapper::parseGroup( mailimf_group *group )
if ( group->grp_mb_list != NULL ) {
result.append( parseMailboxList( group->grp_mb_list ) );
}
result.append( ";" );
-
+
return result;
}
QString Genericwrapper::parseMailbox( mailimf_mailbox *box )
{
QString result( "" );
@@ -304,13 +304,13 @@ QString Genericwrapper::parseMailbox( mailimf_mailbox *box )
} else {
result.append( convert_String(box->mb_display_name).latin1() );
result.append( " <" );
result.append( box->mb_addr_spec );
result.append( ">" );
}
-
+
return result;
}
QString Genericwrapper::parseMailboxList( mailimf_mailbox_list *list )
{
QString result( "" );
@@ -321,16 +321,16 @@ 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());
@@ -364,12 +364,32 @@ void Genericwrapper::cleanMimeCache()
if (t) delete t;
}
bodyCache.clear();
qDebug("Genericwrapper: cache cleaned");
}
+QStringList Genericwrapper::parseInreplies(mailimf_in_reply_to * in_replies)
+{
+ QStringList res;
+ if (!in_replies || !in_replies->mid_list) return res;
+ clistiter * current = 0;
+ for ( current = clist_begin( in_replies->mid_list ); current != NULL; current = current->next ) {
+ QString h((char*)current->data);
+ while (h.length()>0 && h[0]=='<') {
+ h.remove(0,1);
+ }
+ while (h.length()>0 && h[h.length()-1]=='>') {
+ h.remove(h.length()-1,1);
+ }
+ if (h.length()>0) {
+ res.append(h);
+ }
+ }
+ return res;
+}
+
void Genericwrapper::parseList(QList<RecMail> &target,mailsession*session,const QString&mailbox,bool mbox_as_to)
{
int r;
mailmessage_list * env_list = 0;
r = mailsession_get_messages_list(session,&env_list);
if (r != MAIL_NO_ERROR) {
@@ -381,13 +401,14 @@ void Genericwrapper::parseList(QList<RecMail> &target,mailsession*session,const
qDebug("Error filling message list");
if (env_list) {
mailmessage_list_free(env_list);
}
return;
}
- mailimf_references * refs;
+ mailimf_references * refs = 0;
+ mailimf_in_reply_to * in_replies = 0;
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) {
@@ -423,19 +444,24 @@ void Genericwrapper::parseList(QList<RecMail> &target,mailsession*session,const
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 ) );
// crashes when accessing pop3 account?
if (single_fields.fld_message_id->mid_value) {
mail->setMsgid(QString(single_fields.fld_message_id->mid_value));
- qDebug("Msqgid == %s",mail->Msgid().latin1());
+ qDebug("Msgid == %s",mail->Msgid().latin1());
}
+
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));
}
+ if (single_fields.fld_in_reply_to && single_fields.fld_in_reply_to->mid_list &&
+ clist_count(single_fields.fld_in_reply_to->mid_list)) {
+ mail->setInreply(parseInreplies(single_fields.fld_in_reply_to));
+ }
target.append(mail);
}
if (env_list) {
mailmessage_list_free(env_list);
}
}