aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog1
-rw-r--r--calendar/gui/component-factory.c187
2 files changed, 88 insertions, 100 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index c329229fa6..68f36658d2 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -19,7 +19,6 @@
* gui/e-calendar-table.c (e_calendar_table_init): use U_ for the
ECellCombo popdown strings, as it expects UTF-8 strings.
->>>>>>> 1.1185
2001-10-24 JP Rosevear <jpr@ximian.com>
* gui/e-meeting-time-sel.c (e_meeting_time_selector_construct):
diff --git a/calendar/gui/component-factory.c b/calendar/gui/component-factory.c
index bfa1a258bc..60d31590f3 100644
--- a/calendar/gui/component-factory.c
+++ b/calendar/gui/component-factory.c
@@ -321,6 +321,88 @@ remove_folder (EvolutionShellComponent *shell_component,
gnome_vfs_uri_unref (backup_uri);
}
+static GNOME_Evolution_ShellComponentListener_Result
+xfer_file (GnomeVFSURI *base_src_uri,
+ GnomeVFSURI *base_dest_uri,
+ const char *file_name,
+ int remove_source)
+{
+ GnomeVFSURI *src_uri, *dest_uri;
+ GnomeVFSHandle *hin, *hout;
+ GnomeVFSResult result;
+ GnomeVFSFileInfo file_info;
+ GnomeVFSFileSize size;
+ char *buffer;
+
+ src_uri = gnome_vfs_uri_append_file_name (base_src_uri, file_name);
+
+ result = gnome_vfs_open_uri (&hin, src_uri, GNOME_VFS_OPEN_READ);
+ if (result == GNOME_VFS_ERROR_NOT_FOUND) {
+ gnome_vfs_uri_unref (src_uri);
+ return GNOME_Evolution_ShellComponentListener_OK; /* No need to xfer anything. */
+ }
+ if (result != GNOME_VFS_OK) {
+ gnome_vfs_uri_unref (src_uri);
+ return GNOME_Evolution_ShellComponentListener_PERMISSION_DENIED;
+ }
+
+ result = gnome_vfs_get_file_info_uri (src_uri, &file_info, GNOME_VFS_FILE_INFO_DEFAULT);
+ if (result != GNOME_VFS_OK) {
+ gnome_vfs_uri_unref (src_uri);
+ return GNOME_Evolution_ShellComponentListener_PERMISSION_DENIED;
+ }
+
+ dest_uri = gnome_vfs_uri_append_file_name (base_dest_uri, file_name);
+
+ result = gnome_vfs_create_uri (&hout, dest_uri, GNOME_VFS_OPEN_WRITE, FALSE, 0600);
+ if (result != GNOME_VFS_OK) {
+ gnome_vfs_close (hin);
+ gnome_vfs_uri_unref (src_uri);
+ gnome_vfs_uri_unref (dest_uri);
+ return GNOME_Evolution_ShellComponentListener_PERMISSION_DENIED;
+ }
+
+ /* write source file to destination file */
+ buffer = g_malloc (file_info.size);
+ result = gnome_vfs_read (hin, buffer, file_info.size, &size);
+ if (result != GNOME_VFS_OK) {
+ gnome_vfs_close (hin);
+ gnome_vfs_close (hout);
+ gnome_vfs_uri_unref (src_uri);
+ gnome_vfs_uri_unref (dest_uri);
+ g_free (buffer);
+ return GNOME_Evolution_ShellComponentListener_PERMISSION_DENIED;
+ }
+
+ result = gnome_vfs_write (hout, buffer, file_info.size, &size);
+ if (result != GNOME_VFS_OK) {
+ gnome_vfs_close (hin);
+ gnome_vfs_close (hout);
+ gnome_vfs_uri_unref (src_uri);
+ gnome_vfs_uri_unref (dest_uri);
+ g_free (buffer);
+ return GNOME_Evolution_ShellComponentListener_PERMISSION_DENIED;
+ }
+
+ if (remove_source) {
+ char *text_uri;
+
+ /* Sigh, we have to do this as there is no gnome_vfs_unlink_uri(). :-( */
+
+ text_uri = gnome_vfs_uri_to_string (src_uri, GNOME_VFS_URI_HIDE_NONE);
+ result = gnome_vfs_unlink (text_uri);
+ g_free (text_uri);
+ }
+
+ gnome_vfs_close (hin);
+ gnome_vfs_close (hout);
+ gnome_vfs_uri_unref (src_uri);
+ gnome_vfs_uri_unref (dest_uri);
+ g_free (buffer);
+
+ return GNOME_Evolution_ShellComponentListener_OK;
+}
+
static void
xfer_folder (EvolutionShellComponent *shell_component,
const char *source_physical_uri,
@@ -334,9 +416,6 @@ xfer_folder (EvolutionShellComponent *shell_component,
GnomeVFSURI *src_uri;
GnomeVFSURI *dest_uri;
GnomeVFSResult result;
- GList *file_list;
- GList *l;
- gboolean success = TRUE;
CORBA_exception_init (&ev);
@@ -364,105 +443,15 @@ xfer_folder (EvolutionShellComponent *shell_component,
return;
}
+ result = xfer_file (src_uri, dest_uri, "calendar.ics", remove_source);
+ if (result == GNOME_Evolution_ShellComponentListener_OK)
+ result = xfer_file (src_uri, dest_uri, "calendar.ics~", remove_source);
+
+ GNOME_Evolution_ShellComponentListener_notifyResult (listener, result, &ev);
+
gnome_vfs_uri_unref (src_uri);
gnome_vfs_uri_unref (dest_uri);
- /* remove all files in that directory */
- result = gnome_vfs_directory_list_load (&file_list, source_physical_uri, 0, NULL);
- if (result != GNOME_VFS_OK) {
- GNOME_Evolution_ShellComponentListener_notifyResult (
- listener,
- GNOME_Evolution_ShellComponentListener_INVALID_URI,
- &ev);
- CORBA_exception_free (&ev);
- return;
- }
-
- for (l = file_list; l; l = l->next) {
- GnomeVFSFileInfo *file_info;
- GnomeVFSHandle *hin;
- GnomeVFSHandle *hout;
- gpointer buffer;
- GnomeVFSFileSize size;
-
- file_info = (GnomeVFSFileInfo *) l->data;
- if (!file_info || file_info->name[0] == '.')
- continue;
-
- /* open source and destination files */
- src_uri = gnome_vfs_uri_new (source_physical_uri);
- src_uri = gnome_vfs_uri_append_file_name (src_uri, file_info->name);
-
- result = gnome_vfs_open_uri (&hin, src_uri, GNOME_VFS_OPEN_READ);
- gnome_vfs_uri_unref (src_uri);
- if (result != GNOME_VFS_OK) {
- GNOME_Evolution_ShellComponentListener_notifyResult (
- listener,
- GNOME_Evolution_ShellComponentListener_PERMISSION_DENIED,
- &ev);
- success = FALSE;
- break;
- }
-
- dest_uri = gnome_vfs_uri_new (destination_physical_uri);
- dest_uri = gnome_vfs_uri_append_file_name (dest_uri, file_info->name);
-
- result = gnome_vfs_create_uri (&hout, dest_uri, GNOME_VFS_OPEN_WRITE, FALSE, 0);
- gnome_vfs_uri_unref (dest_uri);
- if (result != GNOME_VFS_OK) {
- gnome_vfs_close (hin);
- GNOME_Evolution_ShellComponentListener_notifyResult (
- listener,
- GNOME_Evolution_ShellComponentListener_PERMISSION_DENIED,
- &ev);
- success = FALSE;
- break;
- }
-
- /* write source file to destination file */
- buffer = g_malloc (file_info->size);
- result = gnome_vfs_read (hin, buffer, file_info->size, &size);
- if (result != GNOME_VFS_OK) {
- gnome_vfs_close (hin);
- gnome_vfs_close (hout);
- g_free (buffer);
-
- GNOME_Evolution_ShellComponentListener_notifyResult (
- listener,
- GNOME_Evolution_ShellComponentListener_PERMISSION_DENIED,
- &ev);
- success = FALSE;
- break;
- }
- result = gnome_vfs_write (hout, buffer, file_info->size, &size);
- if (result != GNOME_VFS_OK) {
- gnome_vfs_close (hin);
- gnome_vfs_close (hout);
- g_free (buffer);
-
- GNOME_Evolution_ShellComponentListener_notifyResult (
- listener,
- GNOME_Evolution_ShellComponentListener_PERMISSION_DENIED,
- &ev);
- success = FALSE;
- break;
- }
-
- /* free memory */
- gnome_vfs_close (hin);
- gnome_vfs_close (hout);
- g_free (buffer);
- }
-
- if (success) {
- GNOME_Evolution_ShellComponentListener_notifyResult (
- listener,
- GNOME_Evolution_ShellComponentListener_OK,
- &ev);
- }
-
- /* free memory */
- gnome_vfs_file_info_list_free (file_list);
CORBA_exception_free (&ev);
}