* 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;
}
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
each_part (MuMsg *msg, MuMsgPart *part, PartInfo *pinfo)
{
char *name, *tmp;
char *name, *tmp, *parttype;
char *tmpfile;
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
("%s(:index %d :name %s :mime-type \"%s/%s\"%s%s "
":type %s "
":attachment %s :size %i %s)",
elvis (pinfo->parts, ""), part->index, name,
elvis (part->type, "application"),
elvis (part->subtype, "octet-stream"),
tmpfile ? " :temp" : "", tmpfile ? tmpfile : "",
parttype,
mu_msg_part_looks_like_attachment (part, TRUE) ? "t" : "nil",
(int)part->size,
sig_verdict (part->sig_infos));
g_free (pinfo->parts);
pinfo->parts = tmp;
}

View File

@ -382,33 +382,15 @@ struct PartData {
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
index_text_part (MuMsgPart *part, PartData *pdata)
maybe_index_text_part (MuMsgPart *part, PartData *pdata)
{
gboolean err;
char *txt, *norm;
Xapian::TermGenerator termgen;
if (!is_textual (part))
return FALSE;
txt = mu_msg_part_get_text (part, &err);
if (!txt || err)
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
* content as well */
if (!part->is_body)
index_text_part (part, pdata);
if (mu_msg_part_looks_like_attachment (part, FALSE))
maybe_index_text_part (part, pdata);
}
@ -473,7 +455,7 @@ add_terms_values_attach (Xapian::Document& doc, MuMsg *msg,
PartData pdata (doc, mfid, strchunk);
mu_msg_part_foreach (msg,
(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);
break;
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;
/* 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)) {
//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;
}
}
@ -666,7 +650,9 @@ new_doc_from_message (MuStore *store, MuMsg *msg)
* mailing list message. Callback will update docinfo->_personal */
if (store->my_addresses()) {
docinfo._my_addresses = store->my_addresses();
mu_msg_contact_foreach (msg, (MuMsgContactForeachFunc)each_contact_check_if_personal,
mu_msg_contact_foreach
(msg,
(MuMsgContactForeachFunc)each_contact_check_if_personal,
&docinfo);
}

View File

@ -417,7 +417,7 @@ each_part (MuMsg *msg, MuMsgPart *part, GSList **attlist)
GError *err;
/* 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;
err = NULL;

View File

@ -90,7 +90,7 @@ search (const char* query, unsigned expected)
MU_PROGRAM, DBPATH, query);
if (g_test_verbose())
g_printerr ("%s\n", cmdline);
g_printerr ("\n$ %s\n", cmdline);
g_assert (g_spawn_command_line_sync (cmdline,
&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
** under the terms of the GNU General Public License as published by the