static gboolean mu_guile_init_instance (const char *muhome) { MuStore *store; MuQuery *query; GError *err; setlocale (LC_ALL, ""); if (!mu_runtime_init (muhome, "guile")) return FALSE; store = mu_store_new_read_only (mu_runtime_path(MU_RUNTIME_PATH_XAPIANDB), &err); if (!store) { mu_guile_g_error (__FUNCTION__, err); g_clear_error (&err); return FALSE; } query = mu_query_new (store, &err); mu_store_unref (store); if (!query) { mu_guile_g_error (__FUNCTION__, err); g_clear_error (&err); return FALSE; } _singleton = g_new0 (MuGuile, 1); _singleton->query = query; return TRUE; }
static MuMsgIter * run_query (const char *xpath, const char *query, MugMsgListView * self) { GError *err; MuQuery *xapian; MuMsgIter *iter; MuStore *store; MuQueryFlags qflags; err = NULL; if (! (store = mu_store_new_read_only (xpath, &err)) || ! (xapian = mu_query_new (store, &err))) { if (store) mu_store_unref (store); g_warning ("Error: %s", err->message); g_signal_emit (G_OBJECT (self), signals[MUG_ERROR_OCCURED], 0, mu_result_to_mug_error (err->code)); g_error_free (err); return NULL; } mu_store_unref (store); qflags = MU_QUERY_FLAG_DESCENDING | MU_QUERY_FLAG_SKIP_UNREADABLE | MU_QUERY_FLAG_SKIP_DUPS | MU_QUERY_FLAG_THREADS; iter = mu_query_run (xapian, query, MU_MSG_FIELD_ID_DATE, -1, qflags, &err); mu_query_destroy (xapian); if (!iter) { g_warning ("Error: %s", err->message); g_signal_emit (G_OBJECT (self), signals[MUG_ERROR_OCCURED], 0, mu_result_to_mug_error (err->code)); g_error_free (err); return NULL; } return iter; }
MuError with_store (store_func func, MuConfig *opts, gboolean read_only, GError **err) { MuStore *store; if (read_only) store = mu_store_new_read_only (mu_runtime_path(MU_RUNTIME_PATH_XAPIANDB), err); else store = mu_store_new_writable (mu_runtime_path(MU_RUNTIME_PATH_XAPIANDB), mu_runtime_path(MU_RUNTIME_PATH_CONTACTS), opts->rebuild, err); if (!store) return MU_G_ERROR_CODE(err); else { MuError merr; merr = func (store, opts, err); mu_store_unref (store); return merr; } }