[gthumb] ignore hidden files and directories when importing files



commit b0e0244aedf374b9b6e0734c96e0427a31462eef
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Sun Aug 1 11:15:07 2010 +0200

    ignore hidden files and directories when importing files
    
    [bug #624579]

 extensions/catalogs/gth-file-source-catalogs.c |    6 +--
 extensions/catalogs/gth-organize-task.c        |    3 +-
 extensions/change_date/gth-change-date-task.c  |    3 +-
 extensions/edit_metadata/dlg-edit-metadata.c   |    3 +-
 extensions/edit_metadata/gth-tag-task.c        |    3 +-
 extensions/facebook/facebook-service.c         |    3 +-
 extensions/flicker/flickr-service.c            |    3 +-
 extensions/image_rotation/gth-transform-task.c |    3 +-
 extensions/photo_importer/dlg-photo-importer.c |    4 +-
 extensions/photobucket/photobucket-service.c   |    3 +-
 extensions/picasaweb/picasa-web-service.c      |    3 +-
 extensions/rename_series/actions.c             |    7 +++-
 extensions/webalbums/gth-web-exporter.c        |    3 +-
 gthumb/gio-utils.c                             |   54 ++++++++++++++++-------
 gthumb/gio-utils.h                             |   11 ++++-
 gthumb/gth-browser.c                           |    3 +-
 gthumb/gth-file-source.c                       |    6 +--
 gthumb/gth-metadata-provider.c                 |    6 +--
 gthumb/gth-metadata-provider.h                 |    3 +-
 gthumb/gth-overwrite-dialog.c                  |    7 +++-
 gthumb/gth-pixbuf-list-task.c                  |    3 +-
 21 files changed, 79 insertions(+), 61 deletions(-)
---
diff --git a/extensions/catalogs/gth-file-source-catalogs.c b/extensions/catalogs/gth-file-source-catalogs.c
index f268c97..ca33772 100644
--- a/extensions/catalogs/gth-file-source-catalogs.c
+++ b/extensions/catalogs/gth-file-source-catalogs.c
@@ -401,8 +401,7 @@ gth_file_source_catalogs_read_metadata (GthFileSource *file_source,
 	gio_file = gth_catalog_file_to_gio_file (file_data->file);
 	files = g_list_prepend (NULL, gio_file);
 	_g_query_all_metadata_async (files,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     attributes,
 				     gth_file_source_get_cancellable (file_source),
 				     read_metadata_info_ready_cb,
@@ -796,8 +795,7 @@ gth_file_source_catalogs_copy (GthFileSource    *file_source,
 	}
 
 	_g_query_info_async (cod->file_list,
-			     FALSE,
-			     TRUE,
+			     GTH_LIST_DEFAULT,
 			     GFILE_NAME_TYPE_ATTRIBUTES,
 			     gth_file_source_get_cancellable (file_source),
 			     copy__file_list_info_ready_cb,
diff --git a/extensions/catalogs/gth-organize-task.c b/extensions/catalogs/gth-organize-task.c
index 3b07fbd..4db06d1 100644
--- a/extensions/catalogs/gth-organize-task.c
+++ b/extensions/catalogs/gth-organize-task.c
@@ -528,8 +528,7 @@ organization_treeview_selection_changed_cb (GtkTreeSelection *treeselection,
 
 		file_list = gth_catalog_get_file_list (catalog);
 		_g_query_info_async (file_list,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     GFILE_STANDARD_ATTRIBUTES_WITH_FAST_CONTENT_TYPE,
 				     NULL,
 				     file_list_info_ready_cb,
diff --git a/extensions/change_date/gth-change-date-task.c b/extensions/change_date/gth-change-date-task.c
index fa7462b..391f8b0 100644
--- a/extensions/change_date/gth-change-date-task.c
+++ b/extensions/change_date/gth-change-date-task.c
@@ -310,8 +310,7 @@ gth_change_date_task_exec (GthTask *task)
 	GthChangeDateTask *self = GTH_CHANGE_DATE_TASK (task);
 
 	_g_query_all_metadata_async (self->priv->files,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     "*",
 				     gth_task_get_cancellable (task),
 				     info_ready_cb,
diff --git a/extensions/edit_metadata/dlg-edit-metadata.c b/extensions/edit_metadata/dlg-edit-metadata.c
index f5655f5..b9e57d8 100644
--- a/extensions/edit_metadata/dlg-edit-metadata.c
+++ b/extensions/edit_metadata/dlg-edit-metadata.c
@@ -144,8 +144,7 @@ dlg_edit_metadata (GthBrowser *browser,
 	/* FIXME: progress dialog ? */
 
 	_g_query_all_metadata_async (data->files,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     "*",
 				     NULL,
 				     info_ready_cb,
diff --git a/extensions/edit_metadata/gth-tag-task.c b/extensions/edit_metadata/gth-tag-task.c
index 7b75fdc..498e012 100644
--- a/extensions/edit_metadata/gth-tag-task.c
+++ b/extensions/edit_metadata/gth-tag-task.c
@@ -130,8 +130,7 @@ gth_tag_task_exec (GthTask *task)
 
 	gth_task_progress (task, _("Assigning tags to the selected files"), _("Reading files"), TRUE, 0.0);
 	_g_query_all_metadata_async (self->priv->file_list,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     "*",
 				     NULL,
 				     info_ready_cb,
diff --git a/extensions/facebook/facebook-service.c b/extensions/facebook/facebook-service.c
index 39c54a9..5628126 100644
--- a/extensions/facebook/facebook-service.c
+++ b/extensions/facebook/facebook-service.c
@@ -896,8 +896,7 @@ facebook_service_upload_photos (FacebookService     *self,
 	self->priv->post_photos->n_files = 0;
 
 	_g_query_all_metadata_async (file_list,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     "*",
 				     self->priv->post_photos->cancellable,
 				     upload_photos_info_ready_cb,
diff --git a/extensions/flicker/flickr-service.c b/extensions/flicker/flickr-service.c
index a5258c6..e9cad70 100644
--- a/extensions/flicker/flickr-service.c
+++ b/extensions/flicker/flickr-service.c
@@ -927,8 +927,7 @@ flickr_service_post_photos (FlickrService       *self,
 	self->priv->post_photos->n_files = 0;
 
 	_g_query_all_metadata_async (file_list,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     "*",
 				     self->priv->post_photos->cancellable,
 				     post_photos_info_ready_cb,
diff --git a/extensions/image_rotation/gth-transform-task.c b/extensions/image_rotation/gth-transform-task.c
index 4756ea2..cc61e13 100644
--- a/extensions/image_rotation/gth-transform-task.c
+++ b/extensions/image_rotation/gth-transform-task.c
@@ -157,8 +157,7 @@ transform_current_file (GthTransformTask *self)
 	file = self->priv->current->data;
 	singleton = g_list_append (NULL, g_object_ref (file));
 	_g_query_all_metadata_async (singleton,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     "*",
 				     gth_task_get_cancellable (GTH_TASK (self)),
 				     file_info_ready_cb,
diff --git a/extensions/photo_importer/dlg-photo-importer.c b/extensions/photo_importer/dlg-photo-importer.c
index dcd8be2..ee847bb 100644
--- a/extensions/photo_importer/dlg-photo-importer.c
+++ b/extensions/photo_importer/dlg-photo-importer.c
@@ -317,8 +317,7 @@ list_source_files (gpointer user_data)
 	data->loading_list = TRUE;
 	list = g_list_prepend (NULL, data->source);
 	_g_query_all_metadata_async (list,
-				     TRUE,
-				     TRUE,
+				     GTH_LIST_RECURSIVE | GTH_LIST_NO_HIDDEN_FILES | GTH_LIST_NO_BACKUP_FILES,
 				     DEFINE_STANDARD_ATTRIBUTES (",preview::icon,standard::fast-content-type,gth::file::display-size"),
 				     data->cancellable,
 				     list_ready_cb,
@@ -474,6 +473,7 @@ preferences_button_clicked_cb (GtkWidget  *widget,
 	gtk_window_present (GTK_WINDOW (data->preferences_dialog));
 }
 
+
 void
 dlg_photo_importer (GthBrowser *browser,
 		    GFile      *source)
diff --git a/extensions/photobucket/photobucket-service.c b/extensions/photobucket/photobucket-service.c
index 4e97710..87f018b 100644
--- a/extensions/photobucket/photobucket-service.c
+++ b/extensions/photobucket/photobucket-service.c
@@ -618,8 +618,7 @@ photobucket_service_upload_photos (PhotobucketService  *self,
 	self->priv->post_photos->n_files = 0;
 
 	_g_query_all_metadata_async (file_list,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     "*",
 				     self->priv->post_photos->cancellable,
 				     upload_photos_info_ready_cb,
diff --git a/extensions/picasaweb/picasa-web-service.c b/extensions/picasaweb/picasa-web-service.c
index 8659119..bed3d42 100644
--- a/extensions/picasaweb/picasa-web-service.c
+++ b/extensions/picasaweb/picasa-web-service.c
@@ -609,8 +609,7 @@ picasa_web_service_post_photos (PicasaWebService    *self,
 	}
 
 	_g_query_all_metadata_async (file_list,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     "*",
 				     self->priv->post_photos->cancellable,
 				     post_photos_info_ready_cb,
diff --git a/extensions/rename_series/actions.c b/extensions/rename_series/actions.c
index 6cc9cab..4871a00 100644
--- a/extensions/rename_series/actions.c
+++ b/extensions/rename_series/actions.c
@@ -57,7 +57,12 @@ gth_browser_activate_action_edit_rename (GtkAction  *action,
 	file_data_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
 	file_list = gth_file_data_list_to_file_list (file_data_list);
 	g_object_ref (browser);
-	_g_query_all_metadata_async (file_list, FALSE, TRUE, "*", NULL, file_list_ready_cb, browser);
+	_g_query_all_metadata_async (file_list,
+				     GTH_LIST_DEFAULT,
+				     "*",
+				     NULL,
+				     file_list_ready_cb,
+				     browser);
 
 	_g_object_list_unref (file_list);
 	_g_object_list_unref (file_data_list);
diff --git a/extensions/webalbums/gth-web-exporter.c b/extensions/webalbums/gth-web-exporter.c
index ba92e3e..6bc7cdc 100644
--- a/extensions/webalbums/gth-web-exporter.c
+++ b/extensions/webalbums/gth-web-exporter.c
@@ -3072,8 +3072,7 @@ gth_web_exporter_exec (GthTask *task)
 		g_string_append (required_attributes, self->priv->sort_type->required_attributes);
 	}
 	_g_query_all_metadata_async (self->priv->gfile_list,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     required_attributes->str,
 				     gth_task_get_cancellable (GTH_TASK (self)),
 				     file_list_info_ready_cb,
diff --git a/gthumb/gio-utils.c b/gthumb/gio-utils.c
index 5c4afd0..b3368f0 100644
--- a/gthumb/gio-utils.c
+++ b/gthumb/gio-utils.c
@@ -882,8 +882,7 @@ g_directory_list_async (GFile             *directory,
 
 typedef struct {
 	GList             *file_list;
-	gboolean           recursive;
-	gboolean           follow_links;
+	GthListFlags       flags;
 	char              *attributes;
 	GCancellable      *cancellable;
 	InfoReadyCallback  callback;
@@ -938,8 +937,14 @@ query_data__for_each_file_cb (GFile     *file,
 {
 	QueryInfoData *query_data = user_data;
 
-	if (g_file_info_get_file_type (info) != G_FILE_TYPE_DIRECTORY)
-		query_data->files = g_list_prepend (query_data->files, gth_file_data_new (file, info));
+	if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
+		return;
+	if ((query_data->flags & GTH_LIST_NO_BACKUP_FILES) && g_file_info_get_is_backup (info))
+		return;
+	if ((query_data->flags & GTH_LIST_NO_HIDDEN_FILES) && g_file_info_get_is_hidden (info))
+		return;
+
+	query_data->files = g_list_prepend (query_data->files, gth_file_data_new (file, info));
 }
 
 
@@ -951,6 +956,11 @@ query_data__start_dir_cb (GFile       *directory,
 {
 	QueryInfoData *query_data = user_data;
 
+	if ((query_data->flags & GTH_LIST_NO_BACKUP_FILES) && g_file_info_get_is_backup (info))
+		return DIR_OP_SKIP;
+	if ((query_data->flags & GTH_LIST_NO_HIDDEN_FILES) && g_file_info_get_is_hidden (info))
+		return DIR_OP_SKIP;
+
 	query_data->files = g_list_prepend (query_data->files, gth_file_data_new (directory, info));
 
 	return DIR_OP_CONTINUE;
@@ -973,10 +983,10 @@ query_data_info_ready_cb (GObject      *source_object,
 		return;
 	}
 
-	if (query_data->recursive && (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)) {
+	if ((query_data->flags & GTH_LIST_RECURSIVE) && (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)) {
 		g_directory_foreach_child ((GFile *) query_data->current->data,
 					   TRUE,
-					   query_data->follow_links,
+					   (query_data->flags & GTH_LIST_NO_FOLLOW_LINKS) == 0,
 					   query_data->attributes,
 					   query_data->cancellable,
 					   query_data__start_dir_cb,
@@ -996,6 +1006,8 @@ query_data_info_ready_cb (GObject      *source_object,
 static void
 query_info__query_current (QueryInfoData *query_data)
 {
+	GFileQueryInfoFlags flags;
+
 	if (query_data->current == NULL) {
 		query_data->files = g_list_reverse (query_data->files);
 		query_data->callback (query_data->files, NULL, query_data->user_data);
@@ -1003,9 +1015,13 @@ query_info__query_current (QueryInfoData *query_data)
 		return;
 	}
 
+	flags = G_FILE_QUERY_INFO_NONE;
+	if (query_data->flags & GTH_LIST_NO_FOLLOW_LINKS)
+		flags |= G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS;
+
 	g_file_query_info_async ((GFile *) query_data->current->data,
 				 query_data->attributes,
-				 (query_data->follow_links ? G_FILE_QUERY_INFO_NONE : G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS),
+				 flags,
 				 G_PRIORITY_DEFAULT,
 				 query_data->cancellable,
 				 query_data_info_ready_cb,
@@ -1015,8 +1031,7 @@ query_info__query_current (QueryInfoData *query_data)
 
 void
 _g_query_info_async (GList             *file_list,
-		     gboolean           recursive,
-		     gboolean           follow_links,
+		     GthListFlags       flags,
 		     const char        *attributes,
 		     GCancellable      *cancellable,
 		     InfoReadyCallback  ready_callback,
@@ -1026,9 +1041,11 @@ _g_query_info_async (GList             *file_list,
 
 	query_data = g_new0 (QueryInfoData, 1);
 	query_data->file_list = _g_object_list_ref (file_list);
-	query_data->recursive = recursive;
-	query_data->follow_links = follow_links;
-	query_data->attributes = g_strconcat (attributes, ",standard::name,standard::type,id::file", NULL);
+	query_data->flags = flags;
+	query_data->attributes = g_strconcat ("standard::name,standard::type,standard::is-hidden,standard::is-backup,id::file",
+					      (((attributes != NULL) && (strcmp (attributes, "") != 0)) ? "," : NULL),
+					      attributes,
+					      NULL);
 	query_data->cancellable = _g_object_ref (cancellable);
 	query_data->callback = ready_callback;
 	query_data->user_data = user_data;
@@ -1723,8 +1740,7 @@ _g_copy_files_async (GList            *sources, /* GFile list */
 					      copy_data->progress_callback_data);
 
 	_g_query_info_async (sources,
-			     TRUE,
-			     TRUE,
+			     GTH_LIST_RECURSIVE,
 			     "standard::name,standard::display-name,standard::type,standard::size",
 			     copy_data->cancellable,
 			     copy_files__sources_info_ready_cb,
@@ -1876,7 +1892,8 @@ _g_delete_files_async (GList        *file_list,
 		       ReadyFunc     callback,
 		       gpointer      user_data)
 {
-	DeleteData *delete_data;
+	DeleteData   *delete_data;
+	GthListFlags  flags;
 
 	delete_data = g_new0 (DeleteData, 1);
 	delete_data->include_metadata = include_metadata;
@@ -1884,9 +1901,12 @@ _g_delete_files_async (GList        *file_list,
 	delete_data->callback = callback;
 	delete_data->user_data = user_data;
 
+	flags = GTH_LIST_NO_FOLLOW_LINKS;
+	if (recursive)
+		flags |= GTH_LIST_RECURSIVE;
+
 	_g_query_info_async (file_list,
-			     recursive,
-			     FALSE,
+			     flags,
 			     GFILE_NAME_TYPE_ATTRIBUTES,
 			     delete_data->cancellable,
 			     delete_files__info_ready_cb,
diff --git a/gthumb/gio-utils.h b/gthumb/gio-utils.h
index ca538b0..43f470c 100644
--- a/gthumb/gio-utils.h
+++ b/gthumb/gio-utils.h
@@ -39,6 +39,14 @@ typedef enum { /*< skip >*/
 	DIR_OP_STOP
 } DirOp;
 
+typedef enum {
+	GTH_LIST_DEFAULT = 0,
+	GTH_LIST_RECURSIVE = 1 << 0,
+	GTH_LIST_NO_FOLLOW_LINKS = 1 << 1,
+	GTH_LIST_NO_BACKUP_FILES = 1 << 2,
+	GTH_LIST_NO_HIDDEN_FILES = 1 << 3
+} GthListFlags;
+
 typedef DirOp (*StartDirCallback)    (GFile                *directory,
 				      GFileInfo            *info,
 				      GError              **error,
@@ -86,8 +94,7 @@ void   g_directory_list_async        (GFile                 *directory,
 				      ListReadyCallback      done_func,
 				      gpointer               done_data);
 void   _g_query_info_async           (GList                 *file_list,    /* GFile * list */
-				      gboolean               recursive,
-				      gboolean               follow_links,
+				      GthListFlags           flags,
 				      const char            *attributes,
 				      GCancellable          *cancellable,
 				      InfoReadyCallback      ready_callback,
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 9fb9f68..9c69f09 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -5180,8 +5180,7 @@ _gth_browser_load_file (GthBrowser  *browser,
 	data = load_file_data_new (browser, file_data, view);
 	files = g_list_prepend (NULL, data->file_data->file);
 	_g_query_all_metadata_async (files,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     "*",
 				     NULL,
 				     file_metadata_ready_cb,
diff --git a/gthumb/gth-file-source.c b/gthumb/gth-file-source.c
index 12f26e9..d60d01d 100644
--- a/gthumb/gth-file-source.c
+++ b/gthumb/gth-file-source.c
@@ -590,8 +590,7 @@ base_read_metadata (GthFileSource *file_source,
 
 	files = g_list_prepend (NULL, file_data->file);
 	_g_query_all_metadata_async (files,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     attributes,
 				     file_source->priv->cancellable,
 				     read_metadata_info_ready_cb,
@@ -1076,8 +1075,7 @@ gth_file_source_read_attributes (GthFileSource  *file_source,
 
 	gio_files = gth_file_source_to_gio_file_list (file_source, files);
 	_g_query_all_metadata_async (gio_files,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     attributes,
 				     file_source->priv->cancellable,
 				     metadata_ready_cb,
diff --git a/gthumb/gth-metadata-provider.c b/gthumb/gth-metadata-provider.c
index e8ebee4..50f7567 100644
--- a/gthumb/gth-metadata-provider.c
+++ b/gthumb/gth-metadata-provider.c
@@ -494,8 +494,7 @@ qam_info_ready_cb (GList    *files,
 
 void
 _g_query_all_metadata_async (GList             *files, /* GFile * list */
-			     gboolean           recursive,
-			     gboolean           follow_links,
+			     GthListFlags       flags,
 			     const char        *attributes,
 			     GCancellable      *cancellable,
 			     InfoReadyCallback  ready_func,
@@ -510,8 +509,7 @@ _g_query_all_metadata_async (GList             *files, /* GFile * list */
 	qam->user_data = user_data;
 
 	_g_query_info_async (files,
-			     recursive,
-			     follow_links,
+			     flags,
 			     qam->attributes,
 			     qam->cancellable,
 			     qam_info_ready_cb,
diff --git a/gthumb/gth-metadata-provider.h b/gthumb/gth-metadata-provider.h
index c77fdb9..e67d9eb 100644
--- a/gthumb/gth-metadata-provider.h
+++ b/gthumb/gth-metadata-provider.h
@@ -92,8 +92,7 @@ void       _g_write_metadata_async          (GList                  *files, /* G
 					     ReadyFunc               ready_func,
 					     gpointer                user_data);
 void       _g_query_all_metadata_async      (GList                  *files, /* GFile * list */
-					     gboolean                recursive,
-					     gboolean                follow_links,
+					     GthListFlags            flags,
 					     const char             *attributes,
 					     GCancellable           *cancellable,
 					     InfoReadyCallback       ready_func,
diff --git a/gthumb/gth-overwrite-dialog.c b/gthumb/gth-overwrite-dialog.c
index 70740d8..e36ea3c 100644
--- a/gthumb/gth-overwrite-dialog.c
+++ b/gthumb/gth-overwrite-dialog.c
@@ -318,7 +318,12 @@ gth_overwrite_dialog_construct (GthOverwriteDialog   *self,
 	if (self->priv->source != NULL)
 		files = g_list_append (files, self->priv->source);
 	files = g_list_append (files, self->priv->destination);
-	_g_query_all_metadata_async (files, FALSE, TRUE, "standard::*,time::modified,time::modified-usec,preview::icon", NULL, info_ready_cb, self);
+	_g_query_all_metadata_async (files,
+				     GTH_LIST_DEFAULT,
+				     "standard::*,time::modified,time::modified-usec,preview::icon",
+				     NULL,
+				     info_ready_cb,
+				     self);
 
 	g_list_free (files);
 }
diff --git a/gthumb/gth-pixbuf-list-task.c b/gthumb/gth-pixbuf-list-task.c
index 7be4c82..3fb0cfb 100644
--- a/gthumb/gth-pixbuf-list-task.c
+++ b/gthumb/gth-pixbuf-list-task.c
@@ -427,8 +427,7 @@ process_current_file (GthPixbufListTask *self)
 	source_file_data = self->priv->current->data;
 	source_singleton = g_list_append (NULL, g_object_ref (source_file_data->file));
 	_g_query_all_metadata_async (source_singleton,
-				     FALSE,
-				     TRUE,
+				     GTH_LIST_DEFAULT,
 				     "*",
 				     gth_task_get_cancellable (GTH_TASK (self)),
 				     file_info_ready_cb,



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