[gnome-documents] miner: add a display name property on the miner object
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-documents] miner: add a display name property on the miner object
- Date: Thu, 25 Oct 2012 20:52:00 +0000 (UTC)
commit 753bf47cd72e8b8b739418b0cf11bf828c5143ab
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Thu Oct 25 15:53:36 2012 -0400
miner: add a display name property on the miner object
This will be useful to display in a notification while the miner is running.
src/miner/gd-miner.c | 85 ++++++++++++++++++++++++++++++++++++++++-------
src/miner/gd-miner.h | 2 +
src/miner/miner-main.c | 31 +++++++++++++++--
src/miners.js | 1 +
4 files changed, 102 insertions(+), 17 deletions(-)
---
diff --git a/src/miner/gd-miner.c b/src/miner/gd-miner.c
index 8c17ea9..1d1008d 100644
--- a/src/miner/gd-miner.c
+++ b/src/miner/gd-miner.c
@@ -29,12 +29,16 @@ G_DEFINE_TYPE (GdMiner, gd_miner, G_TYPE_OBJECT)
struct _GdMinerPrivate {
GoaClient *client;
+ GError *client_error;
+
TrackerSparqlConnection *connection;
GCancellable *cancellable;
GSimpleAsyncResult *result;
GList *pending_jobs;
+
+ gchar *display_name;
};
static void
@@ -71,13 +75,66 @@ gd_miner_dispose (GObject *object)
g_clear_object (&self->priv->cancellable);
g_clear_object (&self->priv->result);
+ g_free (self->priv->display_name);
+ g_clear_error (&self->priv->client_error);
+
G_OBJECT_CLASS (gd_miner_parent_class)->dispose (object);
}
static void
+gd_miner_init_goa (GdMiner *self)
+{
+ GoaAccount *account;
+ GoaObject *object;
+ const gchar *provider_type;
+ GList *accounts, *l;
+ GdMinerClass *miner_class = GD_MINER_GET_CLASS (self);
+
+ self->priv->client = goa_client_new_sync (NULL, &self->priv->client_error);
+
+ if (self->priv->client_error != NULL)
+ {
+ g_critical ("Unable to create GoaClient: %s - indexing for %s will not work",
+ self->priv->client_error->message, miner_class->goa_provider_type);
+ return;
+ }
+
+ accounts = goa_client_get_accounts (self->priv->client);
+ for (l = accounts; l != NULL; l = l->next)
+ {
+ object = l->data;
+
+ account = goa_object_peek_account (object);
+ if (account == NULL)
+ continue;
+
+ provider_type = goa_account_get_provider_type (account);
+ if (g_strcmp0 (provider_type, miner_class->goa_provider_type) == 0)
+ {
+ g_free (self->priv->display_name);
+ self->priv->display_name = goa_account_dup_provider_name (account);
+ break;
+ }
+ }
+
+ g_list_free_full (accounts, g_object_unref);
+}
+
+static void
+gd_miner_constructed (GObject *obj)
+{
+ GdMiner *self = GD_MINER (obj);
+
+ G_OBJECT_CLASS (gd_miner_parent_class)->constructed (obj);
+
+ gd_miner_init_goa (self);
+}
+
+static void
gd_miner_init (GdMiner *self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GD_TYPE_MINER, GdMinerPrivate);
+ self->priv->display_name = g_strdup ("");
}
static void
@@ -85,6 +142,7 @@ gd_miner_class_init (GdMinerClass *klass)
{
GObjectClass *oclass = G_OBJECT_CLASS (klass);
+ oclass->constructed = gd_miner_constructed;
oclass->dispose = gd_miner_dispose;
g_type_class_add_private (klass, sizeof (GdMinerPrivate));
@@ -552,11 +610,8 @@ gd_miner_cleanup_old_accounts (GdMiner *self,
}
static void
-client_ready_cb (GObject *source,
- GAsyncResult *res,
- gpointer user_data)
+gd_miner_refresh_db_real (GdMiner *self)
{
- GdMiner *self = user_data;
GoaDocuments *documents;
GoaAccount *account;
GoaObject *object;
@@ -565,14 +620,6 @@ client_ready_cb (GObject *source,
GList *accounts, *doc_objects, *acc_objects, *l;
GdMinerClass *miner_class = GD_MINER_GET_CLASS (self);
- self->priv->client = goa_client_new_finish (res, &error);
-
- if (error != NULL)
- {
- gd_miner_complete_error (self, error);
- return;
- }
-
doc_objects = NULL;
acc_objects = NULL;
@@ -619,7 +666,13 @@ sparql_connection_ready_cb (GObject *object,
return;
}
- goa_client_new (self->priv->cancellable, client_ready_cb, self);
+ gd_miner_refresh_db_real (self);
+}
+
+const gchar *
+gd_miner_get_display_name (GdMiner *self)
+{
+ return self->priv->display_name;
}
void
@@ -628,6 +681,12 @@ gd_miner_refresh_db_async (GdMiner *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
+ if (self->priv->client_error != NULL)
+ {
+ gd_miner_complete_error (self, self->priv->client_error);
+ return;
+ }
+
self->priv->result =
g_simple_async_result_new (G_OBJECT (self),
callback, user_data,
diff --git a/src/miner/gd-miner.h b/src/miner/gd-miner.h
index c61135a..273b5b7 100644
--- a/src/miner/gd-miner.h
+++ b/src/miner/gd-miner.h
@@ -83,6 +83,8 @@ struct _GdMinerClass
GType gd_miner_get_type (void);
+const gchar * gd_miner_get_display_name (GdMiner *self);
+
void gd_miner_refresh_db_async (GdMiner *self,
GCancellable *cancellable,
GAsyncReadyCallback callback,
diff --git a/src/miner/miner-main.c b/src/miner/miner-main.c
index 0e2b9cd..276073a 100644
--- a/src/miner/miner-main.c
+++ b/src/miner/miner-main.c
@@ -33,6 +33,7 @@ static const gchar introspection_xml[] =
" <interface name='org.gnome.Documents.Miner'>"
" <method name='RefreshDB'>"
" </method>"
+ " <property name='DisplayName' type='s' access='read'/>"
" </interface>"
"</node>";
@@ -42,6 +43,7 @@ static GMainLoop *loop = NULL;
static guint name_owner_id = 0;
static guint autoquit_id = 0;
static gboolean refreshing = FALSE;
+static GdMiner *miner = NULL;
static gboolean
autoquit_timeout_cb (gpointer _unused)
@@ -118,8 +120,6 @@ miner_refresh_db_ready_cb (GObject *source,
static void
handle_refresh_db (GDBusMethodInvocation *invocation)
{
- GdMiner *miner;
-
ensure_autoquit_off ();
/* if we're refreshing already, compress with the current request */
@@ -128,7 +128,6 @@ handle_refresh_db (GDBusMethodInvocation *invocation)
refreshing = TRUE;
cancellable = g_cancellable_new ();
- miner = g_object_new (MINER_TYPE, NULL);
gd_miner_refresh_db_async (miner, cancellable,
miner_refresh_db_ready_cb, invocation);
@@ -152,10 +151,33 @@ handle_method_call (GDBusConnection *connection,
g_assert_not_reached ();
}
+static GVariant *
+handle_get_display_name ()
+{
+ return g_variant_new_string (gd_miner_get_display_name (miner));
+}
+
+static GVariant *
+handle_get_property (GDBusConnection *connection,
+ const gchar *sender,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *property_name,
+ GError **error,
+ gpointer user_data)
+{
+ if (g_strcmp0 (property_name, "DisplayName") == 0)
+ return handle_get_display_name ();
+
+ g_assert_not_reached ();
+
+ return NULL;
+}
+
static const GDBusInterfaceVTable interface_vtable =
{
handle_method_call,
- NULL, /* get_property */
+ handle_get_property,
NULL, /* set_property */
};
@@ -185,6 +207,7 @@ on_bus_acquired (GDBusConnection *connection,
_exit (1);
}
+ miner = g_object_new (MINER_TYPE, NULL);
g_debug ("Object exported on the session bus");
}
diff --git a/src/miners.js b/src/miners.js
index 988c468..f5bbf54 100644
--- a/src/miners.js
+++ b/src/miners.js
@@ -25,6 +25,7 @@ const GLib = imports.gi.GLib;
const MinerIface = <interface name="org.gnome.Documents.Miner">
<method name="RefreshDB" />
+ <property name="DisplayName" type="s" access="read"/>
</interface>;
var MinerProxy = Gio.DBusProxy.makeProxyWrapper(MinerIface);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]