* mu-index.c: refactor to make functions respect 33-lines limit

This commit is contained in:
Dirk-Jan C. Binnema 2010-11-27 14:54:19 +02:00
parent b200b63a55
commit c5c51f3798
1 changed files with 33 additions and 29 deletions

View File

@ -94,52 +94,56 @@ struct _MuIndexCallbackData {
typedef struct _MuIndexCallbackData MuIndexCallbackData; typedef struct _MuIndexCallbackData MuIndexCallbackData;
/* checks to determine if we need to (re)index this message
* note: just check timestamps is not good enough because
* message may be moved from other dirs (e.g. from 'new' to
* 'cur') and the time stamps won't change.
* */
static inline gboolean
needs_index (MuIndexCallbackData *data, const char *fullpath,
time_t filestamp)
{
/* unconditionally reindex */
if (data->_reindex)
return TRUE;
/* it's not in the database yet */
if (!mu_store_contains_message (data->_xapian, fullpath))
return TRUE;
/* it's there, but it's not up to date */
if ((unsigned)filestamp >= (unsigned)data->_dirstamp)
return TRUE;
return FALSE; /* index not needed */
}
static MuResult static MuResult
insert_or_update_maybe (const char* fullpath, const char* mdir, insert_or_update_maybe (const char* fullpath, const char* mdir,
time_t filestamp, time_t filestamp, MuIndexCallbackData *data,
MuIndexCallbackData *data, gboolean *updated) gboolean *updated)
{ {
MuMsg *msg; MuMsg *msg;
GError *err; GError *err;
*updated = FALSE; *updated = FALSE;
if (!needs_index (data, fullpath, filestamp))
/* checks to determine if we need to (re)index this message return MU_OK; /* nothing to do for this one */
* note: just check timestamps is not good enough because
* message may be moved from other dirs (e.g. from 'new' to
* 'cur') and the time stamps won't change.*/
do {
/* unconditionally reindex */
if (data->_reindex)
break;
/* it's not in the database yet */
if (!mu_store_contains_message (data->_xapian, fullpath)) {
g_debug ("not yet in db: %s", fullpath);
break;
}
/* it's there, but it's not up to date */
if ((unsigned)filestamp >= (unsigned)data->_dirstamp)
break;
return MU_OK; /* nope: no need to insert/update! */
} while (0);
err = NULL; err = NULL;
msg = mu_msg_new (fullpath, mdir, &err); msg = mu_msg_new (fullpath, mdir, &err);
if (!msg) { if ((G_UNLIKELY(!msg))) {
g_warning ("%s: failed to create mu_msg for %s", g_warning ("%s: failed to create mu_msg for %s",
__FUNCTION__, fullpath); __FUNCTION__, fullpath);
return MU_ERROR; return MU_ERROR;
} }
/* we got a valid id; scan the message contents as well */ /* we got a valid id; scan the message contents as well */
if (mu_store_store (data->_xapian, msg) != MU_OK) { if (G_UNLIKELY((mu_store_store (data->_xapian, msg) != MU_OK))) {
g_warning ("%s: storing content %s failed", __FUNCTION__, g_warning ("%s: storing content %s failed", __FUNCTION__,
fullpath); fullpath);
/* ignore...*/ return MU_ERROR;
} }
mu_msg_destroy (msg); mu_msg_destroy (msg);