aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2012-11-23 02:32:33 +0800
committerMilan Crha <mcrha@redhat.com>2012-11-23 02:32:33 +0800
commite0f12eaaf48cbf5019a0418b539799b63b19dcfb (patch)
tree37da6b4d610d64f403157cf714d8649d433028e4 /mail
parentdd958f0120603d87e2c8b3250b742d53230f2780 (diff)
downloadgsoc2013-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.c48
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);