[tracker] TrackerMinerManager: Add pause() and resume() methods.



commit 33ddfb02fd0174158a7cf7de4d159337e49d629e
Author: Carlos Garnacho <carlos lanedo com>
Date:   Mon Sep 7 15:08:39 2009 +0200

    TrackerMinerManager: Add pause() and resume() methods.

 src/libtracker-miner/tracker-miner-manager.c |   92 ++++++++++++++++++++++++++
 src/libtracker-miner/tracker-miner-manager.h |    7 ++
 2 files changed, 99 insertions(+), 0 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-manager.c b/src/libtracker-miner/tracker-miner-manager.c
index 0ffc91c..285fcf4 100644
--- a/src/libtracker-miner/tracker-miner-manager.c
+++ b/src/libtracker-miner/tracker-miner-manager.c
@@ -27,6 +27,7 @@
 #include "tracker-miner.h"
 #include "tracker-miner-manager.h"
 #include "tracker-marshal.h"
+#include "tracker-miner-client.h"
 
 #define TRACKER_MINER_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRACKER_TYPE_MINER_MANAGER, TrackerMinerManagerPrivate))
 
@@ -92,6 +93,26 @@ tracker_miner_manager_class_init (TrackerMinerManagerClass *klass)
 	g_type_class_add_private (object_class, sizeof (TrackerMinerManagerPrivate));
 }
 
+static DBusGProxy *
+find_miner_proxy (TrackerMinerManager *manager,
+		  const gchar         *name)
+{
+	TrackerMinerManagerPrivate *priv;
+	GHashTableIter iter;
+	gpointer key, value;
+
+	priv = TRACKER_MINER_MANAGER_GET_PRIVATE (manager);
+	g_hash_table_iter_init (&iter, priv->miner_proxies);
+
+	while (g_hash_table_iter_next (&iter, &key, &value)) {
+		if (g_strcmp0 (name, (gchar *) value) == 0) {
+			return key;
+		}
+	}
+
+	return NULL;
+}
+
 static void
 miner_progress_changed (DBusGProxy  *proxy,
 			const gchar *status,
@@ -351,3 +372,74 @@ tracker_miner_manager_get_available (TrackerMinerManager *manager)
 
 	return g_slist_reverse (list);
 }
+
+gboolean
+tracker_miner_manager_pause (TrackerMinerManager *manager,
+			     const gchar         *miner,
+			     const gchar         *reason,
+			     guint32             *cookie)
+{
+	DBusGProxy *proxy;
+	const gchar *app_name;
+	GError *error = NULL;
+
+	g_return_val_if_fail (TRACKER_IS_MINER_MANAGER (manager), FALSE);
+	g_return_val_if_fail (miner != NULL, FALSE);
+	g_return_val_if_fail (reason != NULL, FALSE);
+
+	proxy = find_miner_proxy (manager, miner);
+
+	if (!proxy) {
+		g_critical ("No DBus proxy found for miner '%s'", miner);
+		return FALSE;
+	}
+
+	/* Find a reasonable app name */
+	app_name = g_get_application_name ();
+
+	if (!app_name) {
+		app_name = g_get_prgname ();
+	}
+
+	if (!app_name) {
+		app_name = "TrackerMinerManager client";
+	}
+
+	org_freedesktop_Tracker1_Miner_pause (proxy, app_name, reason, cookie, &error);
+
+	if (error) {
+		g_critical ("Could not pause miner '%s': %s", miner, error->message);
+		g_error_free (error);
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+gboolean
+tracker_miner_manager_resume (TrackerMinerManager *manager,
+			      const gchar         *miner,
+			      guint32              cookie)
+{
+	DBusGProxy *proxy;
+	GError *error = NULL;
+
+	g_return_val_if_fail (TRACKER_IS_MINER_MANAGER (manager), FALSE);
+	g_return_val_if_fail (miner != NULL, FALSE);
+	proxy = find_miner_proxy (manager, miner);
+
+	if (!proxy) {
+		g_critical ("No DBus proxy found for miner '%s'", miner);
+		return FALSE;
+	}
+
+	org_freedesktop_Tracker1_Miner_resume (proxy, cookie, &error);
+
+	if (error) {
+		g_critical ("Could not resume miner '%s': %s", miner, error->message);
+		g_error_free (error);
+		return FALSE;
+	}
+
+	return TRUE;
+}
diff --git a/src/libtracker-miner/tracker-miner-manager.h b/src/libtracker-miner/tracker-miner-manager.h
index 2ed533e..788f5c9 100644
--- a/src/libtracker-miner/tracker-miner-manager.h
+++ b/src/libtracker-miner/tracker-miner-manager.h
@@ -59,6 +59,13 @@ TrackerMinerManager * tracker_miner_manager_new (void);
 GSList *tracker_miner_manager_get_running   (TrackerMinerManager *manager);
 GSList *tracker_miner_manager_get_available (TrackerMinerManager *manager);
 
+gboolean tracker_miner_manager_pause  (TrackerMinerManager *manager,
+				       const gchar         *miner,
+				       const gchar         *reason,
+				       guint32             *cookie);
+gboolean tracker_miner_manager_resume (TrackerMinerManager *manager,
+				       const gchar         *miner,
+				       guint32              cookie);
 
 G_END_DECLS
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]