[gthumb] Ignore non-dcim sub-folders when importing from a specified folder
- From: Michael J. Chudobiak <mjc src gnome org>
- To: svn-commits-list gnome org
- Subject: [gthumb] Ignore non-dcim sub-folders when importing from a specified folder
- Date: Mon, 8 Jun 2009 08:17:53 -0400 (EDT)
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]