[gthumb/gthumb-2-10] Fixed import from camera if one photo is bad



commit 3c7d20b7022a0c4a6fb76500c20c7f836f66d899
Author: Marcel Stimberg <stimberg users sourceforge net>
Date:   Thu May 6 09:28:55 2010 +0200

    Fixed import from camera if one photo is bad
    
    [bug #521891]

 libgthumb/file-utils.c             |    2 +-
 src/dlg-photo-importer.c           |   58 ++++++++++++++++++++---------------
 src/gth-window-actions-callbacks.c |   54 ++++++++++++++++----------------
 3 files changed, 61 insertions(+), 53 deletions(-)
---
diff --git a/libgthumb/file-utils.c b/libgthumb/file-utils.c
index b4b2df5..22c3e92 100644
--- a/libgthumb/file-utils.c
+++ b/libgthumb/file-utils.c
@@ -2488,7 +2488,7 @@ get_temp_file_name (const char *tmpdir,
 
 	g_static_mutex_lock (&count_mutex);
 	if (ext != NULL)
-		name = g_strdup_printf ("%d%s", count++, ext);
+		name = g_strdup_printf ("%d.%s", count++, ext);
 	else
 		name = g_strdup_printf ("%d", count++);
 	g_static_mutex_unlock (&count_mutex);
diff --git a/src/dlg-photo-importer.c b/src/dlg-photo-importer.c
index 53a7ab2..ff4ba50 100644
--- a/src/dlg-photo-importer.c
+++ b/src/dlg-photo-importer.c
@@ -253,14 +253,14 @@ static void update_info (DialogData *data);
 static gboolean async_operation_step (gpointer callback_data);
 
 
-static void 
+static void
 async_operation_next_step (AsyncOperationData *aodata)
 {
 	aodata->current++;
 	aodata->scan = aodata->scan->next;
 	aodata->timer_id = g_timeout_add (ASYNC_STEP_TIMEOUT,
 					  async_operation_step,
-					  aodata);	
+					  aodata);
 }
 
 
@@ -810,18 +810,24 @@ load_images_preview__step (AsyncOperationData *aodata,
 
 	camera_folder = remove_level_from_path (camera_path);
 	camera_filename = file_name_from_path (camera_path);
-	gp_camera_file_get (data->camera,
-			    camera_folder,
-			    camera_filename,
-			    GP_FILE_TYPE_PREVIEW,
-			    file,
-			    data->context);
+	if (gp_camera_file_get (data->camera,
+	                        camera_folder,
+	                        camera_filename,
+	                        GP_FILE_TYPE_PREVIEW,
+	                        file,
+	                        data->context) < 0) {
+		/* clear error flag if thumbnail generation failed (e.g. for
+		 * movies), this should not stop the import*/
+		g_mutex_lock (data->data_mutex);
+		data->error = FALSE;
+		g_mutex_unlock (data->data_mutex);
+	}
 
 	tmp_dir = get_temp_dir_name ();
-	if (tmp_dir == NULL) 
+	if (tmp_dir == NULL)
 		/* should we display an error message here? */
 		return;
-	
+
 	tmp_filename = get_temp_file_name (tmp_dir, get_filename_extension (camera_filename));
 
 	if (gp_file_save (file, tmp_filename) >= 0) {
@@ -830,8 +836,10 @@ load_images_preview__step (AsyncOperationData *aodata,
 		FileData  *fdata;
 
 		tmp_file = file_data_new_from_local_path (tmp_filename);
-		file_data_update_mime_type (tmp_file, FALSE); /* FIXME: always slow mime type ? */
-		
+		/* fast mime type should even work for empty files (if thumbnail creation failed)
+		 * by using the extension*/
+		file_data_update_mime_type (tmp_file, TRUE);
+
 		pixbuf = gth_pixbuf_new_from_file (tmp_file, NULL, THUMB_SIZE, THUMB_SIZE, NULL);
 		if (pixbuf == NULL)
 			pixbuf = get_mime_type_icon (data, tmp_file);
@@ -842,7 +850,7 @@ load_images_preview__step (AsyncOperationData *aodata,
 						 camera_filename,
 						 NULL,
 						 fdata);
-						 
+
 		g_object_unref (pixbuf);
 		file_data_unref (tmp_file);
 		file_data_unref (fdata);
@@ -900,7 +908,7 @@ load_images_preview (DialogData *data)
 		gtk_widget_show (data->progress_info_box);
 		gtk_window_set_resizable (GTK_WINDOW (data->dialog), FALSE);
 		return;
-	} 
+	}
 	else {
 		gtk_widget_show (data->import_preview_box);
 		gtk_widget_hide (data->progress_info_box);
@@ -959,7 +967,7 @@ set_camera_model (DialogData *data,
 		_gtk_label_set_locale_text (GTK_LABEL (data->camera_model_label), model);
 		gtk_image_set_from_pixbuf (GTK_IMAGE (data->progress_camera_image), data->camera_present_pixbuf);
 		load_images_preview (data);
-	} 
+	}
 	else {
 		data->camera_setted = FALSE;
 		display_error_dialog (data,
@@ -1210,7 +1218,7 @@ get_file_name (DialogData *data,
 	if (data->keep_original_filename) {
 		file_name = g_strdup (file_name_from_path (camera_path));
 		/* set_lowercase (file_name); see #339291 */
-	} 
+	}
 	else {
 		char *s, *new_ext;
 
@@ -1246,7 +1254,7 @@ add_categories_to_image (DialogData *data,
 	CommentData *cdata;
 	GList       *scan;
 	char        *uri;
-	
+
 	if (data->categories_list == NULL)
 		return;
 
@@ -1262,7 +1270,7 @@ add_categories_to_image (DialogData *data,
 
 	comments_save_categories (uri, cdata);
 	comment_data_free (cdata);
-	
+
 	g_free (uri);
 }
 
@@ -1297,13 +1305,13 @@ save_image (DialogData *data,
 
 	local_path = get_cache_filename_from_uri (file_uri);
 	if ((local_path != NULL) && gp_file_save (file, local_path) >= 0) {
-		if (data->adjust_orientation) 
+		if (data->adjust_orientation)
 			data->adjust_orientation_list = g_list_prepend (data->adjust_orientation_list, g_strdup (file_uri));
 		if (data->delete_from_camera)
 			data->delete_list = g_list_prepend (data->delete_list, g_strdup (camera_path));
 		data->saved_images_list = g_list_prepend (data->saved_images_list, g_strdup (file_uri));
 		add_categories_to_image (data, local_path);
-	} 
+	}
 	else {
 		g_mutex_lock (data->data_mutex);
 		data->error = TRUE;
@@ -1401,7 +1409,7 @@ copy_images__step (AsyncOperationData *aodata,
 {
 	const char *uri = aodata->scan->data;
 	FileData   *file;
-	
+
 	file = file_data_new (uri, NULL);
 	update_file_from_cache (file, done_func, aodata);
 	file_data_unref (file);
@@ -1503,7 +1511,7 @@ adjust_orientation__done (AsyncOperationData *aodata,
 					    		    copy_images__step,
 					    		    copy_images__done,
 					    		    data);
-	async_operation_start (data->aodata);	
+	async_operation_start (data->aodata);
 }
 
 
@@ -1625,7 +1633,7 @@ ok_clicked_cb (GtkButton  *button,
 	}
 
 	sel_list = gth_image_list_get_selection (GTH_IMAGE_LIST (data->image_list));
-	if (sel_list == NULL) 
+	if (sel_list == NULL)
 		sel_list = gth_image_list_get_list (GTH_IMAGE_LIST (data->image_list));
 
 	if (sel_list != NULL) {
@@ -1911,7 +1919,7 @@ check_thread (gpointer cb_data)
 		default:
 			break;
 		}
-	} 
+	}
 	else	/* Add check again. */
 		data->check_id = g_timeout_add (REFRESH_RATE, check_thread, data);
 
@@ -2055,7 +2063,7 @@ dlg_photo_importer (GthBrowser *browser)
 	if ((default_path == NULL) || (*default_path == 0))
 		default_path = xdg_user_dir_lookup ("PICTURES");
 	default_uri = add_scheme_if_absent (default_path);
-		
+
 	gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (data->destination_filechooserbutton),
 					         default_uri);
 	g_free (default_path);
diff --git a/src/gth-window-actions-callbacks.c b/src/gth-window-actions-callbacks.c
index d279b72..9abb105 100644
--- a/src/gth-window-actions-callbacks.c
+++ b/src/gth-window-actions-callbacks.c
@@ -178,7 +178,7 @@ print_done_cb (gpointer data)
 	g_free (tmp_dir);
 
 	tmp_dir = remove_level_from_path (tmp_filename);
-	local_dir_remove_recursive (tmp_dir);	
+	local_dir_remove_recursive (tmp_dir);
 	g_free (tmp_dir);
 
 	g_free (tmp_filename);
@@ -206,9 +206,9 @@ gth_window_activate_action_file_print (GtkAction *action,
 
 		image_viewer = gth_window_get_image_viewer (window);
 		pixbuf = image_viewer_get_current_pixbuf (image_viewer);
-		if (pixbuf == NULL) 
+		if (pixbuf == NULL)
 			return;
-			
+
 		g_object_ref (pixbuf);
 		tmp_dir = get_temp_dir_name ();
 		if (tmp_dir == NULL) {
@@ -219,22 +219,22 @@ gth_window_activate_action_file_print (GtkAction *action,
 
 			return;
 		}
-			
-		tmp_filename = get_temp_file_name (tmp_dir, ".jpeg");
+
+		tmp_filename = get_temp_file_name (tmp_dir, "jpeg");
 		if (! _gdk_pixbuf_save (pixbuf,
 					tmp_filename,
 					"jpeg",
 					&error,
-					NULL)) 
+					NULL))
 		{
 			_gtk_error_dialog_from_gerror_run (GTK_WINDOW (window), &error);
 			local_dir_remove_recursive (tmp_dir);
 
-			g_object_unref (pixbuf);				
+			g_object_unref (pixbuf);
 			g_free (tmp_filename);
 			g_free (tmp_dir);
 			file_data_list_free (list);
-				
+
 			return;
 		}
 
@@ -244,7 +244,7 @@ gth_window_activate_action_file_print (GtkAction *action,
 		current = file_data_list_find_path (list, image_filename);
 		if (current != NULL) {
 			FileData *fd;
-					
+
 			fd = file_data_dup (current->data);
 			g_free (fd->path);
 			fd->path =  get_uri_from_local_path (tmp_filename);
@@ -253,7 +253,7 @@ gth_window_activate_action_file_print (GtkAction *action,
 
 		print_catalog_dlg_full (GTK_WINDOW (window), list, print_done_cb, get_uri_from_local_path (tmp_filename));
 
-		g_free (tmp_filename);		
+		g_free (tmp_filename);
 		g_free (tmp_dir);
 	}
 	else
@@ -648,9 +648,9 @@ typedef struct {
 } SetWallpaperData;
 
 
-static void 
-set_wallpaper_step_2 (const char     *uri, 
-		      GnomeVFSResult  result, 
+static void
+set_wallpaper_step_2 (const char     *uri,
+		      GnomeVFSResult  result,
 		      gpointer        callback_data)
 {
 	SetWallpaperData *data = callback_data;
@@ -667,14 +667,14 @@ set_wallpaper_step_2 (const char     *uri,
 
 	if (path_is_file (uri)) {
 		char *image_path;
-		
+
 		image_path = get_local_path_from_uri (uri);
 		gconf_client_set_string (client,
 					 "/desktop/gnome/background/picture_filename",
 					 image_path,
 					 NULL);
 		g_free (image_path);
-		
+
 		switch (data->align) {
 		case WALLPAPER_ALIGN_TILED:
 			options = "wallpaper";
@@ -699,8 +699,8 @@ set_wallpaper_step_2 (const char     *uri,
 				 options,
 				 NULL);
         g_object_unref (G_OBJECT (client));
-        
-	g_free (data);	
+
+	g_free (data);
 }
 
 
@@ -722,10 +722,10 @@ get_wallpaper_filename (int n)
 
 
 static char *
-get_new_wallpaper_filename (void) 
+get_new_wallpaper_filename (void)
 {
 	char *wallpaper_filename;
-	
+
 	wallpaper_filename = get_wallpaper_filename (1);
 	if (path_is_file (wallpaper_filename)) {
 		/* Use a new filename to force an update. */
@@ -735,7 +735,7 @@ get_new_wallpaper_filename (void)
 		if (path_is_file (wallpaper_filename))
 			file_unlink (wallpaper_filename);
 	}
-	
+
 	return 	wallpaper_filename;
 }
 
@@ -746,16 +746,16 @@ set_wallpaper (GthWindow      *window,
 	       WallpaperAlign  align)
 {
 	SetWallpaperData *data;
-	
+
 	data = g_new0 (SetWallpaperData, 1);
 	data->window = window;
 	data->align = align;
-	
+
 	if (is_local_file (image_path))
 		set_wallpaper_step_2 (image_path, GNOME_VFS_OK, data);
 	else {
 		char *wallpaper_filename;
-		
+
 		wallpaper_filename = get_new_wallpaper_filename ();
 		copy_file_async (image_path, wallpaper_filename, set_wallpaper_step_2, data);
 		g_free (wallpaper_filename);
@@ -773,7 +773,7 @@ set_wallpaper_from_window (GthWindow      *window,
 		const char *filename = gth_window_get_image_filename (window);
 		if (filename != NULL)
 			image_path = g_strdup (filename);
-	} 
+	}
 	else {
 		ImageViewer *image_viewer;
 		GdkPixbuf   *pixbuf;
@@ -794,17 +794,17 @@ set_wallpaper_from_window (GthWindow      *window,
 					local_file,
 					"jpeg",
 					&error,
-					NULL)) 
+					NULL))
 		{
 			_gtk_error_dialog_from_gerror_run (GTK_WINDOW (window), &error);
 			g_object_unref (pixbuf);
-			g_free (local_file);			
+			g_free (local_file);
 			g_free (wallpaper_filename);
 			return;
 		}
 
 		image_path = wallpaper_filename;
-		
+
 		g_object_unref (pixbuf);
 		g_free (local_file);
 	}



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