[maemo-commits] [maemo-commits] r16730 - in projects/haf/trunk/hildon-thumbnail: . daemon daemon/plugins
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Tue Nov 18 14:21:09 EET 2008
- Previous message: [maemo-commits] r16729 - projects/haf/trunk/hildon-thumbnail/debian
- Next message: [maemo-commits] r16731 - projects/haf/trunk/hildon-thumbnail/daemon/plugins
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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>
- Previous message: [maemo-commits] r16729 - projects/haf/trunk/hildon-thumbnail/debian
- Next message: [maemo-commits] r16731 - projects/haf/trunk/hildon-thumbnail/daemon/plugins
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]