[maemo-commits] [maemo-commits] r18560 - in projects/haf/trunk/hildon-thumbnail: . daemon
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Mon Jun 1 12:00:23 EEST 2009
- Previous message: [maemo-commits] r18559 - projects/haf/trunk/libmatchbox2
- Next message: [maemo-commits] r18561 - in projects/haf/trunk/libmatchbox2: . matchbox/comp-mgr
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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); }
- Previous message: [maemo-commits] r18559 - projects/haf/trunk/libmatchbox2
- Next message: [maemo-commits] r18561 - in projects/haf/trunk/libmatchbox2: . matchbox/comp-mgr
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]