source: trunk/third/gnome-vfs/test/test-xfer.c @ 15497

Revision 15497, 5.3 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r15496, which included commits to RCS files with non-trunk default branches.
Line 
1/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
2/* test-xfer.c - Test program for the xfer functions in the GNOME Virtual File
3   System.
4
5   Copyright (C) 1999 Free Software Foundation
6
7   The Gnome Library is free software; you can redistribute it and/or
8   modify it under the terms of the GNU Library General Public License as
9   published by the Free Software Foundation; either version 2 of the
10   License, or (at your option) any later version.
11
12   The Gnome Library is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15   Library General Public License for more details.
16
17   You should have received a copy of the GNU Library General Public
18   License along with the Gnome Library; see the file COPYING.LIB.  If not,
19   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20   Boston, MA 02111-1307, USA.
21
22   Author: Ettore Perazzoli <ettore@comm2000.it> */
23
24#ifdef HAVE_CONFIG_H
25#include <config.h>
26#endif
27
28#include <stdio.h>
29
30#include <gnome.h>
31
32#include "gnome-vfs.h"
33
34static int recursive = 0;
35static int remove_source = 0;
36
37struct poptOption options[] = {
38        POPT_AUTOHELP
39        {
40                "recursive",
41                'r',
42                POPT_ARG_NONE,
43                &recursive,
44                0,
45                "Copy directories recursively",
46                NULL
47        },
48        {
49                "delete-source",
50                'd',
51                POPT_ARG_NONE,
52                &remove_source,
53                0,
54                "Delete source files",
55                NULL
56        },
57        {
58                NULL,
59                0,
60                0,
61                NULL,
62                0,
63                NULL,
64                NULL
65        }
66};
67
68static void
69show_result (GnomeVFSResult result, const gchar *what)
70{
71        fprintf (stderr, "%s: %s\n", what, gnome_vfs_result_to_string (result));
72        if (result != GNOME_VFS_OK)
73                exit (1);
74}
75
76static gint
77xfer_progress_callback (GnomeVFSXferProgressInfo *info,
78                        gpointer data)
79{
80        switch (info->status) {
81        case GNOME_VFS_XFER_PROGRESS_STATUS_VFSERROR:
82                printf ("VFS Error: %s\n",
83                        gnome_vfs_result_to_string (info->vfs_status));
84                exit (1);
85                break;
86        case GNOME_VFS_XFER_PROGRESS_STATUS_OVERWRITE:
87                printf ("Overwriting `%s' with `%s'\n",
88                        info->target_name, info->source_name);
89                exit (1);
90                break;
91        case GNOME_VFS_XFER_PROGRESS_STATUS_OK:
92                printf ("Status: OK\n");
93                switch (info->phase) {
94                case GNOME_VFS_XFER_PHASE_INITIAL:
95                        printf ("Initial phase\n");
96                        return TRUE;
97                case GNOME_VFS_XFER_PHASE_COLLECTING:
98                        printf ("Collecting file list\n");
99                        return TRUE;
100                case GNOME_VFS_XFER_PHASE_READYTOGO:
101                        printf ("Ready to go!\n");
102                        return TRUE;
103                case GNOME_VFS_XFER_PHASE_OPENSOURCE:
104                        printf ("Opening source\n");
105                        return TRUE;
106                case GNOME_VFS_XFER_PHASE_OPENTARGET:
107                        printf ("Opening target\n");
108                        return TRUE;
109                case GNOME_VFS_XFER_PHASE_COPYING:
110                        printf ("Transferring `%s' to `%s' (file %ld/%ld, byte %ld/%ld in file, "
111                                "%" GNOME_VFS_SIZE_FORMAT_STR "/%" GNOME_VFS_SIZE_FORMAT_STR " total)\n",
112                                info->source_name,
113                                info->target_name,
114                                info->file_index,
115                                info->files_total,
116                                (glong) info->bytes_copied,
117                                (glong) info->file_size,
118                                info->total_bytes_copied,
119                                info->bytes_total);
120                        return TRUE;
121                case GNOME_VFS_XFER_PHASE_CLOSESOURCE:
122                        printf ("Closing source\n");
123                        return TRUE;
124                case GNOME_VFS_XFER_PHASE_CLOSETARGET:
125                        printf ("Closing target\n");
126                        return TRUE;
127                case GNOME_VFS_XFER_PHASE_FILECOMPLETED:
128                        printf ("Done with `%s' -> `%s', going next\n",
129                                info->source_name, info->target_name);
130                        return TRUE;
131                case GNOME_VFS_XFER_PHASE_COMPLETED:
132                        printf ("All done.\n");
133                        return TRUE;
134                default:
135                        printf ("Unexpected phase %d\n", info->phase);
136                        return TRUE; /* keep going anyway */
137                }
138        case GNOME_VFS_XFER_PROGRESS_STATUS_DUPLICATE:
139                break;
140        }
141
142        printf ("Boh!\n");
143        return FALSE;
144}
145
146int
147main (int argc, char **argv)
148{
149        const char **args;
150        poptContext popt_context;
151        GnomeVFSURI *src_uri, *dest_uri;
152        GList *src_uri_list, *dest_uri_list;
153        GnomeVFSResult result;
154        GnomeVFSXferOptions xfer_options;
155
156        if (! gnome_vfs_init ()) {
157                fprintf (stderr,
158                         "Cannot initialize the GNOME Virtual File System.\n");
159                return 1;
160        }
161
162        popt_context = poptGetContext ("test-directory", argc, argv,
163                                       options, 0);
164
165        while (poptGetNextOpt (popt_context) != -1)
166                ;
167
168        args = poptGetArgs (popt_context);
169        if (args == NULL || args[1] == NULL || args[2] != NULL) {
170                fprintf (stderr, "Usage: %s [<options>] <src> <target>\n",
171                         argv[0]);
172                return 1;
173        }
174
175        src_uri = gnome_vfs_uri_new (args[0]);
176        if (src_uri == NULL) {
177                fprintf (stderr, "%s: invalid URI\n", args[0]);
178                return 1;
179        }
180        dest_uri = gnome_vfs_uri_new (args[1]);
181        if (dest_uri == NULL) {
182                fprintf (stderr, "%s: invalid URI\n", args[1]);
183                return 1;
184        }
185
186        poptFreeContext (popt_context);
187
188
189        xfer_options = 0;
190        if (recursive) {
191                fprintf (stderr, "Warning: Recursive xfer of directories.\n");
192                xfer_options |= GNOME_VFS_XFER_RECURSIVE;
193        }
194        if (remove_source) {
195                fprintf (stderr, "Warning: Removing source files.\n");
196                xfer_options |= GNOME_VFS_XFER_REMOVESOURCE;
197        }
198
199        src_uri_list = g_list_append (NULL, src_uri);
200        dest_uri_list = g_list_append (NULL, dest_uri);
201        result = gnome_vfs_xfer_uri_list (src_uri_list, dest_uri_list,
202                                          xfer_options,
203                                          GNOME_VFS_XFER_ERROR_MODE_QUERY,
204                                          GNOME_VFS_XFER_OVERWRITE_MODE_QUERY,
205                                          xfer_progress_callback,
206                                          NULL);
207
208        show_result (result, "gnome_vfs_xfer");
209
210        gnome_vfs_uri_list_free (src_uri_list);
211        gnome_vfs_uri_list_free (dest_uri_list);
212
213        return 0;
214}
Note: See TracBrowser for help on using the repository browser.