diff --git a/src/mu-store.cc b/src/mu-store.cc index 9a7d7a05..eea84d82 100644 --- a/src/mu-store.cc +++ b/src/mu-store.cc @@ -346,10 +346,57 @@ add_terms_values_number (Xapian::Document& doc, MuMsg *msg, MuMsgFieldId mfid) } else if (mfid == MU_MSG_FIELD_ID_PRIO) { doc.add_term (prefix(mfid) + std::string(1, mu_msg_prio_char((MuMsgPrio)num))); - } //else - // doc.add_term (pfx + numstr); + } } + +/* for string and string-list */ +static void +add_terms_values_str (Xapian::Document& doc, char *val, + MuMsgFieldId mfid) +{ + /* the value is what we'll display; the unchanged original */ + if (mu_msg_field_xapian_value(mfid)) + doc.add_value ((Xapian::valueno)mfid, val); + + /* now, let's create some search terms... */ + if (mu_msg_field_normalize (mfid)) + mu_str_normalize_in_place (val, TRUE); + if (mu_msg_field_xapian_escape (mfid)) + mu_str_ascii_xapian_escape_in_place (val); + + if (mu_msg_field_xapian_index (mfid)) { + Xapian::TermGenerator termgen; + termgen.set_document (doc); + termgen.index_text_without_positions (val, 1, prefix(mfid)); + } + + if (mu_msg_field_xapian_term(mfid)) + doc.add_term (prefix(mfid) + + std::string(val, 0, MU_STORE_MAX_TERM_LENGTH)); +} + + +static void +add_terms_values_string_list (Xapian::Document& doc, MuMsg *msg, + MuMsgFieldId mfid) +{ + const GSList *lst; + gchar *str; + + lst = mu_msg_get_field_string_list (msg, mfid); + if (!lst) + return; /* nothing to do */ + + str = mu_str_from_list (lst, ','); + if (!str) + return; /* nothing to do */ + + add_terms_values_str (doc, str, mfid); +} + + + static void add_terms_values_string (Xapian::Document& doc, MuMsg *msg, MuMsgFieldId mfid) @@ -365,26 +412,8 @@ add_terms_values_string (Xapian::Document& doc, MuMsg *msg, len = strlen (orig); val = (char*)(G_LIKELY(len < 1024)?g_alloca(len+1):g_malloc(len+1)); strcpy (val, orig); - - /* the value is what we'll display; the unchanged original */ - if (mu_msg_field_xapian_value(mfid)) - doc.add_value ((Xapian::valueno)mfid, val); - /* now, let's create some search terms... */ - if (mu_msg_field_normalize (mfid)) - mu_str_normalize_in_place (val, TRUE); - if (mu_msg_field_xapian_escape (mfid)) - mu_str_ascii_xapian_escape_in_place (val); - - if (mu_msg_field_xapian_index (mfid)) { - Xapian::TermGenerator termgen; - termgen.set_document (doc); - termgen.index_text_without_positions (val, 1, prefix(mfid)); - } - - if (mu_msg_field_xapian_term(mfid)) - doc.add_term (prefix(mfid) + - std::string(val, 0, MU_STORE_MAX_TERM_LENGTH)); + add_terms_values_str (doc, val, mfid); if (!(G_LIKELY(len < 1024))) g_free (val); @@ -483,10 +512,14 @@ add_terms_values (MuMsgFieldId mfid, MsgDoc* msgdoc) if (mu_msg_field_is_numeric (mfid)) add_terms_values_number (*msgdoc->_doc, msgdoc->_msg, mfid); - else if (mu_msg_field_type (mfid) == MU_MSG_FIELD_TYPE_STRING) + else if (mu_msg_field_is_string (mfid)) add_terms_values_string (*msgdoc->_doc, msgdoc->_msg, mfid); + else if (mu_msg_field_is_string_list(mfid)) + add_terms_values_string_list (*msgdoc->_doc, + msgdoc->_msg, + mfid); else g_return_if_reached (); }