From bbfb9268af8e5d8c5a0ac346ba13efc00783d46c Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Tue, 17 Jul 2001 20:45:57 +0000 Subject: Fix to correctly handle text/uri-lists that contain more than a single 2001-07-17 Jeffrey Stedfast * folder-browser.c (message_list_drag_data_recieved): Fix to correctly handle text/uri-lists that contain more than a single url. * component-factory.c (destination_folder_handle_drop): Fix to correctly handle text/uri-lists that contain more than a single url. svn path=/trunk/; revision=11174 --- mail/ChangeLog | 10 ++++++++ mail/component-factory.c | 62 ++++++++++++++++++++++++++---------------------- mail/folder-browser.c | 55 +++++++++++++++++++++++------------------- 3 files changed, 74 insertions(+), 53 deletions(-) (limited to 'mail') diff --git a/mail/ChangeLog b/mail/ChangeLog index 0b329365b1..2067d37ba4 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,13 @@ +2001-07-17 Jeffrey Stedfast + + * folder-browser.c (message_list_drag_data_recieved): Fix to + correctly handle text/uri-lists that contain more than a single + url. + + * component-factory.c (destination_folder_handle_drop): Fix to + correctly handle text/uri-lists that contain more than a single + url. + 2001-07-17 Jason Leach * mail-config.glade: Make the Path: entry into a GnomeFileEntry so diff --git a/mail/component-factory.c b/mail/component-factory.c index f9dc27dee2..5502fa7683 100644 --- a/mail/component-factory.c +++ b/mail/component-factory.c @@ -369,14 +369,14 @@ destination_folder_handle_drop (EvolutionShellComponentDndDestinationFolder *des const GNOME_Evolution_ShellComponentDnd_Data *data, gpointer user_data) { - char *url, *in, *inptr, *inend; + char *tmp, *url, **urls, *in, *inptr, *inend; gboolean retval = FALSE; CamelFolder *folder; CamelStream *stream; CamelException ex; GPtrArray *uids; CamelURL *uri; - int type, fd; + int i, type, fd; if (action == GNOME_Evolution_ShellComponentDnd_ACTION_LINK) return FALSE; /* we can't create links */ @@ -395,36 +395,42 @@ destination_folder_handle_drop (EvolutionShellComponentDndDestinationFolder *des if (!folder) return FALSE; - url = g_strndup (data->bytes._buffer, data->bytes._length); - inend = strchr (url, '\n'); - if (inend) - *inend = '\0'; + tmp = g_strndup (data->bytes._buffer, data->bytes._length); + urls = g_strsplit (tmp, "\n", 0); + g_free (tmp); - /* get the path component */ - g_strstrip (url); - uri = camel_url_new (url, NULL); - g_free (url); - url = uri->path; - uri->path = NULL; - camel_url_free (uri); - - fd = open (url, O_RDONLY); - if (fd == -1) { + retval = TRUE; + for (i = 0; urls[i] != NULL && retval; i++) { + /* get the path component */ + url = g_strstrip (urls[i]); + + uri = camel_url_new (url, NULL); + g_free (url); + url = uri->path; + uri->path = NULL; + camel_url_free (uri); + + fd = open (url, O_RDONLY); + if (fd == -1) { + g_free (url); + /* FIXME: okay, so what do we do in this case? */ + continue; + } + + stream = camel_stream_fs_new_with_fd (fd); + message_rfc822_dnd (folder, stream, &ex); + camel_object_unref (CAMEL_OBJECT (stream)); + camel_object_unref (CAMEL_OBJECT (folder)); + + retval = !camel_exception_is_set (&ex); + + if (action == GNOME_Evolution_ShellComponentDnd_ACTION_MOVE && retval) + unlink (url); + g_free (url); - return FALSE; } - stream = camel_stream_fs_new_with_fd (fd); - message_rfc822_dnd (folder, stream, &ex); - camel_object_unref (CAMEL_OBJECT (stream)); - camel_object_unref (CAMEL_OBJECT (folder)); - - retval = !camel_exception_is_set (&ex); - - if (action == GNOME_Evolution_ShellComponentDnd_ACTION_MOVE && retval) - unlink (url); - - g_free (url); + g_free (urls); break; case ACCEPTED_DND_TYPE_MESSAGE_RFC822: folder = mail_tool_uri_to_folder (physical_uri, &ex); diff --git a/mail/folder-browser.c b/mail/folder-browser.c index d0662b0266..12af53f9e2 100644 --- a/mail/folder-browser.c +++ b/mail/folder-browser.c @@ -427,44 +427,49 @@ message_list_drag_data_recieved (ETree *tree, int row, ETreePath path, int col, { FolderBrowser *fb = FOLDER_BROWSER (user_data); CamelFolder *folder = NULL; + char *tmp, *url, **urls; GPtrArray *uids = NULL; CamelStream *stream; CamelException ex; - char *inend, *url; CamelURL *uri; - int fd; + int i, fd; camel_exception_init (&ex); switch (info) { case DND_TARGET_TYPE_TEXT_URI_LIST: - url = g_strndup (selection_data->data, selection_data->length); - inend = strchr (url, '\n'); - if (inend) - *inend = '\0'; + tmp = g_strndup (selection_data->data, selection_data->length); + urls = g_strsplit (tmp, "\n", 0); + g_free (tmp); - /* get the path component */ - g_strstrip (url); - uri = camel_url_new (url, NULL); - g_free (url); - url = uri->path; - uri->path = NULL; - camel_url_free (uri); - - fd = open (url, O_RDONLY); - if (fd == -1) { + for (i = 0; urls[i] != NULL; i++) { + /* get the path component */ + url = g_strstrip (urls[i]); + + uri = camel_url_new (url, NULL); + g_free (url); + url = uri->path; + uri->path = NULL; + camel_url_free (uri); + + fd = open (url, O_RDONLY); + if (fd == -1) { + g_free (url); + /* FIXME: okay, what do we do in this case? */ + continue; + } + + stream = camel_stream_fs_new_with_fd (fd); + message_rfc822_dnd (fb->folder, stream, &ex); + camel_object_unref (CAMEL_OBJECT (stream)); + + if (context->action == GDK_ACTION_MOVE && !camel_exception_is_set (&ex)) + unlink (url); + g_free (url); - goto fail; } - stream = camel_stream_fs_new_with_fd (fd); - message_rfc822_dnd (fb->folder, stream, &ex); - camel_object_unref (CAMEL_OBJECT (stream)); - - if (context->action == GDK_ACTION_MOVE && !camel_exception_is_set (&ex)) - unlink (url); - - g_free (url); + g_free (urls); break; case DND_TARGET_TYPE_MESSAGE_RFC822: /* write the message(s) out to a CamelStream so we can use it */ -- cgit v1.2.3