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

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Wed Sep 10 12:23:57 EEST 2008
Author: pvanhoof
Date: 2008-09-10 12:23:55 +0300 (Wed, 10 Sep 2008)
New Revision: 16080

Modified:
   projects/haf/branches/hildon-thumbnail/daemonize/ChangeLog
   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/exec-plugin.c
   projects/haf/branches/hildon-thumbnail/daemonize/daemon/plugins/gdkpixbuf-plugin.c
   projects/haf/branches/hildon-thumbnail/daemonize/daemon/thumbnailer.c
Log:
2008-09-09  Philip Van Hoof  <pvanhoof at gnome.org>
x


Modified: projects/haf/branches/hildon-thumbnail/daemonize/ChangeLog
===================================================================
--- projects/haf/branches/hildon-thumbnail/daemonize/ChangeLog	2008-09-09 21:25:45 UTC (rev 16079)
+++ projects/haf/branches/hildon-thumbnail/daemonize/ChangeLog	2008-09-10 09:23:55 UTC (rev 16080)
@@ -1,3 +1,10 @@
+2008-09-10  Philip Van Hoof  <pvanhoof at gnome.org>
+
+	* daemon/plugins/gdkpixbuf-plugin.c
+	* daemon/plugins/exec-plugin.c
+	* daemon/manager.c
+	* daemon/manager.h: File monitoring the service and configuration files
+
 2008-09-09  Philip Van Hoof  <pvanhoof at gnome.org>
 
 	* thumbs/thumber-register.c

Modified: projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.c
===================================================================
--- projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.c	2008-09-09 21:25:45 UTC (rev 16079)
+++ projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.c	2008-09-10 09:23:55 UTC (rev 16080)
@@ -102,7 +102,7 @@
 	g_slice_free (ValueInfo, info);
 }
 
-void
+static void
 manager_check_dir (Manager *object, gchar *path, gboolean override)
 {
 	ManagerPrivate *priv = MANAGER_GET_PRIVATE (object);
@@ -216,10 +216,33 @@
 	g_hash_table_unref (pre);
 }
 
-void
+
+static void
+on_dir_changed (GFileMonitor *monitor, GFile *file, GFile *other_file, GFileMonitorEvent event_type, gpointer user_data)
+{
+	switch (event_type) 
+	{
+		case G_FILE_MONITOR_EVENT_CHANGED:
+		case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
+		case G_FILE_MONITOR_EVENT_DELETED:
+		case G_FILE_MONITOR_EVENT_CREATED: {
+			gchar *path = g_file_get_path (file);
+			gboolean override = (strcmp (THUMBNAILERS_DIR, path) == 0);
+			manager_check_dir (MANAGER (user_data), path, override);
+			g_free (path);
+		} 
+		break;
+		default:
+		break;
+	}
+}
+
+static void
 manager_check (Manager *object)
 {
 	ManagerPrivate *priv = MANAGER_GET_PRIVATE (object);
+	GFileMonitor *monitor;
+	GFile *file;
 
 	gchar *home_thumbnlrs = g_build_filename (g_get_user_data_dir (), 
 		"thumbnailers", NULL);
@@ -229,10 +252,25 @@
 	manager_check_dir (object, THUMBNAILERS_DIR, FALSE);
 	manager_check_dir (object, home_thumbnlrs, TRUE);
 
+	file = g_file_new_for_path (home_thumbnlrs);
+	monitor =  g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, NULL);
+	g_signal_connect (G_OBJECT (monitor), "changed", 
+			  G_CALLBACK (on_dir_changed), NULL);
+
+	// g_object_unref (file)
+	// g_object_unref (monitor)
+
+	file = g_file_new_for_path (THUMBNAILERS_DIR);
+	monitor =  g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, NULL);
+	g_signal_connect (G_OBJECT (monitor), "changed", 
+			  G_CALLBACK (on_dir_changed), NULL);
+
 	g_mutex_unlock (priv->mutex);
 
+	// g_object_unref (file)
+	// g_object_unref (monitor)
+
 	g_free (home_thumbnlrs);
-
 }
 
 
@@ -387,12 +425,12 @@
 manager_init (Manager *object)
 {
 	ManagerPrivate *priv = MANAGER_GET_PRIVATE (object);
+	GFile *file1, *file2;
 
 	priv->mutex = g_mutex_new ();
 	priv->handlers = g_hash_table_new_full (g_str_hash, g_str_equal,
 						(GDestroyNotify) g_free, 
 						(GDestroyNotify) g_object_unref);
-
 }
 
 void 

Modified: projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.h
===================================================================
--- projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.h	2008-09-09 21:25:45 UTC (rev 16079)
+++ projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.h	2008-09-10 09:23:55 UTC (rev 16080)
@@ -49,7 +49,6 @@
 
 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);

Modified: projects/haf/branches/hildon-thumbnail/daemonize/daemon/plugins/exec-plugin.c
===================================================================
--- projects/haf/branches/hildon-thumbnail/daemonize/daemon/plugins/exec-plugin.c	2008-09-09 21:25:45 UTC (rev 16079)
+++ projects/haf/branches/hildon-thumbnail/daemonize/daemon/plugins/exec-plugin.c	2008-09-10 09:23:55 UTC (rev 16080)
@@ -43,7 +43,8 @@
 
 static gchar **supported = NULL;
 static gboolean do_cropped = TRUE;
-static GHashTable *execs;
+static GHashTable *execs = NULL;
+static GFileMonitor *monitor = NULL;
 
 const gchar** 
 hildon_thumbnail_plugin_supported (void)
@@ -319,14 +320,15 @@
 	if (supported)
 		g_strfreev (supported);
 	supported = NULL;
+	if (monitor)
+		g_object_unref (monitor);
 	g_hash_table_unref (execs);
 	execs = NULL;
 }
 
-void 
-hildon_thumbnail_plugin_init (gboolean *cropping, GError **error)
+static void
+reload_config (const gchar *config) 
 {
-	gchar *config = g_build_filename (g_get_user_config_dir (), "hildon-thumbnailer", "exec-plugin.conf", NULL);
 	GKeyFile *keyfile;
 	GStrv mimetypes;
 	guint i = 0, length;
@@ -334,18 +336,16 @@
 	keyfile = g_key_file_new ();
 
 	if (!g_key_file_load_from_file (keyfile, config, G_KEY_FILE_NONE, NULL)) {
-		g_free (config);
 		do_cropped = TRUE;
-		*cropping = do_cropped;
 		return;
 	}
 
-	execs = g_hash_table_new_full (g_str_hash, g_str_equal,
-				       (GDestroyNotify) g_free,
-				       (GDestroyNotify) g_free);
+	if (!execs)
+		execs = g_hash_table_new_full (g_str_hash, g_str_equal,
+					       (GDestroyNotify) g_free,
+					       (GDestroyNotify) g_free);
 
 	do_cropped = g_key_file_get_boolean (keyfile, "Hildon Thumbnailer", "DoCropping", NULL);
-	*cropping = do_cropped;
 
 	mimetypes = g_key_file_get_string_list (keyfile, "Hildon Thumbnailer", "MimeTypes", &length, NULL);
 
@@ -356,6 +356,33 @@
 	}
 
 	g_strfreev (mimetypes);
-	g_free (config);
 	g_key_file_free (keyfile);
 }
+
+static void 
+on_file_changed (GFileMonitor *monitor, GFile *file, GFile *other_file, GFileMonitorEvent event_type, gpointer user_data)
+{
+	if (event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT || event_type == G_FILE_MONITOR_EVENT_CREATED) {
+		gchar *config = g_file_get_path (file);
+		reload_config (config);
+		g_free (config);
+	}
+}
+
+void 
+hildon_thumbnail_plugin_init (gboolean *cropping, GError **error)
+{
+	gchar *config = g_build_filename (g_get_user_config_dir (), "hildon-thumbnailer", "exec-plugin.conf", NULL);
+	GFile *file = g_file_new_for_path (config);
+
+	monitor =  g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, NULL);
+
+	g_signal_connect (G_OBJECT (monitor), "changed", 
+			  G_CALLBACK (on_file_changed), NULL);
+
+	reload_config (config);
+
+	*cropping = do_cropped;
+
+	g_free (config);
+}

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-09 21:25:45 UTC (rev 16079)
+++ projects/haf/branches/hildon-thumbnail/daemonize/daemon/plugins/gdkpixbuf-plugin.c	2008-09-10 09:23:55 UTC (rev 16080)
@@ -58,6 +58,7 @@
 
 static gchar **supported = NULL;
 static gboolean do_cropped = TRUE;
+static GFileMonitor *monitor = NULL;
 
 const gchar** 
 hildon_thumbnail_plugin_supported (void)
@@ -365,26 +366,52 @@
 {
 	if (supported)
 		g_strfreev (supported);
+	if (monitor)
+		g_object_unref (monitor);
 	supported = NULL;
 }
 
-void 
-hildon_thumbnail_plugin_init (gboolean *cropping, GError **error)
+static void
+reload_config (const gchar *config)
 {
-	gchar *config = g_build_filename (g_get_user_config_dir (), "hildon-thumbnailer", "gdkpixbuf-plugin.conf", NULL);
 	GKeyFile *keyfile;
 
 	keyfile = g_key_file_new ();
 
 	if (!g_key_file_load_from_file (keyfile, config, G_KEY_FILE_NONE, NULL)) {
-		g_free (config);
 		do_cropped = TRUE;
-		*cropping = do_cropped;
 		return;
 	}
 
 	do_cropped = g_key_file_get_boolean (keyfile, "Hildon Thumbnailer", "DoCropping", NULL);
+	g_key_file_free (keyfile);
+}
+
+static void 
+on_file_changed (GFileMonitor *monitor, GFile *file, GFile *other_file, GFileMonitorEvent event_type, gpointer user_data)
+{
+	if (event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT || event_type == G_FILE_MONITOR_EVENT_CREATED) {
+		gchar *config = g_file_get_path (file);
+		reload_config (config);
+		g_free (config);
+	}
+}
+
+void 
+hildon_thumbnail_plugin_init (gboolean *cropping, GError **error)
+{
+	gchar *config = g_build_filename (g_get_user_config_dir (), "hildon-thumbnailer", "gdkpixbuf-plugin.conf", NULL);
+	GFile *file = g_file_new_for_path (config);
+
+	monitor =  g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, NULL);
+
+	g_signal_connect (G_OBJECT (monitor), "changed", 
+			  G_CALLBACK (on_file_changed), NULL);
+
+	reload_config (config);
+
 	*cropping = do_cropped;
+
 	g_free (config);
-	g_key_file_free (keyfile);
+
 }

Modified: projects/haf/branches/hildon-thumbnail/daemonize/daemon/thumbnailer.c
===================================================================
--- projects/haf/branches/hildon-thumbnail/daemonize/daemon/thumbnailer.c	2008-09-09 21:25:45 UTC (rev 16079)
+++ projects/haf/branches/hildon-thumbnail/daemonize/daemon/thumbnailer.c	2008-09-10 09:23:55 UTC (rev 16080)
@@ -217,9 +217,6 @@
 	}
 	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