diff options
author | Dan Winship <danw@src.gnome.org> | 2001-10-22 03:08:07 +0800 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2001-10-22 03:08:07 +0800 |
commit | b0ac33fbbe200997569e14574dd5aac746419bed (patch) | |
tree | c5573f27b274206769804d81262c0a90f1d85774 /composer/listener.c | |
parent | e563157722c2dd8fe2cc157326e745142e850bcc (diff) | |
download | gsoc2013-evolution-b0ac33fbbe200997569e14574dd5aac746419bed.tar gsoc2013-evolution-b0ac33fbbe200997569e14574dd5aac746419bed.tar.gz gsoc2013-evolution-b0ac33fbbe200997569e14574dd5aac746419bed.tar.bz2 gsoc2013-evolution-b0ac33fbbe200997569e14574dd5aac746419bed.tar.lz gsoc2013-evolution-b0ac33fbbe200997569e14574dd5aac746419bed.tar.xz gsoc2013-evolution-b0ac33fbbe200997569e14574dd5aac746419bed.tar.zst gsoc2013-evolution-b0ac33fbbe200997569e14574dd5aac746419bed.zip |
Make inline images used for replies not show up as
attachments. Also, I think this should make replies to HTML
messages containing inline images referenced via Content-Location
work, but that's not tested.
* e-msg-composer.c (various): Keep two hash tables of inline image
data: one mapping from cid: URLs to CamelMimeParts for all
attachments, the other mapping from file: and Content-Location
urls to CamelMimeParts (for those inline images that came from a
file or have a Content-Location).
(add_inlined_images): Simplify. Most of this code is in
e_msg_composer_add_inline_image_from_file() now.
(e_msg_composer_add_message_attachments, handle_multipart): Change
"attach_all" arg to "just_inlines". If it is set, call
e_msg_composer_add_inline_image_from_mime_part on any attachment
with a Content-Id or Content-Location.
(e_msg_composer_add_inline_image_from_file): Create a mime part
from a file and add it to the inline images hash.
(e_msg_composer_add_inline_image_from_mime_part): Add a mime part
directly to the inline images hash.
* listener.c (resolve_image_url): If asked to resolve a file: URL
that isn't in the inline images hash, call
e_msg_composer_add_inline_image_from_file to get a cid for it.
(impl_event): Look up the URL in the inline_images and
inline_images_by_url hashes.
* e-msg-composer-attachment-bar.c
(e_msg_composer_attachment_bar_find_message): Gone. No longer
used.
svn path=/trunk/; revision=13852
Diffstat (limited to 'composer/listener.c')
-rw-r--r-- | composer/listener.c | 68 |
1 files changed, 30 insertions, 38 deletions
diff --git a/composer/listener.c b/composer/listener.c index 0b72407b88..228b1c2594 100644 --- a/composer/listener.c +++ b/composer/listener.c @@ -29,7 +29,6 @@ #include <bonobo/bonobo-stream-client.h> #include "listener.h" -#include "e-msg-composer-attachment-bar.h" static BonoboObjectClass *listener_parent_class; static POA_GNOME_GtkHTML_Editor_Listener__vepv listener_vepv; @@ -54,23 +53,22 @@ get_any_null () static gchar * resolve_image_url (EditorListener *l, gchar *url) { - gchar *cid = NULL; + CamelMimePart *part; + const char *cid; - printf ("resolve_image_url %s\n", url); - - if (!strncmp (url, "file:", 5)) { - gchar *id; - - id = (gchar *) g_hash_table_lookup (l->composer->inline_images, url + 5); - if (!id) { - id = header_msgid_generate (); - g_hash_table_insert (l->composer->inline_images, g_strdup (url + 5), id); - } - cid = g_strconcat ("cid:", id, NULL); - printf ("resolved to %s\n", cid); + part = g_hash_table_lookup (l->composer->inline_images_by_url, url); + if (!part && !strncmp (url, "file:", 5)) { + part = e_msg_composer_add_inline_image_from_file (l->composer, + url + 5); } + if (!part) + return NULL; + + cid = camel_mime_part_get_content_id (part); + if (!cid) + return NULL; - return cid; + return g_strconcat ("cid:", cid, NULL); } static void @@ -162,37 +160,31 @@ impl_event (PortableServer_Servant _servant, } } else if (!strcmp (name, "url_requested")) { GNOME_GtkHTML_Editor_URLRequestEvent *e; - CamelMimePart *part = NULL; + CamelMimePart *part; + GByteArray *ba; + CamelStream *cstream; + CamelDataWrapper *wrapper; e = (GNOME_GtkHTML_Editor_URLRequestEvent *)arg->_value; - g_warning ("url_requested = \"%s\"", e->url); - if (e->url) { - part = e_msg_composer_attachment_bar_find_message ( - E_MSG_COMPOSER_ATTACHMENT_BAR (l->composer->attachment_bar), e->url); - } + if (!e->url || e->stream == CORBA_OBJECT_NIL) + return get_any_null (); + part = g_hash_table_lookup (l->composer->inline_images_by_url, e->url); if (!part) - printf ("url_requested: no part found\n"); - else - printf ("url_requested: FOUND PART\n"); - - if (part && e->stream != CORBA_OBJECT_NIL) { - GByteArray *ba; - CamelStream *cstream; - CamelDataWrapper *wrapper; - - /* Write the data to a CamelStreamMem... */ - ba = g_byte_array_new (); - cstream = camel_stream_mem_new_with_byte_array (ba); - wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); - camel_data_wrapper_write_to_stream (wrapper, cstream); + part = g_hash_table_lookup (l->composer->inline_images, e->url); + if (!part) + return get_any_null (); - bonobo_stream_client_write (e->stream, ba->data, ba->len, ev); + /* Write the data to a CamelStreamMem... */ + ba = g_byte_array_new (); + cstream = camel_stream_mem_new_with_byte_array (ba); + wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); + camel_data_wrapper_write_to_stream (wrapper, cstream); - camel_object_unref (CAMEL_OBJECT (cstream)); - } + bonobo_stream_client_write (e->stream, ba->data, ba->len, ev); + camel_object_unref (CAMEL_OBJECT (cstream)); } return rv ? rv : get_any_null (); |