[gthumb] do not check if there is a thumbnail for thumbnail files



commit 587a76b76afe7877c1b593714ccf7284a8c52291
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Sat Feb 5 20:27:57 2011 +0100

    do not check if there is a thumbnail for thumbnail files
    
    [bug #635948]

 gthumb/gth-file-list.c    |   17 ++++++++++++++++-
 gthumb/gth-file-store.c   |    3 +--
 gthumb/gth-thumb-loader.c |   38 +++++++++++++++++++++++++++-----------
 3 files changed, 44 insertions(+), 14 deletions(-)
---
diff --git a/gthumb/gth-file-list.c b/gthumb/gth-file-list.c
index bf84db8..e04b8b8 100644
--- a/gthumb/gth-file-list.c
+++ b/gthumb/gth-file-list.c
@@ -990,11 +990,15 @@ gfl_add_files (GthFileList *file_list,
 {
 	GthFileStore *file_store;
 	GList        *scan;
+	char         *cache_base_uri;
 
 	file_store = (GthFileStore*) gth_file_view_get_model (GTH_FILE_VIEW (file_list->priv->view));
 
+	cache_base_uri = g_strconcat (get_home_uri (), "/.thumbnails", NULL);
 	for (scan = files; scan; scan = scan->next) {
 		GthFileData *file_data = scan->data;
+		char        *uri;
+		ThumbData   *thumb_data;
 		GIcon       *icon;
 		GdkPixbuf   *pixbuf = NULL;
 		GString     *metadata;
@@ -1005,9 +1009,16 @@ gfl_add_files (GthFileList *file_list,
 		if (g_hash_table_lookup (file_list->priv->thumb_data, file_data->file) != NULL)
 			continue;
 
+		uri = g_file_get_uri (file_data->file);
+
+		thumb_data = thumb_data_new ();
+		/* files in the .thumbnails directory are already thumbnails,
+		 * set them as created. */
+		thumb_data->thumb_created = _g_uri_parent_of_uri (cache_base_uri, uri);
+
 		g_hash_table_insert (file_list->priv->thumb_data,
 				     g_object_ref (file_data->file),
-				     thumb_data_new ());
+				     thumb_data);
 
 		icon = g_file_info_get_icon (file_data->info);
 		pixbuf = gth_icon_cache_get_pixbuf (file_list->priv->icon_cache, icon);
@@ -1022,7 +1033,10 @@ gfl_add_files (GthFileList *file_list,
 		g_string_free (metadata, TRUE);
 		if (pixbuf != NULL)
 			g_object_unref (pixbuf);
+
+		g_free (uri);
 	}
+	g_free (cache_base_uri);
 
 	gth_file_store_exec_add (file_store);
 	_gth_file_list_update_pane (file_list);
@@ -1049,6 +1063,7 @@ gfl_delete_files (GthFileList *file_list,
 	GList        *scan;
 
 	file_store = (GthFileStore*) gth_file_view_get_model (GTH_FILE_VIEW (file_list->priv->view));
+
 	for (scan = files; scan; scan = scan->next) {
 		GFile       *file = scan->data;
 		GtkTreeIter  iter;
diff --git a/gthumb/gth-file-store.c b/gthumb/gth-file-store.c
index 2072a74..834e1af 100644
--- a/gthumb/gth-file-store.c
+++ b/gthumb/gth-file-store.c
@@ -68,7 +68,6 @@ struct _GthFileStorePrivate
 	gboolean             load_thumbs;
 	GthTest             *filter;
 	GList               *queue;
-	int                  queue_size;
 	GthFileDataCompFunc  cmp_func;
 	gboolean             inverse_sort;
 	gboolean             update_filter;
@@ -164,7 +163,6 @@ _gth_file_store_clear_queue (GthFileStore *file_store)
 {
 	g_list_free (file_store->priv->queue);
 	file_store->priv->queue = NULL;
-	file_store->priv->queue_size = 0;
 }
 
 
@@ -1424,6 +1422,7 @@ gth_file_store_queue_add (GthFileStore *file_store,
 	_gth_file_row_set_metadata (row, metadata);
 	row->is_icon = is_icon;
 	row->checked = checked;
+
 	file_store->priv->queue = g_list_prepend (file_store->priv->queue, row);
 }
 
diff --git a/gthumb/gth-thumb-loader.c b/gthumb/gth-thumb-loader.c
index 123ab7e..350724f 100644
--- a/gthumb/gth-thumb-loader.c
+++ b/gthumb/gth-thumb-loader.c
@@ -481,6 +481,21 @@ cache_image_ready_cb (GObject      *source_object,
 
 
 static gboolean
+is_a_cache_file (const char *uri)
+{
+	char     *cache_base_uri;
+	gboolean  result;
+
+	cache_base_uri = g_strconcat (get_home_uri (), "/.thumbnails", NULL);
+	result = _g_uri_parent_of_uri (cache_base_uri, uri);
+
+	g_free (cache_base_uri);
+
+	return result;
+}
+
+
+static gboolean
 _gth_thumb_loader_save_to_cache (GthThumbLoader *self,
 				 GthFileData    *file_data,
 				 GdkPixbuf      *pixbuf)
@@ -496,18 +511,14 @@ _gth_thumb_loader_save_to_cache (GthThumbLoader *self,
 	uri = g_file_get_uri (file_data->file);
 
 	if (g_file_is_native (file_data->file)) {
-		char *cache_base_uri;
 
 		/* Do not save thumbnails from the user's thumbnail directory,
 		   or an endless loop of thumbnailing may be triggered. */
 
-		cache_base_uri = g_strconcat (get_home_uri (), "/.thumbnails", NULL);
-		if (_g_uri_parent_of_uri (cache_base_uri, uri)) {
-			g_free (cache_base_uri);
+		if (is_a_cache_file (uri)) {
 			g_free (uri);
 			return FALSE;
 		}
-		g_free (cache_base_uri);
 	}
 
 	cache_path = gnome_desktop_thumbnail_path_for_uri (uri, self->priv->thumb_size);
@@ -786,6 +797,7 @@ gth_thumb_loader_load (GthThumbLoader      *self,
 {
 	GSimpleAsyncResult *simple;
 	char               *cache_path;
+	char               *uri;
 	LoadData           *load_data;
 
 	simple = g_simple_async_result_new (G_OBJECT (self),
@@ -794,11 +806,15 @@ gth_thumb_loader_load (GthThumbLoader      *self,
 					    gth_thumb_loader_load);
 
 	cache_path = NULL;
-	if (self->priv->use_cache) {
-		char   *uri;
-		time_t  mtime;
 
-		uri = g_file_get_uri (file_data->file);
+	uri = g_file_get_uri (file_data->file);
+
+	if (is_a_cache_file (uri)) {
+		cache_path = g_file_get_path (file_data->file);
+	}
+	else if (self->priv->use_cache) {
+		time_t mtime;
+
 		mtime = gth_file_data_get_mtime (file_data);
 
 		if (gnome_desktop_thumbnail_factory_has_valid_failed_thumbnail (self->priv->thumb_factory, uri, mtime)) {
@@ -815,10 +831,10 @@ gth_thumb_loader_load (GthThumbLoader      *self,
 		}
 
 		cache_path = gnome_desktop_thumbnail_factory_lookup (self->priv->thumb_factory, uri, mtime);
-
-		g_free (uri);
 	}
 
+	g_free (uri);
+
 	if ((cache_path == NULL)
 	    && (self->priv->max_file_size > 0)
 	    && (g_file_info_get_size (file_data->info) > self->priv->max_file_size))



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]