* updates for mu-msg-part changes
This commit is contained in:
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user