[tracker] TrackerMiner: Listen to tracker-store availability, pause if necessary.
- From: Carlos Garnacho <carlosg src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker] TrackerMiner: Listen to tracker-store availability, pause if necessary.
- Date: Wed, 23 Sep 2009 13:19:39 +0000 (UTC)
commit 54fa1092b551b8e3cfb80563fc41eaa540e9d073
Author: Carlos Garnacho <carlos lanedo com>
Date: Wed Sep 23 12:47:02 2009 +0200
TrackerMiner: Listen to tracker-store availability, pause if necessary.
src/libtracker-miner/tracker-miner.c | 66 ++++++++++++++++++++++++++++++++++
1 files changed, 66 insertions(+), 0 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner.c b/src/libtracker-miner/tracker-miner.c
index 7a3edf3..aee9138 100644
--- a/src/libtracker-miner/tracker-miner.c
+++ b/src/libtracker-miner/tracker-miner.c
@@ -43,6 +43,8 @@ struct TrackerMinerPrivate {
gchar *description;
gchar *status;
gdouble progress;
+
+ gint availability_cookie;
};
typedef struct {
@@ -420,6 +422,68 @@ dbus_register_object (GObject *object,
}
static void
+name_owner_changed_cb (DBusGProxy *proxy,
+ gchar *name,
+ gchar *old_owner,
+ gchar *new_owner,
+ gpointer user_data)
+{
+ TrackerMiner *miner;
+ gboolean available;
+ GError *error = NULL;
+
+ if (!name || !*name ||
+ strcmp (name, "org.freedesktop.Tracker1") != 0) {
+ return;
+ }
+
+ miner = user_data;
+ available = (new_owner && *new_owner);
+
+ g_debug ("Tracker-store availability has changed to %d", available);
+
+ if (available && miner->private->availability_cookie != 0) {
+ tracker_miner_resume (miner,
+ miner->private->availability_cookie,
+ &error);
+
+ if (error) {
+ g_warning ("Error happened resuming miner: %s\n", error->message);
+ g_error_free (error);
+ }
+
+ miner->private->availability_cookie = 0;
+ } else if (!available && miner->private->availability_cookie == 0) {
+ gint cookie_id;
+
+ cookie_id = tracker_miner_pause (miner,
+ g_get_application_name (),
+ _("Data store is not available"),
+ &error);
+
+ if (error) {
+ g_warning ("Could not pause: %s", error->message);
+ g_error_free (error);
+ } else {
+ miner->private->availability_cookie = cookie_id;
+ }
+ }
+}
+
+static void
+dbus_set_name_monitor (TrackerMiner *miner,
+ DBusGProxy *proxy)
+{
+ dbus_g_proxy_add_signal (proxy, "NameOwnerChanged",
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_INVALID);
+
+ dbus_g_proxy_connect_signal (proxy, "NameOwnerChanged",
+ G_CALLBACK (name_owner_changed_cb),
+ miner, NULL);
+}
+
+static void
dbus_data_destroy (gpointer data)
{
DBusData *dd;
@@ -487,6 +551,8 @@ dbus_data_create (TrackerMiner *miner,
return NULL;
}
+ dbus_set_name_monitor (miner, gproxy);
+
g_free (full_path);
/* Now we're successfully connected and registered, create the data */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]