aboutsummaryrefslogtreecommitdiffstats
path: root/composer/listener.c
diff options
context:
space:
mode:
authorDan Winship <danw@src.gnome.org>2001-10-22 03:08:07 +0800
committerDan Winship <danw@src.gnome.org>2001-10-22 03:08:07 +0800
commitb0ac33fbbe200997569e14574dd5aac746419bed (patch)
treec5573f27b274206769804d81262c0a90f1d85774 /composer/listener.c
parente563157722c2dd8fe2cc157326e745142e850bcc (diff)
downloadgsoc2013-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.c68
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 ();