* mu-msg-field: add support for maildir field; more clear separate

index/term/value for xapian
This commit is contained in:
Dirk-Jan C. Binnema
2010-02-08 21:20:11 +02:00
parent b77004774c
commit 8f825b4816
2 changed files with 65 additions and 40 deletions

View File

@ -21,9 +21,10 @@
#include "mu-msg-fields.h" #include "mu-msg-fields.h"
enum _FieldFlags { enum _FieldFlags {
FLAG_XAPIAN = 1 << 1, /* field stored as a string in xapian db */ FLAG_GMIME = 1 << 1, /* field retrieved through gmime */
FLAG_GMIME = 1 << 2, /* field retrieved by through gmime */ FLAG_XAPIAN_INDEX = 1 << 2, /* field is indexed in xapian */
FLAG_XAPIAN_INDEX = 1 << 3 /* field is indexed in xapian */ FLAG_XAPIAN_TERM = 1 << 3, /* field stored as term in xapian */
FLAG_XAPIAN_VALUE = 1 << 4 /* field stored as value in xapian */
}; };
typedef enum _FieldFlags FieldFlags; typedef enum _FieldFlags FieldFlags;
@ -41,7 +42,6 @@ struct _MuMsgField {
static const MuMsgField FIELD_DATA[] = { static const MuMsgField FIELD_DATA[] = {
{ {
MU_MSG_FIELD_ID_BODY_TEXT, MU_MSG_FIELD_ID_BODY_TEXT,
MU_MSG_FIELD_TYPE_STRING, MU_MSG_FIELD_TYPE_STRING,
@ -60,42 +60,49 @@ static const MuMsgField FIELD_DATA[] = {
MU_MSG_FIELD_ID_CC, MU_MSG_FIELD_ID_CC,
MU_MSG_FIELD_TYPE_STRING, MU_MSG_FIELD_TYPE_STRING,
"cc", "c", "C", "cc", "c", "C",
FLAG_XAPIAN | FLAG_GMIME | FLAG_XAPIAN_INDEX FLAG_GMIME | FLAG_XAPIAN_INDEX | FLAG_XAPIAN_VALUE
}, },
{ {
MU_MSG_FIELD_ID_DATE, MU_MSG_FIELD_ID_DATE,
MU_MSG_FIELD_TYPE_TIME_T, MU_MSG_FIELD_TYPE_TIME_T,
"date", "d", "D", "date", "d", "D",
FLAG_XAPIAN | FLAG_GMIME FLAG_GMIME | FLAG_XAPIAN_VALUE
}, },
{ {
MU_MSG_FIELD_ID_FLAGS, MU_MSG_FIELD_ID_FLAGS,
MU_MSG_FIELD_TYPE_INT, MU_MSG_FIELD_TYPE_INT,
"flags", "F", "G", "flags", "F", "G",
FLAG_XAPIAN | FLAG_GMIME FLAG_GMIME | FLAG_XAPIAN_VALUE
}, },
{ {
MU_MSG_FIELD_ID_FROM, MU_MSG_FIELD_ID_FROM,
MU_MSG_FIELD_TYPE_STRING, MU_MSG_FIELD_TYPE_STRING,
"from", "f", "F", "from", "f", "F",
FLAG_XAPIAN | FLAG_GMIME | FLAG_XAPIAN_INDEX FLAG_GMIME | FLAG_XAPIAN_INDEX | FLAG_XAPIAN_VALUE
}, },
{ {
MU_MSG_FIELD_ID_PATH, MU_MSG_FIELD_ID_PATH,
MU_MSG_FIELD_TYPE_STRING, MU_MSG_FIELD_TYPE_STRING,
"path", "p", "P", "path", "p", "P",
FLAG_XAPIAN | FLAG_GMIME | FLAG_XAPIAN_INDEX FLAG_GMIME | FLAG_XAPIAN_VALUE
},
{
MU_MSG_FIELD_ID_MAILDIR,
MU_MSG_FIELD_TYPE_STRING,
"maildir", "m", "M",
FLAG_GMIME | FLAG_XAPIAN_TERM | FLAG_XAPIAN_VALUE
}, },
{ {
MU_MSG_FIELD_ID_PRIORITY, MU_MSG_FIELD_ID_PRIORITY,
MU_MSG_FIELD_TYPE_INT, MU_MSG_FIELD_TYPE_INT,
"prio", "P", "I", "prio", "P", "I",
FLAG_GMIME | FLAG_XAPIAN FLAG_GMIME | FLAG_XAPIAN_VALUE
}, },
{ {
@ -105,25 +112,25 @@ static const MuMsgField FIELD_DATA[] = {
FLAG_GMIME FLAG_GMIME
}, },
{ {
MU_MSG_FIELD_ID_SUBJECT, MU_MSG_FIELD_ID_SUBJECT,
MU_MSG_FIELD_TYPE_STRING, MU_MSG_FIELD_TYPE_STRING,
"subject", "s", "S", "subject", "s", "S",
FLAG_XAPIAN | FLAG_GMIME | FLAG_XAPIAN_INDEX FLAG_GMIME | FLAG_XAPIAN_INDEX | FLAG_XAPIAN_VALUE
}, },
{ {
MU_MSG_FIELD_ID_TO, MU_MSG_FIELD_ID_TO,
MU_MSG_FIELD_TYPE_STRING, MU_MSG_FIELD_TYPE_STRING,
"to", "t", "T", "to", "t", "T",
FLAG_XAPIAN | FLAG_GMIME | FLAG_XAPIAN_INDEX FLAG_GMIME | FLAG_XAPIAN_INDEX | FLAG_XAPIAN_VALUE
}, },
{ {
MU_MSG_FIELD_ID_MSGID, MU_MSG_FIELD_ID_MSGID,
MU_MSG_FIELD_TYPE_STRING, MU_MSG_FIELD_TYPE_STRING,
"msgid", "m", "M", "msgid", "i", "I",
FLAG_GMIME | FLAG_XAPIAN FLAG_GMIME | FLAG_XAPIAN_TERM
}, },
{ {
@ -197,15 +204,7 @@ mu_msg_field_from_id (MuMsgFieldId id)
gboolean gboolean
mu_msg_field_is_xapian_enabled (const MuMsgField *field) mu_msg_field_gmime (const MuMsgField *field)
{
g_return_val_if_fail (field, FALSE);
return field->_flags & (FLAG_XAPIAN|FLAG_XAPIAN_INDEX);
}
gboolean
mu_msg_field_is_gmime_enabled (const MuMsgField *field)
{ {
g_return_val_if_fail (field, FALSE); g_return_val_if_fail (field, FALSE);
return field->_flags & FLAG_GMIME; return field->_flags & FLAG_GMIME;
@ -213,12 +212,28 @@ mu_msg_field_is_gmime_enabled (const MuMsgField *field)
gboolean gboolean
mu_msg_field_is_xapian_indexable (const MuMsgField *field) mu_msg_field_xapian_index (const MuMsgField *field)
{ {
g_return_val_if_fail (field, FALSE); g_return_val_if_fail (field, FALSE);
return field->_flags & FLAG_XAPIAN_INDEX; return field->_flags & FLAG_XAPIAN_INDEX;
} }
gboolean
mu_msg_field_xapian_value (const MuMsgField *field)
{
g_return_val_if_fail (field, FALSE);
return field->_flags & FLAG_XAPIAN_VALUE;
}
gboolean
mu_msg_field_xapian_term (const MuMsgField *field)
{
g_return_val_if_fail (field, FALSE);
return field->_flags & FLAG_XAPIAN_TERM;
}
gboolean gboolean
mu_msg_field_is_numeric (const MuMsgField *field) mu_msg_field_is_numeric (const MuMsgField *field)

View File

@ -33,6 +33,7 @@ enum _MuMsgFieldId {
MU_MSG_FIELD_ID_FLAGS, MU_MSG_FIELD_ID_FLAGS,
MU_MSG_FIELD_ID_FROM, MU_MSG_FIELD_ID_FROM,
MU_MSG_FIELD_ID_PATH, MU_MSG_FIELD_ID_PATH,
MU_MSG_FIELD_ID_MAILDIR,
MU_MSG_FIELD_ID_PRIORITY, MU_MSG_FIELD_ID_PRIORITY,
MU_MSG_FIELD_ID_SIZE, MU_MSG_FIELD_ID_SIZE,
MU_MSG_FIELD_ID_SUBJECT, MU_MSG_FIELD_ID_SUBJECT,
@ -136,15 +137,6 @@ MuMsgFieldType mu_msg_field_type (const MuMsgField *field) G_GNUC_CONST;
*/ */
gboolean mu_msg_field_is_numeric (const MuMsgField *field) G_GNUC_CONST; gboolean mu_msg_field_is_numeric (const MuMsgField *field) G_GNUC_CONST;
/**
\ * is the field Xapian-enabled? That is, should this field be stored
* (as a string) in the Xapian database?
*
* @param field a MuMsgField
*
* @return TRUE if the field is Xapian-enabled, FALSE otherwise
*/
gboolean mu_msg_field_is_xapian_enabled (const MuMsgField *field) G_GNUC_PURE;
/** /**
@ -156,7 +148,25 @@ gboolean mu_msg_field_is_xapian_enabled (const MuMsgField *field) G_GNUC_PURE;
* *
* @return TRUE if the field is Xapian-enabled, FALSE otherwise * @return TRUE if the field is Xapian-enabled, FALSE otherwise
*/ */
gboolean mu_msg_field_is_xapian_indexable (const MuMsgField *field) G_GNUC_PURE; gboolean mu_msg_field_xapian_index (const MuMsgField *field) G_GNUC_PURE;
/**
* should this field be stored as a xapian term?
*
* @param field a MuMsgField
*
* @return TRUE if the field is Xapian-enabled, FALSE otherwise
*/
gboolean mu_msg_field_xapian_term (const MuMsgField *field) G_GNUC_PURE;
/**
* should this field be stored as a xapian value?
*
* @param field a MuMsgField
*
* @return TRUE if the field is Xapian-enabled, FALSE otherwise
*/
gboolean mu_msg_field_xapian_value (const MuMsgField *field) G_GNUC_PURE;
/** /**
@ -167,7 +177,7 @@ gboolean mu_msg_field_is_xapian_indexable (const MuMsgField *field) G_GNUC_PURE;
* *
* @return TRUE if the field is Gmime-enabled, FALSE otherwise * @return TRUE if the field is Gmime-enabled, FALSE otherwise
*/ */
gboolean mu_msg_field_is_gmime_enabled (const MuMsgField *field) G_GNUC_PURE; gboolean mu_msg_field_gmime (const MuMsgField *field) G_GNUC_PURE;
/** /**