file-roller r2200 - in trunk: . src
- From: paobac svn gnome org
- To: svn-commits-list gnome org
- Subject: file-roller r2200 - in trunk: . src
- Date: Sun, 30 Mar 2008 16:19:06 +0100 (BST)
Author: paobac
Date: Sun Mar 30 16:19:06 2008
New Revision: 2200
URL: http://svn.gnome.org/viewvc/file-roller?rev=2200&view=rev
Log:
2008-03-30 Paolo Bacchilega <paobac svn gnome org>
* src/gio-utils.h:
* src/fr-archive.c (copy_remote_files):
Use gio to copy the remote files in a local temp dir.
Modified:
trunk/ChangeLog
trunk/src/fr-archive.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 16:19:06 2008
@@ -126,9 +126,6 @@
FakeLoadFunc add_is_stoppable_func; /* Returns whether the add operation is
* stoppable. */
gpointer add_is_stoppable_data;
- GnomeVFSAsyncHandle *xfer_handle;
-/* FIXME
- VisitDirHandle *vd_handle; */
GCancellable *cancellable;
char *temp_dir;
gboolean continue_adding_dropped_items;
@@ -302,25 +299,10 @@
void
fr_archive_stop (FrArchive *archive)
{
- if (archive->process != NULL)
+ if (archive->process != NULL) {
fr_process_stop (archive->process);
-
- if (archive->priv->xfer_handle != NULL) {
- gnome_vfs_async_cancel (archive->priv->xfer_handle);
- archive->priv->xfer_handle = NULL;
- }
-
-/*FIXME
- if (archive->priv->vd_handle != NULL) {
- visit_dir_async_interrupt (archive->priv->vd_handle, NULL, NULL);
- archive->priv->vd_handle = NULL;
-
- fr_archive_action_completed (archive,
- FR_ACTION_GETTING_FILE_LIST,
- FR_PROC_ERROR_STOPPED,
- NULL);
+ return;
}
-*/
if (! g_cancellable_is_cancelled (archive->priv->cancellable))
g_cancellable_cancel (archive->priv->cancellable);
@@ -857,25 +839,6 @@
static void
-fr_archive_copy__error (FrArchive *archive,
- FRAction action,
- GnomeVFSResult result)
-{
- FRProcErrorType error_type;
- const char *details = NULL;
-
- archive->priv->xfer_handle = NULL;
-
- error_type = FR_PROC_ERROR_NONE;
- if (result != GNOME_VFS_OK) {
- error_type = FR_PROC_ERROR_GENERIC;
- details = gnome_vfs_result_to_string (result);
- }
- fr_archive_action_completed (archive, action, error_type, details);
-}
-
-
-static void
fr_archive_copy_done (FrArchive *archive,
FRAction action,
GError *error)
@@ -1786,23 +1749,16 @@
static void
-copy_remote_files__step2 (XferData *xfer_data)
+copy_remote_files_done (GError *error,
+ gpointer user_data)
{
- FrArchive *archive = xfer_data->archive;
-
- if (xfer_data->result != GNOME_VFS_OK) {
- fr_archive_action_completed (archive,
- FR_ACTION_COPYING_FILES_FROM_REMOTE,
- FR_PROC_ERROR_GENERIC,
- gnome_vfs_result_to_string (xfer_data->result));
- return;
- }
-
- fr_archive_action_completed (archive,
- FR_ACTION_COPYING_FILES_FROM_REMOTE,
- FR_PROC_ERROR_NONE,
- NULL);
-
+ XferData *xfer_data = user_data;
+
+ fr_archive_copy_done (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,
@@ -1813,29 +1769,21 @@
}
-static gint
-copy_remote_files_progress_update_cb (GnomeVFSAsyncHandle *handle,
- GnomeVFSXferProgressInfo *info,
- gpointer user_data)
+static void
+copy_remote_files_progress (goffset current_file,
+ goffset total_files,
+ GFile *source,
+ GFile *destination,
+ goffset current_num_bytes,
+ goffset total_num_bytes,
+ gpointer user_data)
{
XferData *xfer_data = user_data;
-
- if (info->status != GNOME_VFS_XFER_PROGRESS_STATUS_OK) {
- xfer_data->result = info->vfs_status;
- return FALSE;
- }
- else if (info->phase == GNOME_VFS_XFER_PHASE_COMPLETED) {
- copy_remote_files__step2 (xfer_data);
- xfer_data_free (xfer_data);
- }
- else if ((info->phase == GNOME_VFS_XFER_PHASE_COPYING)
- || (info->phase == GNOME_VFS_XFER_PHASE_MOVING))
- g_signal_emit (G_OBJECT (xfer_data->archive),
- fr_archive_signals[PROGRESS],
- 0,
- (double) info->total_bytes_copied / info->bytes_total);
-
- return TRUE;
+
+ g_signal_emit (G_OBJECT (xfer_data->archive),
+ fr_archive_signals[PROGRESS],
+ 0,
+ (double) current_file / total_files + 1);
}
@@ -1849,26 +1797,16 @@
FRCompression compression,
const char *tmp_dir)
{
- GList *source_uri_list = NULL;
- GList *target_uri_list = NULL;
- GnomeVFSURI *source_uri;
- GnomeVFSURI *target_uri;
- GList *scan;
- XferData *xfer_data;
- GnomeVFSResult result;
- GHashTable *created_folders;
-
- if (archive->priv->xfer_handle != NULL)
- gnome_vfs_async_cancel (archive->priv->xfer_handle);
-
+ GList *sources = NULL, *destinations = NULL;
+ GHashTable *created_folders;
+ GList *scan;
+
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 *remote_uri;
- char *local_uri;
- char *local_folder_uri;
-
+ char *partial_filename = scan->data;
+ char *local_uri;
+ char *local_folder_uri;
+
local_uri = g_strconcat ("file://", tmp_dir, "/", partial_filename, NULL);
local_folder_uri = remove_level_from_path (local_uri);
@@ -1877,8 +1815,8 @@
if (result != GNOME_VFS_OK) {
g_free (local_folder_uri);
g_free (local_uri);
- gnome_vfs_uri_list_free (source_uri_list);
- gnome_vfs_uri_list_free (target_uri_list);
+ gio_file_list_free (sources);
+ gio_file_list_free (destinations);
g_hash_table_destroy (created_folders);
fr_archive_action_completed (archive,
@@ -1893,15 +1831,13 @@
else
g_free (local_folder_uri);
- target_uri = gnome_vfs_uri_new (local_uri);
-
remote_uri = g_strconcat (base_uri, "/", partial_filename, NULL);
- source_uri = gnome_vfs_uri_new (remote_uri);
+ sources = g_list_append (sources, g_file_new_for_uri (remote_uri));
+ g_free (remote_uri);
- source_uri_list = g_list_append (source_uri_list, source_uri);
- target_uri_list = g_list_append (target_uri_list, target_uri);
+ destinations = g_list_append (destinations, g_file_new_for_uri (local_uri));
+ g_free (local_uri);
}
-
g_hash_table_destroy (created_folders);
xfer_data = g_new0 (XferData, 1);
@@ -1914,37 +1850,24 @@
xfer_data->password = g_strdup (password);
xfer_data->compression = compression;
xfer_data->tmp_dir = g_strdup (tmp_dir);
- xfer_data->result = GNOME_VFS_OK;
g_signal_emit (G_OBJECT (archive),
fr_archive_signals[START],
0,
FR_ACTION_COPYING_FILES_FROM_REMOTE);
-
- result = gnome_vfs_async_xfer (&archive->priv->xfer_handle,
- source_uri_list,
- target_uri_list,
- GNOME_VFS_XFER_DEFAULT | GNOME_VFS_XFER_FOLLOW_LINKS,
- GNOME_VFS_XFER_ERROR_MODE_ABORT,
- GNOME_VFS_XFER_OVERWRITE_MODE_REPLACE,
- GNOME_VFS_PRIORITY_DEFAULT,
- copy_remote_files_progress_update_cb, xfer_data,
- NULL, NULL);
-
- if (result != GNOME_VFS_OK) {
- fr_archive_action_completed (archive,
- FR_ACTION_COPYING_FILES_FROM_REMOTE,
- FR_PROC_ERROR_GENERIC,
- gnome_vfs_result_to_string (result));
- xfer_data_free (xfer_data);
- }
-
- gnome_vfs_uri_list_free (source_uri_list);
- gnome_vfs_uri_list_free (target_uri_list);
-
- /**/
+ g_copy_files_async (sources,
+ destinations,
+ G_FILE_COPY_OVERWRITE,
+ G_PRIORITY_DEFAULT,
+ archive->priv->cancellable,
+ copy_remote_files_progress,
+ xfer_data,
+ copy_remote_files_done,
+ xfer_data);
+ gio_file_list_free (sources);
+ gio_file_list_free (destinations);
}
@@ -1969,7 +1892,6 @@
{
if (uri_is_local (base_dir)) {
char *local_dir = get_local_path_from_uri (base_dir);
-
fr_archive_add_local_files (archive,
file_list,
local_dir,
Modified: trunk/src/gio-utils.h
==============================================================================
--- trunk/src/gio-utils.h (original)
+++ trunk/src/gio-utils.h Sun Mar 30 16:19:06 2008
@@ -78,7 +78,7 @@
ListReadyCallback done_func,
gpointer done_data);
-/* asynchronous recursive copy functions */
+/* asynchronous copy functions */
void g_copy_files_async (GList *sources,
GList *destinations,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]