diff options
author | Milan Crha <mcrha@redhat.com> | 2012-11-23 02:32:33 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2012-11-23 02:32:33 +0800 |
commit | e0f12eaaf48cbf5019a0418b539799b63b19dcfb (patch) | |
tree | 37da6b4d610d64f403157cf714d8649d433028e4 /mail | |
parent | dd958f0120603d87e2c8b3250b742d53230f2780 (diff) | |
download | gsoc2013-evolution-e0f12eaaf48cbf5019a0418b539799b63b19dcfb.tar gsoc2013-evolution-e0f12eaaf48cbf5019a0418b539799b63b19dcfb.tar.gz gsoc2013-evolution-e0f12eaaf48cbf5019a0418b539799b63b19dcfb.tar.bz2 gsoc2013-evolution-e0f12eaaf48cbf5019a0418b539799b63b19dcfb.tar.lz gsoc2013-evolution-e0f12eaaf48cbf5019a0418b539799b63b19dcfb.tar.xz gsoc2013-evolution-e0f12eaaf48cbf5019a0418b539799b63b19dcfb.tar.zst gsoc2013-evolution-e0f12eaaf48cbf5019a0418b539799b63b19dcfb.zip |
EMailDisplay lefts opened file handles to downloaded images
This fixes three things:
a) mail_display_resource_requested() was leaking file handles on downloaded images
b) it's not necessary to open files, it's enough to test whether file exists
c) mail_display_button_press_event() used incorrect key for "http" cache
Diffstat (limited to 'mail')
-rw-r--r-- | mail/e-mail-display.c | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c index a5445186cb..9cbc9832eb 100644 --- a/mail/e-mail-display.c +++ b/mail/e-mail-display.c @@ -85,7 +85,7 @@ enum { PROP_HEADERS_COLLAPSED, }; -static CamelDataCache *emd_global_http_cache = 0; +static CamelDataCache *emd_global_http_cache = NULL; static const gchar *ui = "<ui>" @@ -179,6 +179,25 @@ formatter_image_loading_policy_changed_cb (GObject *object, e_mail_display_reload (display); } +static gboolean +mail_display_image_exists_in_cache (const gchar *image_uri) +{ + gchar *image_filename, *uri_md5; + gboolean exists; + + g_return_val_if_fail (emd_global_http_cache != NULL, FALSE); + + uri_md5 = g_compute_checksum_for_string (G_CHECKSUM_MD5, image_uri, -1); + image_filename = camel_data_cache_get_filename (emd_global_http_cache, "http", uri_md5); + + exists = image_filename && g_file_test (image_filename, G_FILE_TEST_EXISTS); + + g_free (uri_md5); + g_free (image_filename); + + return exists; +} + static void mail_display_update_formatter_colors (EMailDisplay *display) { @@ -360,23 +379,18 @@ mail_display_resource_requested (WebKitWebView *web_view, gchar *new_uri, *mail_uri, *enc; SoupURI *soup_uri; GHashTable *query; - gchar *uri_md5; - CamelStream *stream; + gboolean image_exists; EMailImageLoadingPolicy image_policy; - /* Open Evolution's cache */ - uri_md5 = g_compute_checksum_for_string ( - G_CHECKSUM_MD5, uri, -1); - stream = camel_data_cache_get ( - emd_global_http_cache, "http", uri_md5, NULL); - g_free (uri_md5); + /* Check Evolution's cache */ + image_exists = mail_display_image_exists_in_cache (uri); /* If the URI is not cached and we are not allowed to load it * then redirect to invalid URI, so that webkit would display * a native placeholder for it. */ image_policy = e_mail_formatter_get_image_loading_policy ( display->priv->formatter); - if (!stream && !display->priv->force_image_load && + if (!image_exists && !display->priv->force_image_load && (image_policy == E_MAIL_IMAGE_LOADING_POLICY_NEVER)) { webkit_network_request_set_uri (request, "about:blank"); return; @@ -1386,18 +1400,8 @@ mail_display_button_press_event (GtkWidget *widget, if ((context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE)) { visible = image_src && g_str_has_prefix (image_src, "cid:"); - if (!visible && image_src) { - CamelStream *image_stream; - - image_stream = camel_data_cache_get ( - emd_global_http_cache, "http", - image_src, NULL); - - visible = (image_stream != NULL); - - if (image_stream != NULL) - g_object_unref (image_stream); - } + if (!visible && image_src) + visible = mail_display_image_exists_in_cache (image_src); if (image_src != NULL) g_free (image_src); |