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

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Tue Nov 18 14:21:09 EET 2008
Author: pvanhoof
Date: 2008-11-18 14:21:03 +0200 (Tue, 18 Nov 2008)
New Revision: 16730

Modified:
   projects/haf/trunk/hildon-thumbnail/ChangeLog
   projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.c
   projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.h
   projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-jpeg-out-plugin.c
   projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-png-out-plugin.c
   projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.c
   projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.h
   projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.xml
Log:
2008-11-18  Philip Van Hoof  <philip at codeminded.be>

	* daemon/hildon-thumbnail-plugin.h
	* daemon/plugins/gdkpixbuf-png-out-plugin.c
	* daemon/plugins/gdkpixbuf-jpeg-out-plugin.c
	* daemon/thumbnailer.c
	* daemon/thumbnailer.h
	* daemon/thumbnailer.xml
	* daemon/hildon-thumbnail-plugin.c: Added a DBus API for cleaning up
	thumbnails

2008-11-18  Philip Van Hoof  <philip at codeminded.be>

	* config.h.in
	* daemon/hildon-thumbnail-plugin.h
	* daemon/plugins/gdkpixbuf-png-out-plugin.c
	* daemon/plugins/gdkpixbuf-jpeg-out-plugin.c
	* daemon/plugins/Makefile.am
	* daemon/hildon-thumbnail-plugin.c
	* configure.ac: Storing metadata in a SQLite in case of JPeg and in
	tExt in case of PNG



Modified: projects/haf/trunk/hildon-thumbnail/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-thumbnail/ChangeLog	2008-11-18 12:20:51 UTC (rev 16729)
+++ projects/haf/trunk/hildon-thumbnail/ChangeLog	2008-11-18 12:21:03 UTC (rev 16730)
@@ -1,5 +1,16 @@
-2008-11-17  Philip Van Hoof  <philip at codeminded.be>
+2008-11-18  Philip Van Hoof  <philip at codeminded.be>
 
+	* daemon/hildon-thumbnail-plugin.h
+	* daemon/plugins/gdkpixbuf-png-out-plugin.c
+	* daemon/plugins/gdkpixbuf-jpeg-out-plugin.c
+	* daemon/thumbnailer.c
+	* daemon/thumbnailer.h
+	* daemon/thumbnailer.xml
+	* daemon/hildon-thumbnail-plugin.c: Added a DBus API for cleaning up
+	thumbnails
+
+2008-11-18  Philip Van Hoof  <philip at codeminded.be>
+
 	* config.h.in
 	* daemon/hildon-thumbnail-plugin.h
 	* daemon/plugins/gdkpixbuf-png-out-plugin.c

Modified: projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.c
===================================================================
--- projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.c	2008-11-18 12:20:51 UTC (rev 16729)
+++ projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.c	2008-11-18 12:21:03 UTC (rev 16730)
@@ -32,7 +32,38 @@
 typedef gboolean (*IsActiveFunc) (void);
 typedef gboolean (*StopFunc) (void);
 typedef gchar * (*GetOrigFunc) (const gchar *path);
+typedef void (*CleanupFunc) (const gchar *uri_match, guint64 max_mtime);
 
+gchar *
+hildon_thumbnail_outplugins_cleanup (const gchar *uri_match, 
+				     guint64 max_mtime)
+{
+	GList *copy;
+
+	g_static_rec_mutex_lock (&mutex);
+	copy = g_list_copy (outplugs);
+
+	while (copy) {
+		GModule *module = copy->data;
+		CleanupFunc clean_func;
+
+		if (g_module_symbol (module, "hildon_thumbnail_outplugin_cleanup", (gpointer *) &clean_func)) {
+			IsActiveFunc isac_func;
+			if (g_module_symbol (module, "hildon_thumbnail_outplugin_is_active", (gpointer *) &isac_func)) {
+				if (isac_func ()) {
+					clean_func (uri_match, max_mtime);
+				} 
+			} 
+		}
+
+		copy = g_list_next (copy);
+	}
+
+	g_static_rec_mutex_unlock (&mutex);
+
+	g_list_free (copy);
+}
+
 gchar * 
 hildon_thumbnail_outplugins_get_orig (const gchar *path)
 {

Modified: projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.h
===================================================================
--- projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.h	2008-11-18 12:20:51 UTC (rev 16729)
+++ projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.h	2008-11-18 12:21:03 UTC (rev 16730)
@@ -74,7 +74,10 @@
 						   const gchar *uri);
 gchar *     hildon_thumbnail_outplugins_get_orig  (const gchar *path);
 
+gchar *     hildon_thumbnail_outplugins_cleanup   (const gchar *uri_match, 
+						   guint64 max_mtime);
 
+
 G_END_DECLS
 
 #endif

Modified: projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-jpeg-out-plugin.c
===================================================================
--- projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-jpeg-out-plugin.c	2008-11-18 12:20:51 UTC (rev 16729)
+++ projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-jpeg-out-plugin.c	2008-11-18 12:21:03 UTC (rev 16730)
@@ -54,8 +54,65 @@
 
 #ifdef HAVE_SQLITE3
 static sqlite3 *db = NULL;
+static gint callback (void   *NotUsed, gint    argc, gchar **argv, gchar **azColName) { }
 #endif
 
+void
+hildon_thumbnail_outplugin_cleanup (const gchar *uri_match, guint64 max_mtime)
+{
+#ifdef HAVE_SQLITE3
+	sqlite3_stmt *stmt;
+	gint result = SQLITE_OK;
+
+	if (!db) {
+		gchar *dbfile;
+		dbfile = g_build_filename (g_get_home_dir (), ".thumbnails", 
+				   "meta.db", NULL);
+		if (g_file_test (dbfile, G_FILE_TEST_EXISTS))
+			sqlite3_open (dbfile, &db);
+		g_free (dbfile);
+	}
+
+	if (db) {
+		const unsigned char *path;
+		const unsigned char *uri;
+		guint64 mtime;
+		gchar *sql = g_strdup_printf ("select Path, MTime, URI from jpegthumbnails where URI LIKE '%s%'",
+					      path);
+		sqlite3_prepare_v2 (db, sql, -1, &stmt, NULL);
+		g_free (sql);
+
+		while (result == SQLITE_OK  || result == SQLITE_ROW || result == SQLITE_BUSY) {
+			result = sqlite3_step (stmt);
+
+			if (result == SQLITE_ERROR) {
+				sqlite3_reset (stmt);
+				result = SQLITE_OK;
+				continue;
+			}
+
+			if (result == SQLITE_BUSY) {
+				g_usleep (10);
+				result = SQLITE_OK;
+				continue;
+			}
+
+			path = sqlite3_column_text (stmt, 0);
+			mtime = sqlite3_column_int64 (stmt, 1);
+			uri = sqlite3_column_text (stmt, 2);
+
+			if (mtime > max_mtime) {
+				sql = g_strdup_printf ("delete from jpegthumbnails where Path = '%s' and URI = '%s' and mtime = %d",
+						       path, mtime, uri);
+				sqlite3_exec (db, sql, callback, 0, NULL);
+				g_free (sql);
+				g_unlink (path);
+			}
+		}
+	}
+#endif
+}
+
 gchar *
 hildon_thumbnail_outplugin_get_orig (const gchar *path)
 {
@@ -149,12 +206,6 @@
 	return retval;
 }
 
-
-#ifdef HAVE_SQLITE3
-static gint 
-callback (void   *NotUsed, gint    argc, gchar **argv, gchar **azColName) { }
-#endif
-
 void
 hildon_thumbnail_outplugin_out (const guchar *rgb8_pixmap, 
 				guint width, guint height,

Modified: projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-png-out-plugin.c
===================================================================
--- projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-png-out-plugin.c	2008-11-18 12:20:51 UTC (rev 16729)
+++ projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-png-out-plugin.c	2008-11-18 12:21:03 UTC (rev 16730)
@@ -67,6 +67,7 @@
 #define SOFTWARE_OPTION "tEXt::Software"
 
 
+
 gchar *
 hildon_thumbnail_outplugin_get_orig (const gchar *path)
 {
@@ -135,6 +136,51 @@
 	return retval;
 }
 
+
+static void
+cleanup (GDir *dir, const gchar *dirname, const gchar *uri_match, guint64 max_mtime)
+{
+	const gchar *filen;
+	for (filen = g_dir_read_name (dir); filen; filen = g_dir_read_name (dir)) {
+		if (g_str_has_suffix (filen, "png")) {
+			gchar *fulln = g_build_filename (dirname, filen, NULL);
+			gchar *orig = hildon_thumbnail_outplugin_get_orig (fulln);
+			if (orig && g_str_has_prefix (orig, uri_match)) {
+				struct stat st;
+				g_stat (fulln, &st);
+				if (st.st_mtime > max_mtime) {
+					g_unlink (fulln);
+				}
+				g_free (orig);
+			}
+			g_free (fulln);
+		}
+	}
+}
+
+void
+hildon_thumbnail_outplugin_cleanup (const gchar *uri_match, guint64 max_mtime)
+{
+	GDir *dir;
+	gchar *dirname;
+
+	dirname = g_build_filename (g_get_home_dir (), ".thumbnails", "large", NULL);
+	dir = g_dir_open (dirname, 0, NULL);
+	if (dir) {
+		cleanup (dir, dirname, uri_match, max_mtime);
+		g_dir_close (dir);
+	}
+	g_free (dirname);
+
+	dirname = g_build_filename (g_get_home_dir (), ".thumbnails", "normal", NULL);
+	dir = g_dir_open (dirname, 0, NULL);
+	if (dir) {
+		cleanup (dir, dirname, uri_match, max_mtime);
+		g_dir_close (dir);
+	}
+	g_free (dirname);
+}
+
 gboolean
 hildon_thumbnail_outplugin_needs_out (HildonThumbnailPluginOutType type, guint64 mtime, const gchar *uri)
 {

Modified: projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.c
===================================================================
--- projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.c	2008-11-18 12:20:51 UTC (rev 16729)
+++ projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.c	2008-11-18 12:21:03 UTC (rev 16730)
@@ -892,6 +892,12 @@
 	dbus_g_method_return (context);
 }
 
+void
+thumbnailer_cleanup (Thumbnailer *object, gchar *uri_match, guint64 mtime, DBusGMethodInvocation *context)
+{
+	hildon_thumbnail_outplugins_cleanup (uri_match, mtime);
+}
+
 static void
 thumbnailer_finalize (GObject *object)
 {

Modified: projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.h
===================================================================
--- projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.h	2008-11-18 12:20:51 UTC (rev 16729)
+++ projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.h	2008-11-18 12:21:03 UTC (rev 16730)
@@ -62,6 +62,7 @@
 void thumbnailer_move (Thumbnailer *object, GStrv from_urls, GStrv to_urls, DBusGMethodInvocation *context);
 void thumbnailer_copy (Thumbnailer *object, GStrv from_urls, GStrv to_urls, DBusGMethodInvocation *context);
 void thumbnailer_delete (Thumbnailer *object, GStrv urls, DBusGMethodInvocation *context);
+void thumbnailer_cleanup (Thumbnailer *object, gchar *uri_match, guint64 mtime, DBusGMethodInvocation *context);
 
 void thumbnailer_register_plugin (Thumbnailer *object, const gchar *mime_type, GModule *plugin, const GStrv uri_schemes, gint priority);
 void thumbnailer_unregister_plugin (Thumbnailer *object, GModule *plugin);

Modified: projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.xml
===================================================================
--- projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.xml	2008-11-18 12:20:51 UTC (rev 16729)
+++ projects/haf/trunk/hildon-thumbnail/daemon/thumbnailer.xml	2008-11-18 12:21:03 UTC (rev 16730)
@@ -51,5 +51,11 @@
       <arg type="as" name="uris" direction="in" />
     </method>
 
+    <method name="Cleanup">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
+      <arg type="s" name="uri_match" direction="in" />
+      <arg type="x" name="max_mtime" direction="in" />
+    </method>
+
   </interface>
 </node>


More information about the maemo-commits mailing list