* updates for mu-msg-part changes

This commit is contained in:
djcb
2012-07-24 22:12:49 +03:00
parent c7eaaf9475
commit a3b4edf56a
5 changed files with 63 additions and 32 deletions

View File

@ -281,11 +281,52 @@ get_part_filename (MuMsgPart *part)
return name; return name;
} }
static gchar *
get_part_type_string (MuMsgPartType ptype)
{
GString *gstr;
unsigned u;
MuMsgPartType ptypes[] = {
MU_MSG_PART_TYPE_BODY,
MU_MSG_PART_TYPE_LEAF,
MU_MSG_PART_TYPE_MESSAGE,
MU_MSG_PART_TYPE_INLINE,
MU_MSG_PART_TYPE_SIGNED,
MU_MSG_PART_TYPE_ENCRYPTED
};
gstr = g_string_sized_new (100); /* more than enough */
gstr = g_string_append_c (gstr, '(');
for (u = 0; u!= G_N_ELEMENTS(ptypes); ++u) {
const char* name;
switch (ptype & ptypes[u]) {
case MU_MSG_PART_TYPE_NONE : continue;
case MU_MSG_PART_TYPE_BODY :name = "body"; break;
case MU_MSG_PART_TYPE_LEAF :name = "leaf"; break;
case MU_MSG_PART_TYPE_MESSAGE :name = "message"; break;
case MU_MSG_PART_TYPE_INLINE :name = "inline"; break;
case MU_MSG_PART_TYPE_SIGNED :name = "signed"; break;
case MU_MSG_PART_TYPE_ENCRYPTED :name = "encrypted"; break;
default:g_return_val_if_reached (NULL);
return NULL;
}
if (gstr->len > 1)
gstr = g_string_append_c (gstr, ' ');
gstr = g_string_append (gstr, name);
}
gstr = g_string_append_c (gstr, ')');
return g_string_free (gstr, FALSE);
}
static void static void
each_part (MuMsg *msg, MuMsgPart *part, PartInfo *pinfo) each_part (MuMsg *msg, MuMsgPart *part, PartInfo *pinfo)
{ {
char *name, *tmp; char *name, *tmp, *parttype;
char *tmpfile; char *tmpfile;
name = get_part_filename (part); name = get_part_filename (part);
@ -299,18 +340,23 @@ each_part (MuMsg *msg, MuMsgPart *part, PartInfo *pinfo)
} }
} }
parttype = get_part_type_string (part->part_type);
tmp = g_strdup_printf tmp = g_strdup_printf
("%s(:index %d :name %s :mime-type \"%s/%s\"%s%s " ("%s(:index %d :name %s :mime-type \"%s/%s\"%s%s "
":type %s "
":attachment %s :size %i %s)", ":attachment %s :size %i %s)",
elvis (pinfo->parts, ""), part->index, name, elvis (pinfo->parts, ""), part->index, name,
elvis (part->type, "application"), elvis (part->type, "application"),
elvis (part->subtype, "octet-stream"), elvis (part->subtype, "octet-stream"),
tmpfile ? " :temp" : "", tmpfile ? tmpfile : "", tmpfile ? " :temp" : "", tmpfile ? tmpfile : "",
parttype,
mu_msg_part_looks_like_attachment (part, TRUE) ? "t" : "nil", mu_msg_part_looks_like_attachment (part, TRUE) ? "t" : "nil",
(int)part->size, (int)part->size,
sig_verdict (part->sig_infos)); sig_verdict (part->sig_infos));
g_free (pinfo->parts); g_free (pinfo->parts);
pinfo->parts = tmp; pinfo->parts = tmp;
} }

View File

@ -382,33 +382,15 @@ struct PartData {
GStringChunk *_strchunk; GStringChunk *_strchunk;
}; };
static gboolean
is_textual (MuMsgPart *part)
{
/* all text parts except text/html */
if ((strcasecmp (part->type, "text") == 0) &&
(strcasecmp (part->subtype, "html") != 0))
return TRUE;
/* message/rfc822 */
if ((strcasecmp (part->type, "message") == 0) &&
(strcasecmp (part->subtype, "rfc822") == 0))
return TRUE;
return FALSE;
}
static gboolean static gboolean
index_text_part (MuMsgPart *part, PartData *pdata) maybe_index_text_part (MuMsgPart *part, PartData *pdata)
{ {
gboolean err; gboolean err;
char *txt, *norm; char *txt, *norm;
Xapian::TermGenerator termgen; Xapian::TermGenerator termgen;
if (!is_textual (part))
return FALSE;
txt = mu_msg_part_get_text (part, &err); txt = mu_msg_part_get_text (part, &err);
if (!txt || err) if (!txt || err)
return FALSE; return FALSE;
@ -461,8 +443,8 @@ each_part (MuMsg *msg, MuMsgPart *part, PartData *pdata)
/* now, for non-body parts with some MIME-types, index the /* now, for non-body parts with some MIME-types, index the
* content as well */ * content as well */
if (!part->is_body) if (mu_msg_part_looks_like_attachment (part, FALSE))
index_text_part (part, pdata); maybe_index_text_part (part, pdata);
} }
@ -473,7 +455,7 @@ add_terms_values_attach (Xapian::Document& doc, MuMsg *msg,
PartData pdata (doc, mfid, strchunk); PartData pdata (doc, mfid, strchunk);
mu_msg_part_foreach (msg, mu_msg_part_foreach (msg,
(MuMsgPartForeachFunc)each_part, &pdata, (MuMsgPartForeachFunc)each_part, &pdata,
MU_MSG_OPTION_RECURSE_RFC822); MU_MSG_OPTION_NONE);
} }
@ -547,7 +529,8 @@ add_terms_values (MuMsgFieldId mfid, MsgDoc* msgdoc)
add_terms_values_date (*msgdoc->_doc, msgdoc->_msg, mfid); add_terms_values_date (*msgdoc->_doc, msgdoc->_msg, mfid);
break; break;
case MU_MSG_FIELD_ID_BODY_TEXT: case MU_MSG_FIELD_ID_BODY_TEXT:
add_terms_values_body (*msgdoc->_doc, msgdoc->_msg, mfid, msgdoc->_strchunk); add_terms_values_body (*msgdoc->_doc, msgdoc->_msg, mfid,
msgdoc->_strchunk);
break; break;
/* note: add_terms_values_attach handles _FILE, _MIME and /* note: add_terms_values_attach handles _FILE, _MIME and
@ -643,7 +626,8 @@ each_contact_check_if_personal (MuMsgContact *contact, MsgDoc *msgdoc)
for (cur = msgdoc->_my_addresses; cur; cur = g_slist_next (cur)) { for (cur = msgdoc->_my_addresses; cur; cur = g_slist_next (cur)) {
//g_print ("%s <=> %s\n", contact->address, (const char*)cur->data); //g_print ("%s <=> %s\n", contact->address, (const char*)cur->data);
if (g_ascii_strcasecmp (contact->address, (const char*)cur->data) == 0) if (g_ascii_strcasecmp (contact->address,
(const char*)cur->data) == 0)
msgdoc->_personal = TRUE; msgdoc->_personal = TRUE;
} }
} }
@ -666,8 +650,10 @@ new_doc_from_message (MuStore *store, MuMsg *msg)
* mailing list message. Callback will update docinfo->_personal */ * mailing list message. Callback will update docinfo->_personal */
if (store->my_addresses()) { if (store->my_addresses()) {
docinfo._my_addresses = store->my_addresses(); docinfo._my_addresses = store->my_addresses();
mu_msg_contact_foreach (msg, (MuMsgContactForeachFunc)each_contact_check_if_personal, mu_msg_contact_foreach
&docinfo); (msg,
(MuMsgContactForeachFunc)each_contact_check_if_personal,
&docinfo);
} }
/* also store the contact-info as separate terms, and add it /* also store the contact-info as separate terms, and add it

View File

@ -417,7 +417,7 @@ each_part (MuMsg *msg, MuMsgPart *part, GSList **attlist)
GError *err; GError *err;
/* exclude things that don't look like proper attachments */ /* exclude things that don't look like proper attachments */
if (!mu_msg_part_looks_like_attachment(part, TRUE)) if (!mu_msg_part_looks_like_attachment(part, FALSE))
return; return;
err = NULL; err = NULL;

View File

@ -90,7 +90,7 @@ search (const char* query, unsigned expected)
MU_PROGRAM, DBPATH, query); MU_PROGRAM, DBPATH, query);
if (g_test_verbose()) if (g_test_verbose())
g_printerr ("%s\n", cmdline); g_printerr ("\n$ %s\n", cmdline);
g_assert (g_spawn_command_line_sync (cmdline, g_assert (g_spawn_command_line_sync (cmdline,
&output, &erroutput, &output, &erroutput,

View File

@ -1,6 +1,5 @@
/* /*
** Copyright (C) 2011 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl> ** Copyright (C) 2011-2012 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
** **
** This program is free software; you can redistribute it and/or modify it ** This program is free software; you can redistribute it and/or modify it
** under the terms of the GNU General Public License as published by the ** under the terms of the GNU General Public License as published by the
@ -238,7 +237,7 @@ each_part (MuMsg *msg, MuMsgPart *part, CBData *cbdata)
GdkPixbuf *pixbuf; GdkPixbuf *pixbuf;
char ctype[128]; char ctype[128];
if (!mu_msg_part_looks_like_attachment (part, FALSE)) if (!mu_msg_part_looks_like_attachment(part, FALSE))
return; return;
if (!part->type || !part->subtype) if (!part->type || !part->subtype)