[maemo-commits] [maemo-commits] r18560 - in projects/haf/trunk/hildon-thumbnail: . daemon

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Mon Jun 1 12:00:23 EEST 2009
Author: pvanhoof
Date: 2009-06-01 12:00:11 +0300 (Mon, 01 Jun 2009)
New Revision: 18560

Modified:
   projects/haf/trunk/hildon-thumbnail/ChangeLog
   projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer-marshal.list
   projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.c
Log:
2009-06-01  Philip Van Hoof  <philip at codeminded.be>

        * daemon/thumbnailer.c
        * daemon/thumbnailer-marshal.list: Letting the big-task queue thread 
        wait until Tracker is finished indexing, in Maemo



Modified: projects/haf/trunk/hildon-thumbnail/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-thumbnail/ChangeLog	2009-06-01 07:19:04 UTC (rev 18559)
+++ projects/haf/trunk/hildon-thumbnail/ChangeLog	2009-06-01 09:00:11 UTC (rev 18560)
@@ -1,3 +1,9 @@
+2009-06-01  Philip Van Hoof  <philip at codeminded.be>
+
+	* daemon/thumbnailer.c
+	* daemon/thumbnailer-marshal.list: Letting the big-task queue thread
+	wait until Tracker is finished indexing, in Maemo
+
 2009-05-29  Mikael Ottela <mikael.ottela at ixonos.com>
 
 	* thumbnailers/gst-video-thumbnailer/reg/com.nokia.thumbnailer.Gstreamer.service

Modified: projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer-marshal.list
===================================================================
--- projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer-marshal.list	2009-06-01 07:19:04 UTC (rev 18559)
+++ projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer-marshal.list	2009-06-01 09:00:11 UTC (rev 18560)
@@ -1,2 +1,3 @@
 VOID:UINT,BOXED,INT,STRING
 VOID:STRING,INT,STRING
+VOID:STRING,BOOL,BOOL,BOOL,BOOL,BOOL,BOOL

Modified: projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.c
===================================================================
--- projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.c	2009-06-01 07:19:04 UTC (rev 18559)
+++ projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.c	2009-06-01 09:00:11 UTC (rev 18560)
@@ -27,6 +27,8 @@
 #include "config.h"
 #endif
 
+//#define HAVE_OSSO
+
 #ifndef _GNU_SOURCE
 #define _GNU_SOURCE
 #endif
@@ -64,6 +66,11 @@
 	GThreadPool *normal_pool;
 	GMutex *mutex;
 	GList *tasks;
+#ifdef HAVE_OSSO
+	GMutex *cmutex;
+	gboolean waiting;
+	GCond *cond;
+#endif
 } ThumbnailerPrivate;
 
 enum {
@@ -92,6 +99,58 @@
 	g_slice_free (PluginRegistration, r);
 }
 
+#ifdef HAVE_OSSO
+
+#define TRACKER_SERVICE		"org.freedesktop.Tracker"
+#define TRACKER_PATH		"/org/freedesktop/Tracker"
+#define TRACKER_INTERFACE	"org.freedesktop.Tracker"
+
+static DBusGProxy*
+get_tracker (void)
+{
+	static DBusGProxy *proxy = NULL;
+
+	if (!proxy) {
+		GError          *error = NULL;
+		DBusGConnection *connection;
+
+		connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+
+		if (!error) {
+			proxy = dbus_g_proxy_new_for_name (connection,
+							   TRACKER_SERVICE,
+							   TRACKER_PATH,
+							   TRACKER_INTERFACE);
+
+			dbus_g_object_register_marshaller (thumbnailer_marshal_VOID__STRING_BOOLEAN_BOOLEAN_BOOLEAN_BOOLEAN_BOOLEAN_BOOLEAN,
+							   G_TYPE_NONE,
+							   G_TYPE_STRING,
+							   G_TYPE_BOOLEAN,
+							   G_TYPE_BOOLEAN,
+							   G_TYPE_BOOLEAN,
+							   G_TYPE_BOOLEAN,
+							   G_TYPE_BOOLEAN,
+							   G_TYPE_BOOLEAN,
+							   G_TYPE_INVALID);
+
+			dbus_g_proxy_add_signal (proxy, "IndexStateChange",
+						 G_TYPE_STRING,
+						 G_TYPE_BOOLEAN,
+						 G_TYPE_BOOLEAN,
+						 G_TYPE_BOOLEAN,
+						 G_TYPE_BOOLEAN,
+						 G_TYPE_BOOLEAN,
+						 G_TYPE_BOOLEAN,
+						 G_TYPE_INVALID);
+		} else {
+			g_error_free (error);
+		}
+	}
+
+	return proxy;
+}
+#endif
+
 static GModule*
 get_plugin (Thumbnailer *object, const gchar *uri_scheme, const gchar *mime_type)
 {
@@ -914,6 +973,16 @@
 static void 
 do_the_large_work (WorkTask *task, gpointer user_data)
 {
+	ThumbnailerPrivate *priv = THUMBNAILER_GET_PRIVATE (task->object);
+
+#ifdef HAVE_OSSO
+	g_mutex_lock (priv->cmutex);
+	priv->waiting = TRUE;
+	g_debug ("Big-queue thread waiting for Tracker to finish Indexing (Maemo specific)");
+	g_cond_wait (priv->cond, priv->cmutex);
+	g_mutex_unlock (priv->cmutex);
+#endif
+
 	initialize_priority ();
 	do_the_work (task, user_data);
 }
@@ -1093,6 +1162,11 @@
 	g_hash_table_unref (priv->plugins_perscheme);
 	g_mutex_free (priv->mutex);
 
+#ifdef HAVE_OSSO
+	g_mutex_free (priv->cmutex);
+	g_cond_free (priv->cond);
+#endif
+
 	G_OBJECT_CLASS (thumbnailer_parent_class)->finalize (object);
 }
 
@@ -1216,6 +1290,12 @@
 
 	priv->mutex = g_mutex_new ();
 
+#ifdef HAVE_OSSO
+	priv->cmutex = g_mutex_new ();
+	priv->cond = g_cond_new ();
+	priv->waiting = FALSE;
+#endif
+
 	priv->plugins_perscheme = g_hash_table_new_full (g_str_hash, g_str_equal,
 							 (GDestroyNotify) g_free,
 							 (GDestroyNotify) g_hash_table_unref);
@@ -1229,10 +1309,28 @@
 
 	g_thread_pool_set_sort_function (priv->large_pool, pool_sort_compare, NULL);
 	g_thread_pool_set_sort_function (priv->normal_pool, pool_sort_compare, NULL);
-
 }
 
+#ifdef HAVE_OSSO
+static void
+tracker_index_state_changed (DBusGProxy *tracker, gchar *state, gboolean initial_index,
+			     gboolean in_merge, gboolean is_man_paused, gboolean is_bat_paused,
+			     gboolean is_io_paused, gboolean is_indx_en, gpointer user_data)
+{
+	if (g_strcmp0 (state, "Idle") == 0) {
+		Thumbnailer *object = user_data;
+		ThumbnailerPrivate *priv = THUMBNAILER_GET_PRIVATE (object);
 
+		g_mutex_lock (priv->cmutex);
+		if (priv->waiting) {
+			g_debug ("Tracker finised indexing, releasing big-queue thread (Maemo specific)");
+			g_cond_broadcast (priv->cond);
+			priv->waiting = FALSE;
+		}
+		g_mutex_unlock (priv->cmutex);
+	}
+}
+#endif
 
 void 
 thumbnailer_do_stop (void)
@@ -1244,7 +1342,7 @@
 thumbnailer_do_init (DBusGConnection *connection, ThumbnailManager *manager, Thumbnailer **thumbnailer, GError **error)
 {
 	guint result;
-	DBusGProxy *proxy;
+	DBusGProxy *proxy, *tracker;
 	GObject *object;
 
 	proxy = dbus_g_proxy_new_for_name (connection, 
@@ -1267,5 +1365,13 @@
 					     THUMBNAILER_PATH, 
 					     object);
 
+#ifdef HAVE_OSSO
+	tracker = get_tracker ();
+
+	dbus_g_proxy_connect_signal (tracker, "IndexStateChange",
+				     G_CALLBACK (tracker_index_state_changed),
+				     object, NULL);
+#endif
+
 	*thumbnailer = THUMBNAILER (object);
 }


More information about the maemo-commits mailing list