file-roller r2201 - in trunk: . src



Author: paobac
Date: Sun Mar 30 17:59:27 2008
New Revision: 2201
URL: http://svn.gnome.org/viewvc/file-roller?rev=2201&view=rev

Log:
2008-03-30  Paolo Bacchilega  <paobac svn gnome org>

	* src/gio-utils.h: 
	* src/gio-utils.c: 
	* src/fr-archive.c:
	
	Fixed remote copy of files to be added to the archive.


Modified:
   trunk/ChangeLog
   trunk/src/fr-archive.c
   trunk/src/gio-utils.c
   trunk/src/gio-utils.h

Modified: trunk/src/fr-archive.c
==============================================================================
--- trunk/src/fr-archive.c	(original)
+++ trunk/src/fr-archive.c	Sun Mar 30 17:59:27 2008
@@ -1754,18 +1754,17 @@
 {
 	XferData *xfer_data = user_data;
 	
-	fr_archive_copy_done (archive, FR_ACTION_COPYING_FILES_FROM_REMOTE, error);
+	fr_archive_copy_done (xfer_data->archive, FR_ACTION_COPYING_FILES_FROM_REMOTE, error);
 	
-	if (error != NULL)
-		return;	
-		
-	fr_archive_add_local_files (xfer_data->archive,
-				    xfer_data->file_list,
-				    xfer_data->tmp_dir,
-				    xfer_data->dest_dir,
-				    FALSE,
-				    xfer_data->password,
-				    xfer_data->compression);
+	if (error == NULL) 		
+		fr_archive_add_local_files (xfer_data->archive,
+					    xfer_data->file_list,
+					    xfer_data->tmp_dir,
+					    xfer_data->dest_dir,
+					    FALSE,
+					    xfer_data->password,
+					    xfer_data->compression);
+	xfer_data_free (xfer_data);
 }
 
 
@@ -1783,7 +1782,7 @@
 	g_signal_emit (G_OBJECT (xfer_data->archive),
 		       fr_archive_signals[PROGRESS],
 		       0,
-		       (double) current_file / total_files + 1);
+		       (double) current_file / (total_files + 1));
 }
 
 
@@ -1800,18 +1799,19 @@
 	GList      *sources = NULL, *destinations = NULL;
 	GHashTable *created_folders;
 	GList      *scan;
+	XferData   *xfer_data;
 	
 	created_folders = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify) g_free, NULL);
 	for (scan = file_list; scan; scan = scan->next) {
 		char  *partial_filename = scan->data;
 		char  *local_uri;
 		char  *local_folder_uri;
+		char  *remote_uri;
 		
 		local_uri = g_strconcat ("file://", tmp_dir, "/", partial_filename, NULL);
-
 		local_folder_uri = remove_level_from_path (local_uri);
 		if (g_hash_table_lookup (created_folders, local_folder_uri) == NULL) {
-			result = make_tree (local_uri);
+			GnomeVFSResult result = make_tree (local_uri);
 			if (result != GNOME_VFS_OK) {
 				g_free (local_folder_uri);
 				g_free (local_uri);
@@ -2024,7 +2024,7 @@
 */
 					
 	g_directory_list_async (source_dir, 
-				NULL,
+				source_dir,
 				recursive,
 				follow_links,
 				NO_BACKUP_FILES,

Modified: trunk/src/gio-utils.c
==============================================================================
--- trunk/src/gio-utils.c	(original)
+++ trunk/src/gio-utils.c	Sun Mar 30 17:59:27 2008
@@ -200,7 +200,7 @@
 	if (fec->already_visited)
 		g_hash_table_destroy (fec->already_visited);
 	if (fec->to_visit != NULL)
-		path_list_free (fec->to_visit);
+		g_list_free (fec->to_visit);
 	if (fec->error != NULL)
 		g_error_free (fec->error);
 	g_free (fec);
@@ -263,17 +263,15 @@
 		uri = g_strconcat (current_directory, "/", name, NULL);
 
 		if (g_file_info_get_file_type (child_info) == G_FILE_TYPE_DIRECTORY) {
-			char *sub_directory;
-			
 			/* avoid to visit a directory more than ones */
 
-			sub_directory = g_strdup (uri);
-			if (g_hash_table_lookup (fec->already_visited, sub_directory) == NULL) {				
+			if (g_hash_table_lookup (fec->already_visited, uri) == NULL) {
+				char *sub_directory;	
+				
+				sub_directory = g_strdup (uri);
 				g_hash_table_insert (fec->already_visited, sub_directory, GINT_TO_POINTER (1));
 				fec->to_visit = g_list_append (fec->to_visit, sub_directory);
 			}
-			else
-				g_free (sub_directory);
 		}
 		
 		fec->for_each_file_func (uri, child_info, fec->user_data);
@@ -466,8 +464,11 @@
 {
 	GList *scan;
 	GList *dir_list = NULL;
-	int    base_dir_len = strlen (base_dir);
+	int    base_dir_len;
 	
+	if (base_dir == NULL)
+		base_dir = "";
+	base_dir_len = strlen (base_dir);
 	for (scan = files; scan; scan = scan->next) {
 		char *filename = scan->data;
 		char *dir_name;
@@ -509,7 +510,6 @@
 {
 	GetFileListData *gfl = user_data;
 	GHashTable      *h_dirs;
-	char            *dir;
 	GList           *scan;
 	
 	gfl->files = g_list_reverse (gfl->files);
@@ -520,20 +520,23 @@
 		gfl->dirs = NULL;
 	}
 
+	h_dirs = g_hash_table_new (g_str_hash, g_str_equal);
+
 	/* Always include the base directory, this way empty base 
  	 * directories are added to the archive as well.  */
 	
-	h_dirs = g_hash_table_new (g_str_hash, g_str_equal);
-	
-	dir = g_strdup (gfl->base_dir);
-	gfl->dirs = g_list_prepend (gfl->dirs, dir);
-	g_hash_table_insert (h_dirs, dir, GINT_TO_POINTER (1));
+	if (gfl->base_dir != NULL) {
+		char *dir;
+		
+		dir = g_strdup (gfl->base_dir);
+		gfl->dirs = g_list_prepend (gfl->dirs, dir);
+		g_hash_table_insert (h_dirs, dir, GINT_TO_POINTER (1));
+	}
 	
 	/* Add all the parent directories in gfl->files/gfl->dirs to the 
 	 * gfl->dirs list, the hash table is used to avoid duplicated 
 	 * entries. */
 	
-	h_dirs = g_hash_table_new (g_str_hash, g_str_equal);
 	for (scan = gfl->dirs; scan; scan = scan->next)
 		g_hash_table_insert (h_dirs, (char*)scan->data, GINT_TO_POINTER (1));
 	
@@ -592,7 +595,7 @@
 
 
 void
-g_directory_list_async (const char            *directory, 
+g_directory_list_async (const char           *directory, 
 		       const char            *base_dir,
 		       gboolean               recursive,
 		       gboolean               follow_links,
@@ -932,10 +935,10 @@
 		   gpointer               user_data)
 {
 	GList *source_files;
-	GList *source_files;
+	GList *destination_files;
 	
 	source_files = g_list_append (NULL, (gpointer)source);
-	source_files = g_list_append (NULL, (gpointer)destination);
+	destination_files = g_list_append (NULL, (gpointer)destination);
 	
 	g_copy_files_async (source_files, 
 			    destination_files, 
@@ -1050,8 +1053,8 @@
 
 
 typedef struct {
-	GFile                 *source;
-	GFile                 *destination;
+	char                  *source;
+	char                  *destination;
 	GFileCopyFlags         flags;
 	int                    io_priority;
 	GCancellable          *cancellable;
@@ -1061,8 +1064,6 @@
 	gpointer               user_data;
 	GError                *error;
 	
-	char                  *source_uri;
-	char                  *destination_uri;
 	GList                 *to_copy;
 	GList                 *current;
 	GFile                 *current_source;
@@ -1076,11 +1077,9 @@
 {
 	if (dcd == NULL)
 		return;
-	g_object_unref (dcd->source);
-	g_object_unref (dcd->destination);
-	g_object_unref (dcd->cancellable);
-	g_free (dcd->source_uri);
-	g_free (dcd->destination_uri);
+	
+	g_free (dcd->source);
+	g_free (dcd->destination);
 	if (dcd->current_source != NULL) {
 		g_object_unref (dcd->current_source);
 		dcd->current_source = NULL;
@@ -1091,6 +1090,7 @@
 	}
 	g_list_foreach (dcd->to_copy, (GFunc) child_data_free, NULL);
 	g_list_free (dcd->to_copy);
+	g_object_unref (dcd->cancellable);
 	g_free (dcd);
 }
 
@@ -1114,7 +1114,7 @@
 	char  *destination_uri;
 	GFile *destination_file;
 
-	destination_uri = g_strconcat (dcd->destination_uri, "/", uri + strlen (dcd->source_uri) + 1, NULL);
+	destination_uri = g_strconcat (dcd->destination, "/", uri + strlen (dcd->source) + 1, NULL);
 	destination_file = g_file_new_for_uri (destination_uri);
 	g_free (destination_uri);
 
@@ -1265,8 +1265,8 @@
 
 
 void
-g_directory_copy_async (GFile                 *source,
-		   	GFile                 *destination,
+g_directory_copy_async (const char            *source,
+			const char            *destination,
 			GFileCopyFlags         flags,
 			int                    io_priority,
 			GCancellable          *cancellable,
@@ -1279,25 +1279,22 @@
 	GFileInfo         *info;
 	
 	dcd = g_new0 (DirectoryCopyData, 1);
-	dcd->source = g_file_dup (source);
-	dcd->destination = g_file_dup (destination);
+	dcd->source = g_strdup (source);
+	dcd->destination = g_strdup (destination);
 	dcd->flags = flags;
 	dcd->io_priority = io_priority;
 	dcd->cancellable = cancellable;
 	dcd->progress_callback = progress_callback;
 	dcd->progress_callback_data = progress_callback_data;
 	dcd->callback = callback;
-	dcd->user_data = user_data;
-		
-	dcd->source_uri = g_file_get_uri (dcd->source);
-	dcd->destination_uri = g_file_get_uri (dcd->destination);	
+	dcd->user_data = user_data;	
 	
 	info = g_file_info_new ();
 	g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
-	dcd->to_copy = g_list_prepend (NULL, child_data_new (dcd->source_uri, info));
+	dcd->to_copy = g_list_prepend (NULL, child_data_new (dcd->source, info));
 	g_object_unref (info);
 	
-	g_directory_foreach_child (dcd->source_uri,
+	g_directory_foreach_child (dcd->source,
 			           TRUE,
 			           TRUE,
 			           dcd->cancellable,

Modified: trunk/src/gio-utils.h
==============================================================================
--- trunk/src/gio-utils.h	(original)
+++ trunk/src/gio-utils.h	Sun Mar 30 17:59:27 2008
@@ -116,8 +116,8 @@
 				      gpointer               progress_callback_data,
 				      CopyDoneCallback       callback,
 				      gpointer               user_data);		  
-void   g_directory_copy_async        (GFile                 *source,
-				      GFile                 *destination,
+void   g_directory_copy_async        (const char            *source,
+				      const char            *destination,
 				      GFileCopyFlags         flags,
 				      int                    io_priority,
 				      GCancellable          *cancellable,



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