* updates for mu-msg-part changes
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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,8 +650,10 @@ 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,
|
||||
&docinfo);
|
||||
mu_msg_contact_foreach
|
||||
(msg,
|
||||
(MuMsgContactForeachFunc)each_contact_check_if_personal,
|
||||
&docinfo);
|
||||
}
|
||||
|
||||
/* also store the contact-info as separate terms, and add it
|
||||
|
||||
Reference in New Issue
Block a user