evolution-rss r476 - in trunk: . src



Author: lucilanga
Date: Thu Mar 26 11:04:31 2009
New Revision: 476
URL: http://svn.gnome.org/viewvc/evolution-rss?rev=476&view=rev

Log:
2009-03-26  Lucian Langa  <lucilanga gnome org>

* src/rss.c: (fetch_image) - handle relative paths

Modified:
   trunk/ChangeLog
   trunk/TODO
   trunk/src/parser.c
   trunk/src/rss.c
   trunk/src/rss.h

Modified: trunk/TODO
==============================================================================
--- trunk/TODO	(original)
+++ trunk/TODO	Thu Mar 26 11:04:31 2009
@@ -61,3 +61,5 @@
 	* check webbuttons for webkit
 	* cancel operation should cancel fetching feed components
 	* see whether we need to allow higher ttl update interval
+	* fetch_image() handle 404
+	* count comments

Modified: trunk/src/parser.c
==============================================================================
--- trunk/src/parser.c	(original)
+++ trunk/src/parser.c	Thu Mar 26 11:04:31 2009
@@ -996,8 +996,10 @@
                                         	gchar *name = NULL;
                                         	xmlChar *url = xmlGetProp(doc, "src");
                                         	if (url) {
-                                                	if (name = fetch_image(url))
+                                                	if (name = fetch_image(url, link)) {
                                                         	xmlSetProp(doc, "src", name);
+								g_free(name);
+							}
                                                 	xmlFree(url);
                                         	}
                                 	}

Modified: trunk/src/rss.c
==============================================================================
--- trunk/src/rss.c	(original)
+++ trunk/src/rss.c	Thu Mar 26 11:04:31 2009
@@ -1613,6 +1613,7 @@
 	gchar *feedid = NULL;
 	gchar *comments = NULL;
 	gchar *category = NULL;
+	GdkPixbuf *pixbuf = NULL;
 	CamelDataWrapper *dw = camel_data_wrapper_new();
 	CamelMimePart *part = camel_mime_part_new();
 	CamelStream *fstream = camel_stream_mem_new();
@@ -1782,21 +1783,23 @@
 		camel_stream_printf (fstream,
                         "<div style=\"border: solid #%06x 1px; background-color: #%06x; padding: 2px; color: #%06x;\">",
                         frame_colour & 0xffffff, content_colour & 0xEDECEB & 0xffffff, text_colour & 0xffffff);
-        	if (g_file_test(feed_file, G_FILE_TEST_EXISTS)) {
-                	camel_stream_printf (fstream,
+        	if (g_file_test(feed_file, G_FILE_TEST_EXISTS))
+			if (pixbuf = gdk_pixbuf_new_from_file(feed_file, NULL)) {
+                		camel_stream_printf (fstream,
                         	"<div style=\"border: solid 0px; background-color: #%06x; padding: 2px; color: #%06x;\">"
                         	"<img height=16 src=%s>"
                         	"<b><font size=+1><a href=%s>%s</a></font></b></div>",
 				content_colour & 0xEDECEB & 0xffffff, text_colour & 0xffffff,
                         	feed_file, website, subject);
-		} else {
-                	camel_stream_printf (fstream,
-                        	"<div style=\"border: solid 0px; background-color: #%06x; padding: 2px; color: #%06x;\">"
-                        	"<b><font size=+1><a href=%s>%s</a></font></b></div>",
-				content_colour & 0xEDECEB & 0xffffff, text_colour & 0xffffff,
-                        	website, subject);
-		}
-                if (category)
+				g_object_unref(pixbuf);
+				goto render_body;
+			}
+      		camel_stream_printf (fstream,
+                       	"<div style=\"border: solid 0px; background-color: #%06x; padding: 2px; color: #%06x;\">"
+                       	"<b><font size=+1><a href=%s>%s</a></font></b></div>",
+			content_colour & 0xEDECEB & 0xffffff, text_colour & 0xffffff,
+                       	website, subject);
+render_body:    if (category)
                         camel_stream_printf(fstream,
                                 "<div style=\"border: solid 0px; background-color: #%06x; padding: 2px; color: #%06x;\">"
                                 "<b><font size=-1>Posted under: %s</font></b></div>",
@@ -4098,29 +4101,41 @@
         return real;
 }
 
+// constructs url from @base in case url is relative
 gchar *
-fetch_image(gchar *url)
+fetch_image(gchar *url, gchar *link)
 {
         GError *err = NULL;
 	gchar *tmpdir = NULL;
 	gchar *name = NULL;
 	CamelStream *stream = NULL;
+	gchar *tmpurl = NULL;
 	if (!url)
 		return NULL;
+	if (strstr(url, "://") == NULL) {
+		if (*url == '/') {
+		tmpurl = g_strconcat(get_server_from_uri(link), "/", url, NULL);
+		g_print("fetch_image() tmpurl:%s\n", tmpurl);
+		}
+		if (*url == '.')
+			tmpurl = g_strconcat(g_path_get_dirname(link), "/", url, NULL);
+	} else {
+		tmpurl = g_strdup(url);
+	}
 	gchar *feed_dir = g_build_path("/", rss_component_peek_base_directory(mail_component_peek()), "static", NULL);
 	if (!g_file_test(feed_dir, G_FILE_TEST_EXISTS))
 	    g_mkdir_with_parents (feed_dir, 0755);
 	http_cache = camel_data_cache_new(feed_dir, 0, NULL);
 	g_free(feed_dir);
-	stream = camel_data_cache_get(http_cache, HTTP_CACHE_PATH, url, NULL);
+	stream = camel_data_cache_get(http_cache, HTTP_CACHE_PATH, tmpurl, NULL);
 	if (!stream) {
 		g_print("image cache MISS\n");
-		stream = camel_data_cache_add(http_cache, HTTP_CACHE_PATH, url, NULL);
+		stream = camel_data_cache_add(http_cache, HTTP_CACHE_PATH, tmpurl, NULL);
 	} else 
 		g_print("image cache HIT\n");
 
 
-	net_get_unblocking(url,
+	net_get_unblocking(tmpurl,
                        	        textcb,
                                	NULL,
                                	(gpointer)finish_image,
@@ -4128,7 +4143,9 @@
 				0,
                                	&err);
 	if (err) return NULL;
-	return data_cache_path(http_cache, FALSE, HTTP_CACHE_PATH, url);
+	gchar *result = data_cache_path(http_cache, FALSE, HTTP_CACHE_PATH, tmpurl);
+	g_free(tmpurl);
+	return result;
 }
 
 //migrates old feed data files from crc naming

Modified: trunk/src/rss.h
==============================================================================
--- trunk/src/rss.h	(original)
+++ trunk/src/rss.h	Thu Mar 26 11:04:31 2009
@@ -296,7 +296,7 @@
 gchar *decode_utf8_entities(gchar *str);
 gchar *decode_html_entities(gchar *str);
 gchar *get_real_channel_name(gchar *uri, gchar *failed);
-gchar *fetch_image(gchar *url);
+gchar *fetch_image(gchar *url, gchar *link);
 void create_mail(create_feed *CF);
 void migrate_crc_md5(const char *name, gchar *url);
 void write_feed_status_line(gchar *file, gchar *needle);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]