From a3b4edf56a85e4668c00891f25f60fd2170a553f Mon Sep 17 00:00:00 2001 From: djcb Date: Tue, 24 Jul 2012 22:12:49 +0300 Subject: [PATCH] * updates for mu-msg-part changes --- lib/mu-msg-sexp.c | 48 +++++++++++++++++++++++++++++++++++- lib/mu-store-write.cc | 38 +++++++++------------------- mu/mu-cmd-server.c | 2 +- mu/tests/test-mu-cmd.c | 2 +- widgets/mu-msg-attach-view.c | 5 ++-- 5 files changed, 63 insertions(+), 32 deletions(-) diff --git a/lib/mu-msg-sexp.c b/lib/mu-msg-sexp.c index 855e3b97..bf4440af 100644 --- a/lib/mu-msg-sexp.c +++ b/lib/mu-msg-sexp.c @@ -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; } diff --git a/lib/mu-store-write.cc b/lib/mu-store-write.cc index 084361b4..81c8ffec 100644 --- a/lib/mu-store-write.cc +++ b/lib/mu-store-write.cc @@ -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 diff --git a/mu/mu-cmd-server.c b/mu/mu-cmd-server.c index 8cfbf747..c1b73edf 100644 --- a/mu/mu-cmd-server.c +++ b/mu/mu-cmd-server.c @@ -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; diff --git a/mu/tests/test-mu-cmd.c b/mu/tests/test-mu-cmd.c index ac465d73..8ae1be0c 100644 --- a/mu/tests/test-mu-cmd.c +++ b/mu/tests/test-mu-cmd.c @@ -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, diff --git a/widgets/mu-msg-attach-view.c b/widgets/mu-msg-attach-view.c index 4dd7956c..d46d5749 100644 --- a/widgets/mu-msg-attach-view.c +++ b/widgets/mu-msg-attach-view.c @@ -1,6 +1,5 @@ - /* -** Copyright (C) 2011 Dirk-Jan C. Binnema +** Copyright (C) 2011-2012 Dirk-Jan C. Binnema ** ** 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 @@ -238,7 +237,7 @@ each_part (MuMsg *msg, MuMsgPart *part, CBData *cbdata) GdkPixbuf *pixbuf; char ctype[128]; - if (!mu_msg_part_looks_like_attachment (part, FALSE)) + if (!mu_msg_part_looks_like_attachment(part, FALSE)) return; if (!part->type || !part->subtype)