diff --git a/src/mu-query.cc b/src/mu-query.cc index 25dc42f5..78c12c8e 100644 --- a/src/mu-query.cc +++ b/src/mu-query.cc @@ -267,25 +267,6 @@ add_prefix (MuMsgFieldId mfid, Xapian::QueryParser* qparser) if (!mu_msg_field_needs_prefix(mfid)) qparser->add_prefix ("", pfx); - - // if (mfid == MU_MSG_FIELD_ID_FLAGS || mfid == MU_MSG_FIELD_ID_PRIO) { - // qparser->add_prefix - // (mu_msg_field_name(mfid), pfx); - // qparser->add_prefix (shortcut, pfx); - - // } else if (mfid == MU_MSG_FIELD_ID_MAILDIR || - // mfid == MU_MSG_FIELD_ID_MSGID) { - // qparser->add_boolean_prefix - // (mu_msg_field_name(mfid), pfx); - // qparser->add_boolean_prefix (shortcut, pfx); - - // } else { - // qparser->add_boolean_prefix - // (mu_msg_field_name(mfid), pfx); - // qparser->add_boolean_prefix (shortcut, pfx); - - // qparser->add_prefix ("", pfx); - // } } MU_XAPIAN_CATCH_BLOCK; } diff --git a/src/mu-store.cc b/src/mu-store.cc index 82c415a3..b392f8bf 100644 --- a/src/mu-store.cc +++ b/src/mu-store.cc @@ -27,6 +27,7 @@ #include #include "mu-msg.h" +#include "mu-msg-part.h" #include "mu-store.h" #include "mu-util.h" #include "mu-str.h" @@ -388,6 +389,41 @@ add_terms_values_string (Xapian::Document& doc, MuMsg *msg, g_free (val); } +struct PartData { + PartData (Xapian::Document& doc, MuMsgFieldId mfid): + _doc (doc), _mfid(mfid) {} + Xapian::Document _doc; + MuMsgFieldId _mfid; +}; + +static void +each_part (MuMsg *msg, MuMsgPart *part, PartData *pdata) +{ + if (mu_msg_part_looks_like_attachment (part, TRUE) && + (part->file_name)) { + + char val[MU_STORE_MAX_TERM_LENGTH + 1]; + strncpy (val, part->file_name, sizeof(val)); + + /* now, let's create a terms... */ + mu_str_normalize_in_place (val, TRUE); + mu_str_ascii_xapian_escape_in_place (val); + + pdata->_doc.add_term (prefix(pdata->_mfid) + + std::string(val, 0, MU_STORE_MAX_TERM_LENGTH)); + } +} + + +static void +add_terms_values_attach (Xapian::Document& doc, MuMsg *msg, + MuMsgFieldId mfid) +{ + PartData pdata (doc, mfid); + mu_msg_part_foreach (msg, (MuMsgPartForeachFunc)each_part, &pdata); +} + + static void add_terms_values_body (Xapian::Document& doc, MuMsg *msg, MuMsgFieldId mfid) @@ -439,6 +475,9 @@ add_terms_values (MuMsgFieldId mfid, MsgDoc* msgdoc) case MU_MSG_FIELD_ID_BODY_TEXT: add_terms_values_body (*msgdoc->_doc, msgdoc->_msg, mfid); break; + case MU_MSG_FIELD_ID_ATTACH: + add_terms_values_attach (*msgdoc->_doc, msgdoc->_msg, mfid); + break; default: if (mu_msg_field_is_numeric (mfid)) add_terms_values_number (*msgdoc->_doc, msgdoc->_msg,