[gthumb] Ignore non-dcim sub-folders when importing from a specified folder



commit 084e0f6dde6c9cf90e0f07e0ac8ebed2a1539502
Author: Michael J. Chudobiak <mjc avtechpulse com>
Date:   Mon Jun 8 08:17:00 2009 -0400

    Ignore non-dcim sub-folders when importing from a specified folder
---
 src/dlg-photo-importer.c            |   38 +++++++++++++++++++++++++---------
 src/dlg-photo-importer.h            |    4 ++-
 src/gth-application.c               |    2 +-
 src/gth-browser-actions-callbacks.c |    2 +-
 src/main.c                          |    2 +-
 5 files changed, 34 insertions(+), 14 deletions(-)

diff --git a/src/dlg-photo-importer.c b/src/dlg-photo-importer.c
index 44c2fe1..abfcfa3 100644
--- a/src/dlg-photo-importer.c
+++ b/src/dlg-photo-importer.c
@@ -127,6 +127,7 @@ struct _DialogData {
 	AsyncOperationData  *aodata;
 
 	GList               *dcim_dirs;
+	gboolean	     dcim_dirs_only;
 	char		    *uri;
 };
 
@@ -419,15 +420,20 @@ display_error_dialog (DialogData *data,
 }
 
 
+#define RECURSION_LIMIT 3
+
 static GList *
 gfile_import_dir_list_recursive (GFile      *gfile,
 				 GList      *dcim_dirs,
-				 const char *filter)
+				 const char *filter,
+				 int         n)
 {
         GFileEnumerator *file_enum;
         GFileInfo       *info;
 	GError		*error = NULL;
 
+	n++; 
+
         file_enum = g_file_enumerate_children (gfile,
                                                G_FILE_ATTRIBUTE_STANDARD_NAME ","
                                                G_FILE_ATTRIBUTE_STANDARD_TYPE,
@@ -448,17 +454,19 @@ gfile_import_dir_list_recursive (GFile      *gfile,
                 child = g_file_get_child (gfile, g_file_info_get_name (info));
 		utf8_path = g_file_get_parse_name (child);
 
+		debug (DEBUG_INFO, "Scanning directory %s, recursion level %d", utf8_path, n);
+
                 switch (g_file_info_get_file_type (info)) {
                 case G_FILE_TYPE_DIRECTORY:
-			if (!filter ||
-			    (filter && strstr (utf8_path, filter))) {
+			if (!(n > RECURSION_LIMIT) &&
+			   (!filter || (filter && strstr (utf8_path, filter)))) {
 				if (strstr (utf8_path, "dcim") || strstr (utf8_path, "DCIM")) {
 					debug (DEBUG_INFO, "found DCIM dir at %s", utf8_path);
 	        	        	dcim_dirs = g_list_prepend (dcim_dirs, g_file_dup (child));
 				} else {
 					debug (DEBUG_INFO, "no DCIM dir at %s", utf8_path);
 					if (utf8_path[0] != '.') {
-						dcim_dirs = gfile_import_dir_list_recursive (child, dcim_dirs, filter);
+						dcim_dirs = gfile_import_dir_list_recursive (child, dcim_dirs, filter, n);
 					}
 				}
 			} else {
@@ -545,8 +553,8 @@ get_all_files (DialogData *data)
 		data->dcim_dirs = NULL;
 	}
 
-	if (data->uri && !path_exists (data->uri)) {
-		display_error_dialog (data, _("Import path not found"), _("Scanning for attached devices"));
+	if (data->uri && !path_is_dir (data->uri)) {
+		_gtk_info_dialog_run (GTK_WINDOW (data->dialog), _("%s is not a valid directory, scanning for attached devices instead"), data->uri);
 		g_free (data->uri);
 		data->uri = NULL;
 	}
@@ -554,15 +562,22 @@ get_all_files (DialogData *data)
 	if (data->uri == NULL) {
 		char *gvfs_dir = g_strconcat (g_get_home_dir (), "/", ".gvfs", NULL);
 		GFile *gfile = gfile_new (gvfs_dir);
-		data->dcim_dirs = gfile_import_dir_list_recursive (gfile, data->dcim_dirs, "gphoto");
+		data->dcim_dirs = gfile_import_dir_list_recursive (gfile, data->dcim_dirs, "gphoto", 0);
 		g_object_unref (gfile);
 		g_free (gvfs_dir);
 
                 gfile = gfile_new ("/media");
-                data->dcim_dirs = gfile_import_dir_list_recursive (gfile, data->dcim_dirs, NULL);
+                data->dcim_dirs = gfile_import_dir_list_recursive (gfile, data->dcim_dirs, NULL, 0);
                 g_object_unref (gfile);
 	} else {
-		data->dcim_dirs = g_list_prepend (data->dcim_dirs, gfile_new (data->uri));
+		if (data->dcim_dirs_only) {
+			gfile = gfile_new (data->uri);
+			data->dcim_dirs = gfile_import_dir_list_recursive (gfile, data->dcim_dirs, NULL, 0);
+	                g_object_unref (gfile);
+		} else {
+			data->dcim_dirs = g_list_prepend (data->dcim_dirs, gfile_new (data->uri));
+			}
+		
 	}
 
 	for (scan = data->dcim_dirs; scan; scan = scan->next) {
@@ -1526,7 +1541,9 @@ help_cb (GtkWidget  *widget,
 
 
 void
-dlg_photo_importer (GthBrowser *browser, const char *uri)
+dlg_photo_importer (GthBrowser *browser,
+		    const char *uri,
+		    gboolean    dcim_dirs_only)
 {
 	DialogData *data;
 	GtkWidget  *btn_cancel;
@@ -1555,6 +1572,7 @@ dlg_photo_importer (GthBrowser *browser, const char *uri)
 	data->msg_text  = NULL;
 
 	data->dcim_dirs = NULL;
+	data->dcim_dirs_only = dcim_dirs_only;
 	data->uri = g_strdup (uri);
 
 	/* Get the widgets. */
diff --git a/src/dlg-photo-importer.h b/src/dlg-photo-importer.h
index caf05b6..9c18486 100644
--- a/src/dlg-photo-importer.h
+++ b/src/dlg-photo-importer.h
@@ -25,6 +25,8 @@
 
 #include "gth-browser.h"
 
-void   dlg_photo_importer (GthBrowser *browser, const char *uri);
+void   dlg_photo_importer (GthBrowser *browser,
+			   const char *uri,
+			   gboolean    dcim_dirs_only);
 
 #endif /* DLG_PHOTO_IMPORTER_H */
diff --git a/src/gth-application.c b/src/gth-application.c
index db60ce8..ba8a985 100644
--- a/src/gth-application.c
+++ b/src/gth-application.c
@@ -165,7 +165,7 @@ impl_gth_application_import_photos (PortableServer_Servant  _servant,
 				    CORBA_Environment      *ev)
 {
 	gth_browser_activate_action_file_camera_import (NULL, NULL);
-	dlg_photo_importer (NULL, uri);
+	dlg_photo_importer (NULL, uri, TRUE);
 }
 
 
diff --git a/src/gth-browser-actions-callbacks.c b/src/gth-browser-actions-callbacks.c
index c6ba9d1..7d74666 100644
--- a/src/gth-browser-actions-callbacks.c
+++ b/src/gth-browser-actions-callbacks.c
@@ -126,7 +126,7 @@ void
 gth_browser_activate_action_file_camera_import (GtkAction  *action,
 						GthBrowser *browser)
 {
-        dlg_photo_importer (browser, NULL);
+        dlg_photo_importer (browser, NULL, TRUE);
 }
 
 
diff --git a/src/main.c b/src/main.c
index f727399..64a860d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -644,7 +644,7 @@ prepare_app (void)
 		if (use_factory)
 		 	GNOME_GThumb_Application_import_photos (app, import_dir, &env);
 		else
-			dlg_photo_importer (NULL, import_dir);
+			dlg_photo_importer (NULL, import_dir, TRUE);
 	} 
 	else if (! view_comline_catalog
 		 && (n_dir_urls == 0)



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