static gchar* resolve_bookmark (MuConfig *opts, GError **err) { MuBookmarks *bm; char* val; const gchar *bmfile; bmfile = mu_runtime_path (MU_RUNTIME_PATH_BOOKMARKS); bm = mu_bookmarks_new (bmfile); if (!bm) { g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_FILE_CANNOT_OPEN, "failed to open bookmarks file '%s'", bmfile); return FALSE; } val = (gchar*)mu_bookmarks_lookup (bm, opts->bookmark); if (!val) g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_NO_MATCHES, "bookmark '%s' not found", opts->bookmark); else val = g_strdup (val); mu_bookmarks_destroy (bm); return val; }
static MuError cmd_contacts (ServerContext *ctx, GSList *args, GError **err) { MuContacts *contacts; char *sexp; gboolean personal; time_t after; const char *str; personal = get_bool_from_args (args, "personal", TRUE, NULL); str = get_string_from_args (args, "after", TRUE, NULL); after = str ? (time_t)atoi(str) : 0; contacts = mu_contacts_new (mu_runtime_path (MU_RUNTIME_PATH_CONTACTS)); if (!contacts) { print_error (MU_ERROR_INTERNAL, "failed to open contacts cache"); return MU_OK; } /* dump the contacts cache as a giant sexp */ sexp = contacts_to_sexp (contacts, personal, after); print_expr ("%s\n", sexp); g_free (sexp); mu_contacts_destroy (contacts); return MU_OK; }
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 MuError run_cmd_cfind (const char* pattern, MuConfigFormat format, gboolean color, GError **err) { gboolean rv; MuContacts *contacts; size_t num; ECData ecdata; ecdata.format = format; ecdata.color = color; contacts = mu_contacts_new (mu_runtime_path(MU_RUNTIME_PATH_CONTACTS)); if (!contacts) { g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_CONTACTS_CANNOT_RETRIEVE, "could not retrieve contacts"); return MU_ERROR_CONTACTS_CANNOT_RETRIEVE; } print_header (format); rv = mu_contacts_foreach (contacts, (MuContactsForeachFunc)each_contact, &ecdata, pattern, &num); mu_contacts_destroy (contacts); if (num == 0) { g_warning ("no matching contacts found"); return MU_ERROR_NO_MATCHES; } return rv ? MU_OK : MU_ERROR_CONTACTS; }
static GtkWidget * mug_shortcuts_bar (MugData * data) { data->shortcuts = mug_shortcuts_new (mu_runtime_path(MU_RUNTIME_PATH_BOOKMARKS)); g_signal_connect (G_OBJECT (data->shortcuts), "clicked", G_CALLBACK (on_shortcut_clicked), data); return data->shortcuts; }
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; } }
static GtkWidget * mug_query_area (MugData * mugdata) { GtkWidget *queryarea, *paned, *scrolled; #ifdef HAVE_GTK3 queryarea = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); paned = gtk_paned_new (GTK_ORIENTATION_VERTICAL); #else queryarea = gtk_vbox_new (FALSE, 2); paned = gtk_vpaned_new (); #endif /*!HAVE_GTK3*/ mugdata->mlist = mug_msg_list_view_new (mu_runtime_path(MU_RUNTIME_PATH_XAPIANDB)); scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (scrolled), mugdata->mlist); gtk_paned_add1 (GTK_PANED (paned), scrolled); mugdata->msgview = mug_msg_view_new (); mug_msg_view_set_note (MUG_MSG_VIEW(mugdata->msgview), "<h1>Welcome to <i>mug</i>!</h1><hr>" "<tt>mug</tt> is an experimental UI for <tt>mu</tt>, which will " "slowly evolve into something useful.<br><br>Enjoy the ride."); g_signal_connect (G_OBJECT (mugdata->mlist), "msg-selected", G_CALLBACK (on_msg_selected), mugdata); g_signal_connect (G_OBJECT (mugdata->mlist), "error-occured", G_CALLBACK (on_list_view_error), mugdata); gtk_paned_add2 (GTK_PANED (paned), mugdata->msgview); mugdata->querybar = mug_querybar (); g_signal_connect (G_OBJECT (mugdata->querybar), "query-changed", G_CALLBACK (on_query_changed), mugdata); gtk_box_pack_start (GTK_BOX (queryarea), mugdata->querybar, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (queryarea), paned, TRUE, TRUE, 2); gtk_widget_show_all (queryarea); return queryarea; }
static GtkWidget * mug_query_area (MugData * mugdata) { GtkWidget *queryarea; GtkWidget *paned; GtkWidget *scrolled; #ifdef HAVE_GTK3 queryarea = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); paned = gtk_paned_new (GTK_ORIENTATION_VERTICAL); #else queryarea = gtk_vbox_new (FALSE, 2); paned = gtk_vpaned_new (); #endif /*!HAVE_GTK3 */ mugdata->mlist = mug_msg_list_view_new (mu_runtime_path(MU_RUNTIME_PATH_XAPIANDB)); scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (scrolled), mugdata->mlist); gtk_paned_add1 (GTK_PANED (paned), scrolled); mugdata->msgview = mug_msg_view_new (); mug_msg_view_set_msg (MUG_MSG_VIEW (mugdata->msgview), NULL); g_signal_connect (G_OBJECT (mugdata->mlist), "msg-selected", G_CALLBACK (on_msg_selected), mugdata); g_signal_connect (G_OBJECT (mugdata->mlist), "error-occured", G_CALLBACK (on_list_view_error), mugdata); gtk_paned_add2 (GTK_PANED (paned), mugdata->msgview); mugdata->querybar = mug_querybar (); g_signal_connect (G_OBJECT (mugdata->querybar), "query-changed", G_CALLBACK (on_query_changed), mugdata); gtk_box_pack_start (GTK_BOX (queryarea), mugdata->querybar, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (queryarea), paned, TRUE, TRUE, 2); gtk_widget_show_all (queryarea); return queryarea; }
static gboolean query_params_valid (MuConfig *opts, GError **err) { const gchar *xpath; if (!opts->params[1]) { mu_util_g_set_error (err, MU_ERROR_IN_PARAMETERS, "missing query"); return FALSE; } xpath = mu_runtime_path (MU_RUNTIME_PATH_XAPIANDB); if (mu_util_check_dir (xpath, TRUE, FALSE)) return TRUE; mu_util_g_set_error (err, MU_ERROR_FILE_CANNOT_READ, "'%s' is not a readable Xapian directory", xpath); return FALSE; }