[maemo-commits] [maemo-commits] r16037 - in projects/haf/branches/hildon-thumbnail/daemonize: . daemon daemon/plugins

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Fri Sep 5 16:29:08 EEST 2008
Author: pvanhoof
Date: 2008-09-05 16:29:06 +0300 (Fri, 05 Sep 2008)
New Revision: 16037

Modified:
   projects/haf/branches/hildon-thumbnail/daemonize/ChangeLog
   projects/haf/branches/hildon-thumbnail/daemonize/daemon/Makefile.am
   projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.c
   projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.h
   projects/haf/branches/hildon-thumbnail/daemonize/daemon/plugins/gdkpixbuf-plugin.c
   projects/haf/branches/hildon-thumbnail/daemonize/daemon/thumbnailer.c
Log:
2008-09-05  Philip Van Hoof  <pvanhoof at gnome.org>

	* daemon/plugins/gdkpixbuf-plugin.c: Memory leak fix

	* daemon/thumbnailer.c
	* daemon/manager.c
	* daemon/manager.h
	* daemon/Makefile.am: Spec change, added registrations using service 
	files in the thumbnailer directories



Modified: projects/haf/branches/hildon-thumbnail/daemonize/ChangeLog
===================================================================
--- projects/haf/branches/hildon-thumbnail/daemonize/ChangeLog	2008-09-05 11:40:19 UTC (rev 16036)
+++ projects/haf/branches/hildon-thumbnail/daemonize/ChangeLog	2008-09-05 13:29:06 UTC (rev 16037)
@@ -1,14 +1,23 @@
 2008-09-05  Philip Van Hoof  <pvanhoof at gnome.org>
 
-	daemon/plugins/gdkpixbuf-plugin.c
-	daemon/plugins/pixbuf-io-loader.c
-	daemon/plugins/Makefile.am
-	daemon/utils.h
-	daemon/pixbuf-io-loader.c
-	daemon/Makefile.am: Moving things around
+	* daemon/plugins/gdkpixbuf-plugin.c
+	* daemon/thumbnailer.c
+	* daemon/manager.c
+	* daemon/manager.h
+	* daemon/Makefile.am: Spec change, added registrations using service 
+	files in the thumbnailer directories
 
 2008-09-05  Philip Van Hoof  <pvanhoof at gnome.org>
 
+	* daemon/plugins/gdkpixbuf-plugin.c
+	* daemon/plugins/pixbuf-io-loader.c
+	* daemon/plugins/Makefile.am
+	* daemon/utils.h
+	* daemon/pixbuf-io-loader.c
+	* daemon/Makefile.am: Moving things around
+
+2008-09-05  Philip Van Hoof  <pvanhoof at gnome.org>
+
 	* daemon/hildon-thumbnail-daemon.c
 	* daemon/hildon-thumbnail-plugin.h
 	* daemon/plugin-runner.c

Modified: projects/haf/branches/hildon-thumbnail/daemonize/daemon/Makefile.am
===================================================================
--- projects/haf/branches/hildon-thumbnail/daemonize/daemon/Makefile.am	2008-09-05 11:40:19 UTC (rev 16036)
+++ projects/haf/branches/hildon-thumbnail/daemonize/daemon/Makefile.am	2008-09-05 13:29:06 UTC (rev 16037)
@@ -6,6 +6,7 @@
 	$(GMODULE_CFLAGS) \
 	$(GIO_CFLAGS) \
 	$(DBUS_CFLAGS) \
+	-DTHUMBNAILERS_DIR=\""$(datadir)/thumbnailers"\" \
 	-DPLUGINS_DIR=\""$(libdir)/hildon-thumbnailer/plugins"\"
 
 

Modified: projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.c
===================================================================
--- projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.c	2008-09-05 11:40:19 UTC (rev 16036)
+++ projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.c	2008-09-05 13:29:06 UTC (rev 16037)
@@ -24,6 +24,7 @@
 
 #include <string.h>
 #include <glib.h>
+#include <gio/gio.h>
 #include <dbus/dbus-glib-bindings.h>
 
 #include "manager.h"
@@ -66,6 +67,165 @@
 }
 
 
+static void
+manager_add (Manager *object, gchar *mime_type, gchar *name)
+{
+	ManagerPrivate *priv = MANAGER_GET_PRIVATE (object);
+	DBusGProxy *mime_proxy;
+
+	mime_proxy = dbus_g_proxy_new_for_name (priv->connection, name, 
+						THUMBNAILER_PATH,
+						THUMBNAILER_INTERFACE);
+
+	g_hash_table_replace (priv->handlers, 
+			      g_strdup (mime_type),
+			      g_object_ref (mime_proxy));
+
+}
+
+typedef struct {
+	gchar *name;
+	guint64 mtime;
+} ValueInfo;
+
+static void
+free_valueinfo (ValueInfo *info) {
+	g_slice_free (ValueInfo, info);
+}
+
+void
+manager_check_dir (Manager *object, gchar *path, gboolean override)
+{
+	ManagerPrivate *priv = MANAGER_GET_PRIVATE (object);
+	const gchar *filen;
+	GDir *dir;
+	GHashTableIter iter;
+	GHashTable *pre;
+	gpointer pkey, pvalue;
+
+	dir = g_dir_open (path, 0, NULL);
+
+	if (!dir)
+		return;
+
+	pre = g_hash_table_new_full (g_str_hash, g_str_equal,
+				     (GDestroyNotify) g_free, 
+				     (GDestroyNotify) free_valueinfo);
+
+	for (filen = g_dir_read_name (dir); filen; filen = g_dir_read_name (dir)) {
+		GKeyFile *keyfile;
+		gchar *fullfilen = g_build_filename (path, filen, NULL);
+		gchar *value;
+		GStrv values;
+		GError *error = NULL;
+		guint i = 0;
+		guint64 mtime;
+		GFileInfo *info;
+		GFile *file;
+
+		keyfile = g_key_file_new ();
+
+		if (!g_key_file_load_from_file (keyfile, fullfilen, G_KEY_FILE_NONE, NULL)) {
+			g_free (fullfilen);
+			continue;
+		}
+
+		value = g_key_file_get_string (keyfile, "D-BUS Thumbnailer", "Name", NULL);
+
+		if (!value) 
+			continue;
+
+		values = g_key_file_get_string_list (keyfile, "D-BUS Thumbnailer", "mimetypes", NULL, NULL);
+
+		if (!values)
+			continue;
+
+		file = g_file_new_for_path (fullfilen);
+
+		g_free (fullfilen);
+
+		info = g_file_query_info (file, G_FILE_ATTRIBUTE_TIME_MODIFIED,
+					  G_FILE_QUERY_INFO_NONE,
+					  NULL, &error);
+
+		if (error) {
+			g_free (value);
+			g_strfreev (values);
+			g_key_file_free (keyfile);
+			continue;
+		}
+
+		mtime = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
+
+		while (values[i] != NULL) {
+			ValueInfo *info;
+
+			info = g_hash_table_lookup (pre, values[i]);
+
+			if (!info || info->mtime < mtime) {
+				info = g_slice_new (ValueInfo);
+				info->name = g_strdup (value);
+				info->mtime = mtime;
+
+				g_hash_table_replace (pre, 
+						      g_strdup (values[i]), 
+						      info);
+			}
+
+			i++;
+		}
+
+		if (info)
+			g_object_unref (info);
+		if (file)
+			g_object_unref (file);
+
+		g_free (value);
+		g_strfreev (values);
+		g_key_file_free (keyfile);
+	}
+
+	g_dir_close (dir);
+
+	g_hash_table_iter_init (&iter, pre);
+
+	while (g_hash_table_iter_next (&iter, &pkey, &pvalue))  {
+		gchar *k = pkey, *v = pvalue;
+		gchar *oname = NULL;
+
+		if (!override) {
+			DBusGProxy *proxy = g_hash_table_lookup (priv->handlers, k);
+			if (proxy)
+				oname = (gchar *) dbus_g_proxy_get_bus_name (proxy);
+		}
+
+		if (!oname || g_ascii_strcasecmp (v, oname) != 0)
+			manager_add (object, k, v);
+	}
+
+	g_hash_table_unref (pre);
+}
+
+void
+manager_check (Manager *object)
+{
+	ManagerPrivate *priv = MANAGER_GET_PRIVATE (object);
+
+	gchar *home_thumbnlrs = g_build_filename (g_get_user_data_dir (), 
+		"thumbnailers", NULL);
+
+	g_mutex_lock (priv->mutex);
+
+	manager_check_dir (object, THUMBNAILERS_DIR, FALSE);
+	manager_check_dir (object, home_thumbnlrs, TRUE);
+
+	g_mutex_unlock (priv->mutex);
+
+	g_free (home_thumbnlrs);
+
+}
+
+
 static gboolean 
 do_remove_or_not (gpointer key, gpointer value, gpointer user_data)
 {
@@ -117,14 +277,8 @@
 
 	sender = dbus_g_method_get_sender (context);
 
-	mime_proxy = dbus_g_proxy_new_for_name (priv->connection, sender, 
-						THUMBNAILER_PATH,
-						THUMBNAILER_INTERFACE);
+	manager_add (object, mime_type, sender);
 
-	g_hash_table_insert (priv->handlers, 
-			     g_strdup (mime_type),
-			     g_object_ref (mime_proxy));
-
 	g_free (sender);
 
 	g_signal_connect (mime_proxy, "destroy",
@@ -136,6 +290,7 @@
 	dbus_g_method_return (context);
 }
 
+
 static void
 manager_finalize (GObject *object)
 {

Modified: projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.h
===================================================================
--- projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.h	2008-09-05 11:40:19 UTC (rev 16036)
+++ projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.h	2008-09-05 13:29:06 UTC (rev 16037)
@@ -48,9 +48,12 @@
 GType manager_get_type (void);
 
 void manager_register (Manager *object, gchar *mime_type, DBusGMethodInvocation *context);
+
+void manager_check (Manager *Object);
 DBusGProxy* manager_get_handler (Manager *object, const gchar *mime_type);
 
 void manager_do_stop (void);
 void manager_do_init (DBusGConnection *connection, Manager **manager, GError **error);
 
+
 #endif

Modified: projects/haf/branches/hildon-thumbnail/daemonize/daemon/plugins/gdkpixbuf-plugin.c
===================================================================
--- projects/haf/branches/hildon-thumbnail/daemonize/daemon/plugins/gdkpixbuf-plugin.c	2008-09-05 11:40:19 UTC (rev 16036)
+++ projects/haf/branches/hildon-thumbnail/daemonize/daemon/plugins/gdkpixbuf-plugin.c	2008-09-05 13:29:06 UTC (rev 16037)
@@ -208,6 +208,11 @@
 		if (stream)
 			g_object_unref (stream);
 
+		if (info)
+			g_object_unref (info);
+		if (file)
+			g_object_unref (file);
+
 		g_free (large);
 		g_free (normal);
 

Modified: projects/haf/branches/hildon-thumbnail/daemonize/daemon/thumbnailer.c
===================================================================
--- projects/haf/branches/hildon-thumbnail/daemonize/daemon/thumbnailer.c	2008-09-05 11:40:19 UTC (rev 16036)
+++ projects/haf/branches/hildon-thumbnail/daemonize/daemon/thumbnailer.c	2008-09-05 13:29:06 UTC (rev 16037)
@@ -213,6 +213,9 @@
 	}
 	g_mutex_unlock (priv->mutex);
 
+
+	manager_check (priv->manager);
+
 	/* We split the request into groups that have items with the same 
 	  * mime-type and one group with items that already have a thumbnail */
 


More information about the maemo-commits mailing list