[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.orgDate: Fri Sep 5 16:29:08 EEST 2008
- Previous message: [maemo-commits] r16036 - projects/haf/tags/hildon-fm
- Next message: [maemo-commits] r16038 - projects/haf/branches/hildon-thumbnail/daemonize/daemon
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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 */
- Previous message: [maemo-commits] r16036 - projects/haf/tags/hildon-fm
- Next message: [maemo-commits] r16038 - projects/haf/branches/hildon-thumbnail/daemonize/daemon
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]