From 3238b44d77cf9c75f09ccc6739af7fcb29dc39f8 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Sun, 2 Feb 2003 02:20:48 +0000 Subject: Give gnome_vfs_get_uri_from_local_path a full path. 2003-02-01 Jeffrey Stedfast * e-msg-composer-attachment.c (update_mime_type): Give gnome_vfs_get_uri_from_local_path a full path. svn path=/trunk/; revision=19702 --- composer/ChangeLog | 5 +++++ composer/e-msg-composer-attachment.c | 36 ++++++++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/composer/ChangeLog b/composer/ChangeLog index 360e6146e1..e40e83e2a0 100644 --- a/composer/ChangeLog +++ b/composer/ChangeLog @@ -1,3 +1,8 @@ +2003-02-01 Jeffrey Stedfast + + * e-msg-composer-attachment.c (update_mime_type): Give + gnome_vfs_get_uri_from_local_path a full path. + 2003-01-27 Jeffrey Stedfast * e-msg-composer.c (e_msg_composer_new_from_url): If the subject diff --git a/composer/e-msg-composer-attachment.c b/composer/e-msg-composer-attachment.c index 64daad1164..45b8a86c8e 100644 --- a/composer/e-msg-composer-attachment.c +++ b/composer/e-msg-composer-attachment.c @@ -37,6 +37,8 @@ #include #include +#include "e-util/e-mktemp.h" + #include "e-msg-composer.h" #include "e-msg-composer-attachment.h" @@ -302,21 +304,35 @@ destroy_dialog_data (DialogData *data) static void update_mime_type (DialogData *data) { - const char *filename; - char *mime_type, *uri; + const char *filename, *tmpdir; + char *mime_type, *path, *uri; if (!data->attachment->guessed_type) return; filename = gtk_entry_get_text (data->file_name_entry); - - uri = gnome_vfs_get_uri_from_local_path (filename); - mime_type = gnome_vfs_get_mime_type (uri); - g_free (uri); - - if (mime_type) { - gtk_entry_set_text (data->mime_type_entry, mime_type); - g_free (mime_type); + if (filename) { + /* gnome_vfs_get_mime_type() might try to access the + * file and read it to 'sniff' the mime-type if it is + * there (and gnome-vfs can't determine the mime-type + * based on filename extension?), so we need to make + * sure the file doesn't exist yet we want to keep the + * filename intact so that gnome-vfs can try and + * determine the mime-type by the filename. This is + * kinda nasty. + */ + + tmpdir = e_mkdtemp ("mime-identify-XXXXXX"); + path = g_strdup_printf ("%s/%s", tmpdir, filename); + uri = gnome_vfs_get_uri_from_local_path (path); + mime_type = gnome_vfs_get_mime_type (uri); + g_free (path); + g_free (uri); + + if (mime_type) { + gtk_entry_set_text (data->mime_type_entry, mime_type); + g_free (mime_type); + } } } -- cgit v1.2.3