* mu-query.c,mu-store.cc: add support for storing/search message file attachments
This commit is contained in:
@ -267,25 +267,6 @@ add_prefix (MuMsgFieldId mfid, Xapian::QueryParser* qparser)
|
|||||||
if (!mu_msg_field_needs_prefix(mfid))
|
if (!mu_msg_field_needs_prefix(mfid))
|
||||||
qparser->add_prefix ("", pfx);
|
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;
|
} MU_XAPIAN_CATCH_BLOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -27,6 +27,7 @@
|
|||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
#include "mu-msg.h"
|
#include "mu-msg.h"
|
||||||
|
#include "mu-msg-part.h"
|
||||||
#include "mu-store.h"
|
#include "mu-store.h"
|
||||||
#include "mu-util.h"
|
#include "mu-util.h"
|
||||||
#include "mu-str.h"
|
#include "mu-str.h"
|
||||||
@ -388,6 +389,41 @@ add_terms_values_string (Xapian::Document& doc, MuMsg *msg,
|
|||||||
g_free (val);
|
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
|
static void
|
||||||
add_terms_values_body (Xapian::Document& doc, MuMsg *msg,
|
add_terms_values_body (Xapian::Document& doc, MuMsg *msg,
|
||||||
MuMsgFieldId mfid)
|
MuMsgFieldId mfid)
|
||||||
@ -439,6 +475,9 @@ add_terms_values (MuMsgFieldId mfid, MsgDoc* msgdoc)
|
|||||||
case MU_MSG_FIELD_ID_BODY_TEXT:
|
case MU_MSG_FIELD_ID_BODY_TEXT:
|
||||||
add_terms_values_body (*msgdoc->_doc, msgdoc->_msg, mfid);
|
add_terms_values_body (*msgdoc->_doc, msgdoc->_msg, mfid);
|
||||||
break;
|
break;
|
||||||
|
case MU_MSG_FIELD_ID_ATTACH:
|
||||||
|
add_terms_values_attach (*msgdoc->_doc, msgdoc->_msg, mfid);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if (mu_msg_field_is_numeric (mfid))
|
if (mu_msg_field_is_numeric (mfid))
|
||||||
add_terms_values_number (*msgdoc->_doc, msgdoc->_msg,
|
add_terms_values_number (*msgdoc->_doc, msgdoc->_msg,
|
||||||
|
|||||||
Reference in New Issue
Block a user