Package: release.debian.org Severity: normal User: release.debian.org@packages.debian.org Usertags: freeze-exception Please unblock evolution-rss for squeeze. evolution-rss (0.2.0-1) unstable; urgency=low * New upstream stable release. The changes are fairly large but it allows to stick with a stable release instead of a git snapshot. Furthermore it’s not an important package so you can just drop if from the release if it’s not suitable anymore. Cheers, -- .''`. Josselin Mouette : :' : `. `' “If you behave this way because you are blackmailed by someone, `- […] I will see what I can do for you.” -- Jörg Schilling
--- evolution-rss-0.1.9//src/dbus.c 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/dbus.c 2010-07-09 17:01:15.000000000 +0200
@@ -141,6 +141,7 @@ filter_function (DBusConnection *connect
g_print("Feed received, but error getting message: %s\n", error.message);
dbus_error_free (&error);
}
+ g_free(feed);
return DBUS_HANDLER_RESULT_HANDLED;
}
else if (dbus_message_is_signal (message, DBUS_INTERFACE, "ping")) {
--- evolution-rss-0.1.9//src/misc.c 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/misc.c 2010-07-10 11:39:45.000000000 +0200
@@ -135,6 +135,8 @@ dup_auth_data(gchar *origurl, gchar *url
{
gchar *user = g_hash_table_lookup(rf->hruser, origurl);
gchar *pass = g_hash_table_lookup(rf->hrpass, origurl);
+ d("origurl / url:%s / %s\n", origurl, url);
+ d("user / pass:%s / %s\n", user, pass);
if (user && pass) {
g_hash_table_insert(rf->hruser, url, g_strdup(user));
g_hash_table_insert(rf->hrpass, url, g_strdup(pass));
@@ -580,10 +582,10 @@ feed_remove_status_line(gchar *file_name
}
}
fclose(fr);
- fclose(fw);
g_unlink(file_name);
g_rename(tmp, file_name);
}
+ fclose(fw);
g_free(tmpneedle);
}
--- evolution-rss-0.1.9//src/misc.h 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/misc.h 2010-06-03 15:35:36.000000000 +0200
@@ -51,8 +51,5 @@ void feed_remove_status_line(gchar *file
void write_feed_status_line(gchar *file, gchar *needle);
void dup_auth_data(gchar *origurl, gchar *url);
void sanitize_path_separator(gchar *);
-#ifdef _WIN32
-char *strcasestr(const char *a, const char *b);
-#endif
#endif
--- evolution-rss-0.1.9//src/network-soup.c 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/network-soup.c 2010-06-03 22:24:04.000000000 +0200
@@ -319,9 +319,9 @@ read_up(gpointer data)
feed_dir = rss_component_peek_base_directory();
if (!g_file_test(feed_dir, G_FILE_TEST_EXISTS))
g_mkdir_with_parents (feed_dir, 0755);
- feed_name = g_strdup_printf(
- "%s" G_DIR_SEPARATOR_S "%s", feed_dir, buf);
+ feed_name = g_build_path(G_DIR_SEPARATOR_S, feed_dir, buf, NULL);
g_free(feed_dir);
+ d("reading auth info:%s\n", feed_name);
fr = fopen(feed_name, "r");
if (fr) {
@@ -421,6 +421,7 @@ authenticate (SoupSession *session,
user = g_hash_table_lookup(rf->hruser, data);
pass = g_hash_table_lookup(rf->hrpass, data);
+ d("data:%s, user:%s, pass:%s\n", (gchar *)data, user, pass);
if (user && pass) {
#if LIBSOUP_VERSION < 2003000
@@ -435,10 +436,23 @@ authenticate (SoupSession *session,
}
#endif
} else {
+ read_up(data);
+ user = g_hash_table_lookup(rf->hruser, data);
+ pass = g_hash_table_lookup(rf->hrpass, data);
+ if (user && pass) {
+#if LIBSOUP_VERSION < 2003000
+ *username = g_strdup(user);
+ *password = g_strdup(pass);
+#else
+ if (!retrying)
+ soup_auth_authenticate (auth, user, pass);
+ return;
+#endif
+ }
//we test for autofetching in progresss because it seems
//preety annoying to pop the authentication popup in front
//of the user every time feeds are automatically fetched
- if (!read_up(data) && !rf->autoupdate) {
+ if (!rf->autoupdate) {
//we will continue after user has made a decision on
//web auth dialog
//Bug 522147 â?? need to be able to pause synchronous I/O
@@ -451,6 +465,7 @@ authpop: if (G_OBJECT_TYPE(session) ==
auth_info->session = session;
auth_info->message = msg;
web_auth_dialog(auth_info);
+ return;
}
}
}
@@ -592,16 +607,6 @@ net_get_unblocking(gchar *url,
info->total = 0;
}
- if (!rf->session)
- rf->session = g_hash_table_new(
- g_direct_hash, g_direct_equal);
- if (!rf->abort_session)
- rf->abort_session = g_hash_table_new(
- g_direct_hash, g_direct_equal);
- if (!rf->key_session)
- rf->key_session = g_hash_table_new(
- g_direct_hash, g_direct_equal);
-
g_signal_connect (soup_sess, "authenticate",
G_CALLBACK (authenticate), (gpointer)url);
#if LIBSOUP_VERSION < 2003000
@@ -692,16 +697,6 @@ download_unblocking(
info->total = 0;
}
- if (!rf->session)
- rf->session = g_hash_table_new(
- g_direct_hash, g_direct_equal);
- if (!rf->abort_session)
- rf->abort_session = g_hash_table_new(
- g_direct_hash, g_direct_equal);
- if (!rf->key_session)
- rf->key_session = g_hash_table_new(
- g_direct_hash, g_direct_equal);
-
g_signal_connect (soup_sess, "authenticate",
G_CALLBACK (authenticate), (gpointer)url);
#if LIBSOUP_VERSION < 2003000
@@ -1005,8 +1000,8 @@ rss_soup_init(void)
}
g_free(cookie_path);
g_free(moz_cookie_path);
- if (!rf->stqueue)
- rf->stqueue = g_queue_new();
}
#endif
+ if (!rf->stqueue)
+ rf->stqueue = g_queue_new();
}
--- evolution-rss-0.1.9//src/notification.c 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/notification.c 2010-06-08 16:32:44.000000000 +0200
@@ -29,9 +29,16 @@
#include <e-util/e-error.h>
#endif
-#include "notification.h"
+#if EVOLUTION_VERSION <= 22203
+#include <misc/e-activity-handler.h>
+#include <e-util/e-icon-factory.h>
+#endif
+
+extern int rss_verbose_debug;
+
#include "rss.h"
#include "network-soup.h"
+#include "notification.h"
#if (EVOLUTION_VERSION >= 22900) //kb//
extern EShellView *rss_shell_view;
@@ -183,7 +190,7 @@ void
taskbar_pop_message(void)
{
#if EVOLUTION_VERSION < 22900 //kb//
- EActivityHandler *activity_handler =
+ EActivityHandler *activity_handler =
mail_component_peek_activity_handler (mail_component_peek ());
e_activity_handler_unset_message(activity_handler);
#else
@@ -198,9 +205,9 @@ void
taskbar_op_abort(gpointer key)
{
#if EVOLUTION_VERSION < 22900 //kb//
- EActivityHandler *activity_handler =
+ EActivityHandler *activity_handler =
mail_component_peek_activity_handler (mail_component_peek ());
- guint activity_key =
+ guint activity_key =
GPOINTER_TO_INT(g_hash_table_lookup(rf->activity, key));
if (activity_key)
e_activity_handler_operation_finished(
@@ -262,11 +269,11 @@ taskbar_op_new(gchar *message)
key);
return activity;
#else
- activity_handler =
+ activity_handler =
mail_component_peek_activity_handler (mail_component_peek ());
mcp = g_strdup_printf("%p", mail_component_peek());
#if (EVOLUTION_VERSION >= 22306)
- activity_id =
+ activity_id =
e_activity_handler_cancelable_operation_started(
activity_handler,
"evolution-mail",
@@ -275,12 +282,12 @@ taskbar_op_new(gchar *message)
(void (*) (gpointer))taskbar_op_abort,
key);
#else
- progress_icon =
+ progress_icon =
e_icon_factory_get_icon (
"mail-unread",
E_ICON_SIZE_MENU);
#if (EVOLUTION_VERSION >= 22200)
- activity_id =
+ activity_id =
e_activity_handler_cancelable_operation_started(
activity_handler,
"evolution-mail",
@@ -336,37 +343,49 @@ taskbar_op_set_progress(gchar *key, gcha
}
}
-#if (EVOLUTION_VERSION >= 22900) //kb//
void
-taskbar_op_finish(EActivity *id)
+taskbar_op_finish(gchar *key)
{
+#if (EVOLUTION_VERSION >= 22900) //kb//
+ EActivity *aid = NULL;
EActivity *activity_key;
- if (id == NULL) {
+#else
+ guint aid = 0;
+ guint activity_key;
+ EActivityHandler *activity_handler = mail_component_peek_activity_handler (
+ mail_component_peek ());
+#endif
+ if (key) {
+#if (EVOLUTION_VERSION >= 22900) //kb//
+ aid = (EActivity *)g_hash_table_lookup(rf->activity, key);
+#else
+ aid = (guint)g_hash_table_lookup(rf->activity, key);
+#endif
+ }
+ if (aid == NULL) {
+#if (EVOLUTION_VERSION >= 22900) //kb//
activity_key = g_hash_table_lookup(rf->activity, "main");
+#else
+ activity_key = GPOINTER_TO_INT(g_hash_table_lookup(rf->activity, "main"));
+#endif
if (activity_key) {
- dp("activity_key:%p\n", activity_key);
+ d("activity_key:%p\n", (gpointer)activity_key);
+#if (EVOLUTION_VERSION >= 22900) //kb//
e_activity_complete (activity_key);
+#else
+ e_activity_handler_operation_finished(activity_handler, activity_key);
+#endif
g_hash_table_remove(rf->activity, "main");
}
} else {
- e_activity_complete (id);
- g_hash_table_remove(rf->activity, id);
- }
-}
+#if (EVOLUTION_VERSION >= 22900) //kb//
+ e_activity_complete (aid);
#else
-void
-taskbar_op_finish(gchar *key)
-{
- EActivityHandler *activity_handler = mail_component_peek_activity_handler (mail_component_peek ());
- if (rf->activity) {
- guint activity_key = GPOINTER_TO_INT(g_hash_table_lookup(rf->activity, key));
- g_print("activity_key:%p\n", activity_key);
- if (activity_key)
- e_activity_handler_operation_finished(activity_handler, activity_key);
+ e_activity_handler_operation_finished(activity_handler, aid);
+#endif
g_hash_table_remove(rf->activity, key);
}
}
-#endif
#if (EVOLUTION_VERSION >= 22900) //kb//
EActivity*
@@ -392,12 +411,12 @@ taskbar_op_message(gchar *msg, gchar *un
#if (EVOLUTION_VERSION >= 22900) //kb//
if (!msg)
- activity_id =
+ activity_id =
(EActivity *)taskbar_op_new(
- tmsg,
+ tmsg,
(gchar *)"main");
else
- activity_id =
+ activity_id =
(EActivity *)taskbar_op_new(tmsg, msg);
#else
#if (EVOLUTION_VERSION >= 22200)
--- evolution-rss-0.1.9//src/notification.h 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/notification.h 2010-06-03 16:44:40.000000000 +0200
@@ -25,11 +25,7 @@ taskbar_op_message(gchar *msg, gchar *un
#endif
void taskbar_op_abort(gpointer key);
void taskbar_op_set_progress(gchar *key, gchar *msg, gdouble progress);
-#if (EVOLUTION_VERSION >= 22900) //kb//
-void taskbar_op_finish(EActivity *id);
-#else
void taskbar_op_finish(gchar *key);
-#endif
void taskbar_push_message(gchar *message);
void taskbar_pop_message(void);
--- evolution-rss-0.1.9//src/parser.c 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/parser.c 2010-07-01 20:33:13.000000000 +0200
@@ -37,6 +37,7 @@ extern int rss_verbose_debug;
#include "fetch.h"
#include "rss.h"
#include "rss-config.h"
+#include "rss-image.h"
#include "parser.h"
#include "misc.h"
#include "network-soup.h"
@@ -44,7 +45,6 @@ extern int rss_verbose_debug;
/************ RDF Parser *******************/
guint rsserror = FALSE;
-gchar *rssstrerror = NULL;
extern rssfeed *rf;
extern gboolean feed_new;
@@ -163,7 +163,6 @@ static void
my_xml_perror_handler (void *ctx, const char *msg, ...)
{
rsserror = TRUE;
-// rssstrerror
g_print("xml_parse_sux(): ERROR:%s\n", msg);
}
@@ -178,54 +177,54 @@ xml_parse_sux (const char *buf, int len)
{
static xmlSAXHandler *sax;
xmlParserCtxtPtr ctxt;
- xmlDoc *doc;
+ xmlDoc *doc = NULL;
+ gchar *mime_type;
+
rsserror = FALSE;
- rssstrerror = NULL;
g_return_val_if_fail (buf != NULL, NULL);
+ mime_type = g_content_type_guess(NULL, (guchar *)buf, len, NULL);
+ //feeding parsed anything other than xml results in blocking delays
+ //it's possible we can relax parser by using xmlErrorFunc
+ if (!g_ascii_strncasecmp (mime_type, "application/", 12)) {
+ if (!sax) {
+ xmlInitParser();
+ sax = xmlMalloc (sizeof (xmlSAXHandler));
+ xmlSAXVersion (sax, 2);
+ sax->warning = my_xml_parser_error_handler;
+ sax->error = my_xml_perror_handler;
+ }
+
+ if (len == -1)
+ len = strlen (buf);
+ ctxt = xmlCreateMemoryParserCtxt (buf, len);
+ if (!ctxt)
+ return NULL;
+
+ xmlFree (ctxt->sax);
+ ctxt->sax = sax;
+ ctxt->sax2 = 1;
+ ctxt->str_xml = xmlDictLookup (ctxt->dict, BAD_CAST "xml", 3);
+ ctxt->str_xmlns = xmlDictLookup (ctxt->dict, BAD_CAST "xmlns", 5);
+ ctxt->str_xml_ns = xmlDictLookup (ctxt->dict, XML_XML_NAMESPACE, 36);
+
+ ctxt->recovery = TRUE;
+ ctxt->vctxt.error = my_xml_parser_error_handler;
+ ctxt->vctxt.warning = my_xml_parser_error_handler;
- if (!sax) {
- xmlInitParser();
- sax = xmlMalloc (sizeof (xmlSAXHandler));
-//#if LIBXML_VERSION > 20600
- xmlSAXVersion (sax, 2);
-//#else
-// memcpy (sax, &xmlDefaultSAXHandler, sizeof (xmlSAXHandler));
-//#endif
- sax->warning = my_xml_parser_error_handler;
- sax->error = my_xml_perror_handler;
- }
- if (len == -1)
- len = strlen (buf);
- ctxt = xmlCreateMemoryParserCtxt (buf, len);
- if (!ctxt)
- return NULL;
-
- xmlFree (ctxt->sax);
- ctxt->sax = sax;
-//#if LIBXML_VERSION > 20600
- ctxt->sax2 = 1;
- ctxt->str_xml = xmlDictLookup (ctxt->dict, BAD_CAST "xml", 3);
- ctxt->str_xmlns = xmlDictLookup (ctxt->dict, BAD_CAST "xmlns", 5);
- ctxt->str_xml_ns = xmlDictLookup (ctxt->dict, XML_XML_NAMESPACE, 36);
-//#endif
-
- ctxt->recovery = TRUE;
- ctxt->vctxt.error = my_xml_parser_error_handler;
- ctxt->vctxt.warning = my_xml_parser_error_handler;
-
- xmlCtxtUseOptions(ctxt, XML_PARSE_DTDLOAD
+ xmlCtxtUseOptions(ctxt, XML_PARSE_DTDLOAD
| XML_PARSE_NOENT);
-// | XML_PARSE_NOCDATA);
-
- xmlParseDocument (ctxt);
-
- doc = ctxt->myDoc;
- ctxt->sax = NULL;
- xmlFreeParserCtxt (ctxt);
+ xmlParseDocument (ctxt);
+ doc = ctxt->myDoc;
+ ctxt->sax = NULL;
+ xmlFreeParserCtxt (ctxt);
+ } else {
+ rsserror = TRUE;
+ }
+ g_free(mime_type);
return doc;
}
@@ -711,20 +710,22 @@ tree_walk (xmlNodePtr root, RDF *r)
{
xmlNodePtr walk;
xmlNodePtr rewalk = root;
- xmlNodePtr channel = NULL;
- xmlNodePtr image = NULL;
+ xmlNodePtr channel = NULL, image = NULL, link = NULL;
GArray *item = g_array_new (TRUE, TRUE, sizeof (xmlNodePtr));
gchar *t;
gchar *charset;
gchar *md2, *tmp, *ver;
- /* check in-memory encoding first, fallback to transport encoding, which may or may not be correct */
+ /* check in-memory encoding first,
+ * fallback to transport encoding, which may or may not be correct
+ */
if (r->cache->charset == XML_CHAR_ENCODING_UTF8
|| r->cache->charset == XML_CHAR_ENCODING_ASCII) {
charset = NULL;
} else {
/* bad/missing encoding, fallback to latin1 (locale?) */
- charset = r->cache->encoding ? (gchar *)r->cache->encoding : (gchar *)"iso-8859-1";
+ charset = r->cache->encoding ?
+ (gchar *)r->cache->encoding : (gchar *)"iso-8859-1";
}
do {
@@ -736,18 +737,15 @@ tree_walk (xmlNodePtr root, RDF *r)
printf ("%p, %s\n", walk, walk->name);
#endif
if (strcasecmp ((char *)walk->name, "rdf") == 0) {
-// xmlNode *node = walk;
rewalk = walk->children;
walk = walk->next;
if (!r->type)
r->type = g_strdup("RDF");
r->type_id = RDF_FEED;
-// gchar *ver = xmlGetProp(node, "version");
if (r->version)
g_free(r->version);
r->version = g_strdup("(RSS 1.0)");
-// if (ver)
-// xmlFree(ver);
+ r->base = (gchar *)xmlGetProp(walk, (xmlChar *)"base");
continue;
}
if (strcasecmp ((char *)walk->name, "rss") == 0){
@@ -763,6 +761,7 @@ tree_walk (xmlNodePtr root, RDF *r)
r->version = g_strdup(ver);
if (ver)
xmlFree(ver);
+ r->base = (gchar *)xmlGetProp(node, (xmlChar *)"base");
continue;
}
if (strcasecmp ((char *)walk->name, "feed") == 0) {
@@ -781,6 +780,7 @@ tree_walk (xmlNodePtr root, RDF *r)
g_free(r->version);
r->version = g_strdup("1.0");
}
+ r->base = (gchar *)xmlGetProp(walk, (xmlChar *)"base");
}
/* This is the channel top level */
@@ -810,19 +810,10 @@ tree_walk (xmlNodePtr root, RDF *r)
fprintf(stderr, "ERROR:No channel definition.\n");
return NULL;
}
-// gchar *server = get_server_from_uri(r->uri);
-// gchar *fav = g_strconcat(server, "/favicon.ico", NULL);
-// g_free(server);
if (image != NULL)
r->image = (gchar *)layer_find(image->children, "url", NULL);
-// g_print("status image:%d\n", net_get_status(r->image, NULL));
-// if (404 == net_get_status(r->image, NULL))
-// r->image = NULL;
-
-// g_free(fav);
-
t = g_strdup(get_real_channel_name(r->uri, NULL));
//feed might be added with no validation
//so it could be named Untitled channel
@@ -859,10 +850,11 @@ tree_walk (xmlNodePtr root, RDF *r)
}
gchar *
-process_images(gchar *text, gchar *link, EMFormatHTML *format)
+process_images(gchar *text, gchar *link, gboolean decode, EMFormatHTML *format)
{
xmlChar *buff = NULL;
guint size = 0;
+ gchar *tname;
xmlDoc *src = (xmlDoc *)parse_html_sux (text, strlen(text));
if (src) {
xmlNode *doc = (xmlNode *)src;
@@ -871,14 +863,20 @@ process_images(gchar *text, gchar *link,
xmlChar *url = xmlGetProp(doc, (xmlChar *)"src");
if (url) {
if ((name = fetch_image_redraw((gchar *)url, link, format))) {
- gchar *tmp = g_strconcat(
- "file://",
- name, NULL);
- g_free(name);
+ if (decode) {
+ tname = decode_image_cache_filename(name);
+#if (EVOLUTION_VERSION >= 23000)
+ g_free(name);
+ name = g_filename_to_uri (tname, NULL, NULL);
+ g_free(tname);
+#else
+ name = tname;
+#endif
+ }
xmlSetProp(
doc, (xmlChar *)"src",
- (xmlChar *)tmp);
- g_free(tmp);
+ (xmlChar *)name);
+ g_free(name);
}
xmlFree(url);
}
@@ -891,7 +889,7 @@ process_images(gchar *text, gchar *link,
}
create_feed *
-parse_channel_line(xmlNode *top, gchar *feed_name, char *main_date, gchar **article_uid)
+parse_channel_line(xmlNode *top, gchar *feed_name, RDF *r, gchar **article_uid)
{
char *q = NULL;
char *b = NULL;
@@ -906,6 +904,12 @@ parse_channel_line(xmlNode *top, gchar *
GList *category = NULL;
create_feed *CF;
GList *attachments = NULL;
+ gchar *base = NULL, *main_date = NULL;
+
+ if (r) {
+ base = r->base;
+ main_date = r->maindate;
+ }
//we have to free this somehow
//<link></link>
@@ -1053,7 +1057,7 @@ parse_channel_line(xmlNode *top, gchar *
g_free(b);
if (feed_name) {
- gchar *buff = process_images(tmp, link, NULL);
+ gchar *buff = process_images(tmp, base ? base : link, FALSE, NULL);
g_free(tmp);
b = buff;
} else
@@ -1107,7 +1111,6 @@ update_channel(RDF *r)
create_feed *CF;
gchar *chn_name = r->title;
gchar *url = r->uri;
- gchar *main_date = r->maindate;
GArray *item = r->item;
GtkWidget *progress = r->progress;
gchar *buf, *safes, *feed_dir, *feed_name;
@@ -1153,8 +1156,8 @@ update_channel(RDF *r)
r->uids = g_array_new(TRUE, TRUE, sizeof(gpointer));
}
- CF = parse_channel_line(el->children,
- feed_name, main_date, &article_uid);
+ CF = parse_channel_line(el->children, feed_name,
+ r, &article_uid);
g_array_append_val(r->uids, article_uid);
if (!CF) continue;
CF->feedid = g_strdup(buf);
@@ -1200,7 +1203,8 @@ update_channel(RDF *r)
if (mail_folder) {
if ((rf->import || feed_new)
&& (!rf->cancel && !rf->cancel_all && !rf->display_cancel)) {
- rss_select_folder((gchar *)camel_folder_get_full_name(mail_folder));
+ rss_select_folder(
+ (gchar *)camel_folder_get_full_name(mail_folder));
if (feed_new) feed_new = FALSE;
}
#if (DATASERVER_VERSION >= 2031001)
--- evolution-rss-0.1.9//src/parser.h 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/parser.h 2010-06-29 21:01:02.000000000 +0200
@@ -47,7 +47,7 @@ xmlDoc *parse_html_sux (const char *buf,
xmlDoc *xml_parse_sux (const char *buf, int len);
create_feed *parse_channel_line(xmlNode *top,
gchar *feed_name,
- char *main_date,
+ RDF *r,
gchar **article_uid);
gchar *tree_walk (xmlNodePtr root, RDF *r);
xmlNode *html_find (xmlNode *node, gchar *match);
@@ -57,7 +57,7 @@ gchar *media_rss(xmlNode *node, gchar *s
gchar *dublin_core_rss(xmlNode *node, gchar *fail);
void syndication_rss(void);
gchar *wfw_rss(xmlNode *node, gchar *fail);
-gchar *process_images(gchar *text, gchar *link, EMFormatHTML *format);
+gchar *process_images(gchar *text, gchar *link, gboolean decode, EMFormatHTML *format);
#endif /*__RSS_H__*/
--- evolution-rss-0.1.9//src/rss.c 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/rss.c 2010-07-20 22:32:03.000000000 +0200
@@ -219,9 +219,9 @@ SoupCookieJar *rss_soup_jar;
#endif
extern guint rsserror;
gboolean single_pending = FALSE;
-//#if EVOLUTION_VERSION >= 22900
-//extern CamelSession *session;
-//#endif
+#if EVOLUTION_VERSION < 22900
+extern CamelSession *session;
+#endif
rssfeed *rf = NULL;
guint upgrade = 0; // set to 2 when initailization successfull
@@ -263,7 +263,9 @@ guint fallback_engine(void);
gchar *print_comments(gchar *url, gchar *stream, EMFormatHTML *format);
static void refresh_cb (GtkWidget *button, EMFormatHTMLPObject *pobject);
+#ifdef HAVE_WEBKIT
void webkit_set_history(gchar *base);
+#endif
gboolean show_webkit(GtkWidget *webkit);
void sync_folders(void);
@@ -496,19 +498,30 @@ browser_stream_write(CamelStream *stream
g_free(tmp);
line = NULL;
}
+#ifdef HAVE_WEBKIT
+#if (WEBKIT_VERSION >= 1001001)
webkit_web_view_load_string(
WEBKIT_WEB_VIEW(rf->mozembed),
str->str,
"text/html",
NULL,
base);
+#else
+ webkit_web_view_load_html_string(
+ WEBKIT_WEB_VIEW(rf->mozembed),
+ str->str,
+ base);
+#endif
+#endif
g_string_free(str, 1);
#if (DATASERVER_VERSION >= 2031001)
g_object_unref(in);
#else
camel_object_unref(in);
#endif
+#ifdef HAVE_WEBKIT
webkit_set_history(base);
+#endif
}
static void
@@ -541,7 +554,7 @@ textcb(NetStatusType status, gpointer st
progress = (NetStatusProgress*)statusdata;
if (progress->current > 0 && progress->total > 0) {
fraction = (float)progress->current / progress->total;
- g_print("%.2f%% ", fraction*100);
+ g_print("%.2f%% ", fraction);
}
while (gtk_events_pending())
gtk_main_iteration ();
@@ -581,13 +594,13 @@ user_pass_cb(RSS_AUTH *auth_info, gint r
g_hash_table_remove(rf->hruser, auth_info->url);
g_hash_table_insert(
- rf->hruser, auth_info->url,
+ rf->hruser, g_strdup(auth_info->url),
g_strdup(gtk_entry_get_text (GTK_ENTRY (auth_info->username))));
if (auth_info->pass)
g_hash_table_remove(rf->hrpass, auth_info->url);
- g_hash_table_insert(rf->hrpass, auth_info->url,
+ g_hash_table_insert(rf->hrpass, g_strdup(auth_info->url),
g_strdup(gtk_entry_get_text (GTK_ENTRY (auth_info->password))));
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (auth_info->rememberpass)))
@@ -607,12 +620,14 @@ user_pass_cb(RSS_AUTH *auth_info, gint r
break;
default:
rf->soup_auth_retry = TRUE;
- break;
+ soup_session_abort(auth_info->session);
+ goto out;
}
- if (soup_session_get_async_context(auth_info->session))
+ if (G_OBJECT_TYPE(auth_info->session) == SOUP_TYPE_SESSION_ASYNC) {
soup_session_unpause_message(
auth_info->session, auth_info->message);
- gtk_widget_destroy(GTK_WIDGET(dialog));
+ }
+out: gtk_widget_destroy(GTK_WIDGET(dialog));
g_free(auth_info);
}
@@ -787,13 +802,16 @@ web_auth_dialog(RSS_AUTH *auth_info)
if (!rf->hruser)
rf->hruser = g_hash_table_new_full(
- g_str_hash, g_str_equal, NULL, g_free);
+ g_str_hash, g_str_equal, g_free, g_free);
if (!rf->hrpass)
rf->hrpass = g_hash_table_new_full(
- g_str_hash, g_str_equal, NULL, g_free);
+ g_str_hash, g_str_equal, g_free, g_free);
+ d("auth url:%s\n", auth_info->url);
auth_info->user = g_hash_table_lookup(rf->hruser, auth_info->url);
auth_info->pass = g_hash_table_lookup(rf->hrpass, auth_info->url);
+ d("auth user:%s\n", auth_info->user);
+ d("auth pass:%s\n", auth_info->pass);
dialog = create_user_pass_dialog(auth_info);
//Bug 522147 â?? need to be able to pause synchronous I/O
if (G_OBJECT_TYPE(auth_info->session) != SOUP_TYPE_SESSION_ASYNC) {
@@ -817,6 +835,7 @@ proxy_auth_dialog(gchar *title, gchar *u
auth_info->pass = pass;
dialog = create_user_pass_dialog(auth_info);
result = gtk_dialog_run(GTK_DIALOG(dialog));
+ /*LEAK g_free(auth_info);*/
return TRUE;
}
@@ -1003,7 +1022,11 @@ reload_cb (GtkWidget *button, gpointer d
break;
case 1:
#ifdef HAVE_WEBKIT
+#if (WEBKIT_VERSION >= 1000003)
webkit_web_view_reload_bypass_cache(WEBKIT_WEB_VIEW(rf->mozembed));
+#else
+ webkit_web_view_reload(WEBKIT_WEB_VIEW(rf->mozembed));
+#endif
#endif
break;
}
@@ -1021,7 +1044,11 @@ rss_browser_set_hsize (GtkAdjustment *ad
void
rss_browser_set_hsize (GtkAdjustment *adj, gpointer data)
{
+#if GTK_VERSION >= 2014000
resize_pane_hsize = gtk_adjustment_get_page_size(adj);
+#else
+ resize_pane_hsize = (adj->page_size);
+#endif
}
void rss_browser_update_content (
@@ -1056,7 +1083,7 @@ rss_browser_update_content (
fi = g_new0(UB, 1);
stream = rss_cache_get(po->website);
if (!stream) {
- dp("HTTP cache miss\n");
+ d("HTTP cache miss\n");
stream = rss_cache_add(po->website);
fi->create = 1;
fi->stream = stream;
@@ -1071,7 +1098,7 @@ rss_browser_update_content (
NULL);
/*FIXME free fi*/
} else {
- g_print("cache read\n");
+ d("cache read\n");
fi->create = 0;
browser_stream_write(stream, po->website);
camel_stream_close(stream);
@@ -1124,6 +1151,12 @@ webkit_set_preferences(void)
g_object_set (settings, "enable-plugins",
gconf_client_get_bool(rss_gconf, GCONF_KEY_EMBED_PLUGIN, NULL),
NULL);
+ g_object_set (settings, "enable-java-applet",
+ gconf_client_get_bool(rss_gconf, GCONF_KEY_HTML_JAVA, NULL),
+ NULL);
+ g_object_set (settings, "enable-scripts",
+ gconf_client_get_bool(rss_gconf, GCONF_KEY_HTML_JS, NULL),
+ NULL);
#endif
webkit_web_view_set_full_content_zoom(
(WebKitWebView *)rf->mozembed, TRUE);
@@ -1322,9 +1355,12 @@ webkit_set_history(gchar *base)
webkit_web_view_get_back_forward_list (WEBKIT_WEB_VIEW(rf->mozembed));
WebKitWebHistoryItem *item =
webkit_web_history_item_new_with_data(base, "Untitled");
+#if (WEBKIT_VERSION >= 1001001)
webkit_web_back_forward_list_add_item(back_forward_list, item);
+#endif
}
+#if (WEBKIT_VERSION >= 1001007)
static void
webkit_history_status (WebKitWebView *view,
GParamSpec *spec,
@@ -1347,6 +1383,7 @@ webkit_history_status (WebKitWebView *vi
break;
}
}
+#endif
gboolean
webkit_over_link(WebKitWebView *web_view,
@@ -1364,21 +1401,21 @@ webkit_over_link(WebKitWebView *web_view
}
static void
-embed_zoom_in_cb (EShellView *shell,
+embed_zoom_in_cb (GtkWidget *w,
gpointer *data)
{
webkit_web_view_zoom_in((WebKitWebView*)rf->mozembed);
}
static void
-embed_zoom_out_cb (EShellView *shell,
+embed_zoom_out_cb (GtkWidget *w,
gpointer *data)
{
webkit_web_view_zoom_out((WebKitWebView *)rf->mozembed);
}
static void
-embed_zoom_100_cb (EShellView *shell,
+embed_zoom_100_cb (GtkWidget *w,
gpointer *data)
{
webkit_web_view_set_zoom_level((WebKitWebView *)rf->mozembed, 1);
@@ -1422,6 +1459,7 @@ void webkit_hook_actions(void);
void
webkit_hook_actions(void)
{
+#if EVOLUTION_VERSION >= 22900
EShellWindow *shell_window;
GtkAction *action;
const char *action_name;
@@ -1443,6 +1481,7 @@ webkit_hook_actions(void)
g_signal_connect (
action, "activate",
G_CALLBACK (embed_zoom_100_cb), NULL);
+#endif
}
#if 0
@@ -1621,7 +1660,7 @@ org_gnome_rss_browser (EMFormatHTML *efh
EMFormat *myf = (EMFormat *)efh;
gint width, height;
GtkAdjustment *adj;
-
+ gboolean online;
guint engine = fallback_engine();
#ifdef HAVE_WEBKIT
@@ -1648,12 +1687,14 @@ org_gnome_rss_browser (EMFormatHTML *efh
po->stopbut);
#endif
}
+#if (WEBKIT_VERSION >= 1001007)
g_signal_connect (
rf->mozembed,
"notify::load-status",
G_CALLBACK(webkit_history_status),
po);
#endif
+#endif
#ifdef HAVE_GECKO
if (engine == 2) {
@@ -1691,12 +1732,16 @@ org_gnome_rss_browser (EMFormatHTML *efh
}
#endif
- po->container = rf->mozembed;
+#if (DATASERVER_VERSION >= 2031002)
+ online = camel_session_get_online (session);
+#else
+ online = camel_session_is_online (session);
+#endif
#ifdef HAVE_WEBKIT
if (engine == 1) {
d("Render engine Webkit\n");
- if (!rf->online)
+ if (!online)
webkit_web_view_open(
WEBKIT_WEB_VIEW(rf->mozembed),
"about:blank");
@@ -1706,7 +1751,7 @@ org_gnome_rss_browser (EMFormatHTML *efh
#ifdef HAVE_GECKO
if (engine == 2) {
d("Render engine Gecko\n");
- if (!rf->online) {
+ if (!online) {
gtk_moz_embed_stop_load(
(GtkMozEmbed *)rf->mozembed);
gtk_moz_embed_load_url (
@@ -1725,15 +1770,31 @@ org_gnome_rss_browser (EMFormatHTML *efh
gtk_widget_show_all(rf->mozembed);
gtk_container_add ((GtkContainer *) eb, rf->mozembed);
- g_object_ref(rf->mozembed);
+ //appears distroying webkit's parent window results in crash
+ g_object_ref(eb);
+ po->container = eb;
rf->headers_mode = myf->mode;
+
+#if EVOLUTION_VERSION >= 23103
+ po->html = (GtkWidget *)em_format_html_get_web_view (efh);
+#else
po->html = GTK_WIDGET(efh->html);
+#endif
+
adj = gtk_scrolled_window_get_vadjustment(
- (GtkScrolledWindow *)gtk_widget_get_parent(GTK_WIDGET(efh->html)));
+ (GtkScrolledWindow *)gtk_widget_get_parent(po->html));
+#if GTK_VERSION >= 2014000
height = (int)gtk_adjustment_get_page_size(adj);
+#else
+ height = (int)(adj->page_size);
+#endif
adj = gtk_scrolled_window_get_hadjustment(
- (GtkScrolledWindow *)gtk_widget_get_parent(GTK_WIDGET(efh->html)));
+ (GtkScrolledWindow *)gtk_widget_get_parent(po->html));
+#if GTK_VERSION >= 2014000
width = (int)gtk_adjustment_get_page_size(adj);
+#else
+ width = (int)(adj->page_size);
+#endif
gtk_widget_set_size_request(rf->mozembed, width-32, height);
po->sh_handler = g_signal_connect(adj,
"changed",
@@ -1780,6 +1841,7 @@ org_gnome_rss_controls (EMFormatHTML *ef
GtkWidget *hbox2 = gtk_hbox_new (FALSE, 0);
GtkWidget *label3 = gtk_label_new ("");
GtkWidget *button, *button2, *button3, *button4, *button5;
+ gboolean online;
gchar *mem = g_strdup_printf(" <b>%s: </b>", _("Feed view"));
gtk_label_set_markup_with_mnemonic(GTK_LABEL(label3), mem);
@@ -1800,6 +1862,13 @@ org_gnome_rss_controls (EMFormatHTML *ef
g_signal_connect (button, "clicked", G_CALLBACK(summary_cb), efh);
gtk_box_pack_start (GTK_BOX (hbox2), button, TRUE, TRUE, 0);
gtk_widget_show_all (button);
+
+#if (DATASERVER_VERSION >= 2031002)
+ online = camel_session_get_online (session);
+#else
+ online = camel_session_is_online (session);
+#endif
+
if (rf->cur_format) {
button4 = po->backbut;
g_signal_connect (
@@ -1808,7 +1877,7 @@ org_gnome_rss_controls (EMFormatHTML *ef
G_CALLBACK(back_cb),
efh);
gtk_button_set_relief(GTK_BUTTON(button4), GTK_RELIEF_HALF);
- gtk_widget_set_sensitive (button4, rf->online);
+ gtk_widget_set_sensitive (button4, online);
gtk_widget_show (button4);
gtk_box_pack_start (
GTK_BOX (hbox2),
@@ -1821,7 +1890,7 @@ org_gnome_rss_controls (EMFormatHTML *ef
G_CALLBACK(forward_cb),
efh);
gtk_button_set_relief(GTK_BUTTON(button5), GTK_RELIEF_HALF);
- gtk_widget_set_sensitive (button5, rf->online);
+ gtk_widget_set_sensitive (button5, online);
gtk_widget_show (button5);
gtk_box_pack_start (GTK_BOX (hbox2), button5, TRUE, TRUE, 0);
button2 = po->stopbut;
@@ -1831,7 +1900,7 @@ org_gnome_rss_controls (EMFormatHTML *ef
G_CALLBACK(stop_cb),
efh);
gtk_button_set_relief(GTK_BUTTON(button2), GTK_RELIEF_HALF);
- gtk_widget_set_sensitive (button2, rf->online);
+ gtk_widget_set_sensitive (button2, online);
gtk_widget_show (button2);
gtk_box_pack_start (GTK_BOX (hbox2), button2, TRUE, TRUE, 0);
button3 = gtk_button_new_from_stock (GTK_STOCK_REFRESH);
@@ -1841,7 +1910,7 @@ org_gnome_rss_controls (EMFormatHTML *ef
G_CALLBACK(reload_cb),
po->website);
gtk_button_set_relief(GTK_BUTTON(button3), GTK_RELIEF_HALF);
- gtk_widget_set_sensitive (button3, rf->online);
+ gtk_widget_set_sensitive (button3, online);
gtk_widget_show (button3);
gtk_box_pack_start (GTK_BOX (hbox2), button3, TRUE, TRUE, 0);
}
@@ -1898,6 +1967,9 @@ free_rss_browser(EMFormatHTMLPObject *o)
gpointer key = g_hash_table_lookup(rf->key_session, po->website);
guint engine;
GtkAdjustment *adj;
+#if EVOLUTION_VERSION >= 23103
+ EWebView *web_view;
+#endif
d("key sess:%p\n", key);
if (key) {
@@ -1917,11 +1989,19 @@ free_rss_browser(EMFormatHTMLPObject *o)
gtk_widget_destroy(rf->mozembed);
rf->mozembed = NULL;
}
+
+#if EVOLUTION_VERSION >= 23103
+ web_view = em_format_html_get_web_view (po->format);
+ adj = gtk_scrolled_window_get_hadjustment(
+ (GtkScrolledWindow *)gtk_widget_get_parent(
+ GTK_WIDGET(web_view)));
+#else
adj = gtk_scrolled_window_get_hadjustment(
(GtkScrolledWindow *)gtk_widget_get_parent(
GTK_WIDGET(po->format->html)));
+#endif
g_signal_handler_disconnect(adj, po->sh_handler);
- gtk_widget_destroy(po->container);
+ g_object_unref(po->container);
g_free(po->website);
browser_fetching = 0;
}
@@ -2185,6 +2265,18 @@ void org_gnome_cooly_format_rss(void *ep
g_string_free(content, 1);
} else {
+ gchar *wids;
+ xmlDoc *src;
+ guint width;
+ GtkWidget *obj;
+#if EVOLUTION_VERSION >= 23103
+ EWebView *web_view;
+ web_view = em_format_html_get_web_view (emfh);
+ obj = (GtkWidget *)web_view;
+#else
+ obj = (GtkWidget *)emfh->html;
+#endif
+
d("normal html rendering\n");
buffer = g_byte_array_new ();
camel_stream_mem_set_byte_array (stream, buffer);
@@ -2208,45 +2300,41 @@ void org_gnome_cooly_format_rss(void *ep
} else
tmp = g_strdup((gchar *)(buffer->data));
- if (gconf_client_get_bool (rss_gconf,
- GCONF_KEY_IMAGE_RESIZE,
- NULL)) {
- gchar *wids;
- xmlDoc *src;
- guint width;
-
- GtkWidget *obj = (GtkWidget *)emfh->html;
- gtk_widget_get_allocation(obj, &alloc);
- width = alloc.width - 56;
- wids = g_strdup_printf("%d", width);
- src = (xmlDoc *)parse_html_sux(
- tmp,
- strlen(tmp));
- if (src) {
- xmlNode *doc = (xmlNode *)src;
- while ((doc = html_find(doc, (gchar *)"img"))) {
- int real_width = 0;
- xmlChar *url = xmlGetProp(
- doc,
- (xmlChar *)"src");
- //FIXME: this should run even if image_resize is not on
- gchar *real_image = verify_image(
- (gchar *)url,
- emfh);
- if (real_image) {
- xmlSetProp(
- doc,
- (xmlChar *)"src",
- (xmlChar *)real_image);
- g_free(real_image);
- }
+#if GTK_VERSION >= 2018000
+ gtk_widget_get_allocation(obj, &alloc);
+#else
+ alloc.width = obj->allocation.width;;
+#endif
+ width = alloc.width - 56;
+ wids = g_strdup_printf("%d", width);
+ src = (xmlDoc *)parse_html_sux(
+ tmp,
+ strlen(tmp));
+ if (src) {
+ xmlNode *doc = (xmlNode *)src;
+ while ((doc = html_find(doc, (gchar *)"img"))) {
+ int real_width = 0;
+ xmlChar *url = xmlGetProp(
+ doc,
+ (xmlChar *)"src");
+ gchar *real_image = verify_image(
+ (gchar *)url,
+ emfh);
+ if (real_image) {
+ xmlSetProp(
+ doc,
+ (xmlChar *)"src",
+ (xmlChar *)real_image);
+ }
+ if (gconf_client_get_bool (rss_gconf,
+ GCONF_KEY_IMAGE_RESIZE, NULL) && real_image) {
pix = gdk_pixbuf_new_from_file(
- (const char *)url,
+ (const char *)real_image+7, //skip scheme part
(GError **)NULL);
if (pix)
real_width = gdk_pixbuf_get_width(pix);
- d("url:%s\n", url);
+ d("real_image:%s\n", real_image);
d("width:%d\n", width);
d("real_width:%d\n", real_width);
@@ -2267,14 +2355,13 @@ void org_gnome_cooly_format_rss(void *ep
(xmlChar *)"width",
(xmlChar *)wids);
}
-pixdone: g_free(url);
+pixdone: g_free(real_image);
}
- xmlDocDumpMemory(src, &buff, (int*)&size);
- xmlFree(src);
}
- g_free(wids);
- } else
- buff=(xmlChar *)tmp;
+ xmlDocDumpMemory(src, &buff, (int*)&size);
+ xmlFree(src);
+ }
+ g_free(wids);
g_byte_array_free (buffer, 1);
#if (DATASERVER_VERSION >= 2031001)
@@ -2451,6 +2538,7 @@ void org_gnome_cooly_folder_refresh(void
gchar *folder_name;
gchar *main_folder = get_main_folder();
gchar *ofolder, *name, *fname, *key, *rss_folder;
+ gboolean online;
#if EVOLUTION_VERSION > 22900 //kb//
CamelFolder *folder;
EMFolderTree *folder_tree;
@@ -2458,7 +2546,6 @@ void org_gnome_cooly_folder_refresh(void
shell_view);
EActivity *taskid;
-
g_object_get (shell_sidebar, "folder-tree", &folder_tree, NULL);
folder = em_folder_tree_get_selected_folder (folder_tree);
g_return_if_fail (folder != NULL);
@@ -2489,16 +2576,22 @@ void org_gnome_cooly_folder_refresh(void
_("Fetching feed"),
(gchar *)g_hash_table_lookup(rf->hrname_r, key));
+#if (DATASERVER_VERSION >= 2031002)
+ online = camel_session_get_online (session);
+#else
+ online = camel_session_is_online (session);
+#endif
+
if (g_hash_table_lookup(rf->hre, key)
&& !rf->pending && !rf->feed_queue
- && !single_pending && rf->online) {
+ && !single_pending && online) {
single_pending = TRUE;
check_folders();
rf->err = NULL;
taskid = taskbar_op_message(name, key);
network_timeout();
if (!fetch_one_feed(fname, key, statuscb))
- taskbar_op_finish(taskid);
+ taskbar_op_finish(key);
single_pending = FALSE;
}
g_free(name);
@@ -2547,8 +2640,8 @@ void org_gnome_cooly_folder_icon(void *e
#endif
if (gconf_client_get_bool (rss_gconf, GCONF_KEY_FEED_ICON, NULL)) {
// if (g_file_test(feed_file, G_FILE_TEST_EXISTS)) {
- // unfortunately e_icon_factory_get_icon return broken image in case of error
- // we use gdk_pixbuf_new_from_file to test the validity of the image file
+ // unfortunately e_icon_factory_get_icon return broken image in case of error
+ // we use gdk_pixbuf_new_from_file to test the validity of the image file
#if (EVOLUTION_VERSION >= 22703)
if (display_folder_icon(t->store, key))
goto out;
@@ -2705,12 +2798,12 @@ prepare_hashes(void)
if (rf->hruser == NULL)
rf->hruser = g_hash_table_new_full(g_str_hash,
g_str_equal,
- NULL,
+ g_free,
g_free);
if (rf->hrpass == NULL)
rf->hrpass = g_hash_table_new_full(g_str_hash,
g_str_equal,
- NULL,
+ g_free,
g_free);
if (rf->hrname == NULL)
rf->hrname = g_hash_table_new_full(g_str_hash,
@@ -2766,6 +2859,27 @@ prepare_hashes(void)
g_str_equal,
g_free,
NULL);
+
+ if (!rf->activity) //keeping track of taskbar operations
+ rf->activity = g_hash_table_new_full(
+ g_str_hash,
+ g_str_equal,
+ NULL, NULL);
+ if (!rf->error_hash) //keeping trask of taskbar errors
+ rf->error_hash = g_hash_table_new_full(
+ g_str_hash,
+ g_str_equal,
+ g_free, NULL);
+
+ if (!rf->session)
+ rf->session = g_hash_table_new(
+ g_direct_hash, g_direct_equal);
+ if (!rf->abort_session)
+ rf->abort_session = g_hash_table_new(
+ g_direct_hash, g_direct_equal);
+ if (!rf->key_session)
+ rf->key_session = g_hash_table_new(
+ g_direct_hash, g_direct_equal);
}
void
@@ -2791,11 +2905,6 @@ finish_setup_feed(
gchar *tmsgkey;
GError *err = NULL;
gchar *tmsg = feed->tmsg;
-#if (EVOLUTION_VERSION >= 22900) //kb//
- EActivity *aid;
-#else
- guint aid;
-#endif
gpointer crc_feed = gen_md5(feed->feed_url);
if (rf->cancel_all || rf->import_cancel)
@@ -2972,22 +3081,6 @@ add:
if (rf->cancel_all || rf->import_cancel)
goto out;
- if (rf->import) {
- rf->import--;
- d("IMPORT:%d, chn:%s\n", rf->import, chn_name);
- progress++;
- update_progress_bar(rf->import);
- }
-
- if (!rf->import) {
- gtk_widget_destroy(rf->progress_dialog);
- rf->progress_bar = NULL;
- rf->progress_dialog = NULL;
- progress = 0;
- rf->display_cancel = 0;
- rf->import_cancel = 0;
- rf->cancel_all = 0;
- }
taskbar_op_set_progress(tmsgkey, tmsg, 0.9);
@@ -3047,6 +3140,23 @@ add:
_("Invalid Feed"));
out: rf->pending = FALSE;
+ if (rf->import) {
+ rf->import--;
+ d("IMPORT queue size:%d\n", rf->import);
+ progress++;
+ update_progress_bar(rf->import);
+ }
+
+ if (!rf->import) {
+ if (rf->progress_dialog)
+ gtk_widget_destroy(rf->progress_dialog);
+ rf->progress_bar = NULL;
+ rf->progress_dialog = NULL;
+ progress = 0;
+ rf->display_cancel = 0;
+ rf->import_cancel = 0;
+ rf->cancel_all = 0;
+ }
if (!rf->setup && feed->cancelable != NULL) {
void (*f)() = (GFunc)feed->cancelable;
f(feed->cancelable_arg);
@@ -3054,8 +3164,7 @@ out: rf->pending = FALSE;
void (*f)() = (GFunc)feed->ok;
f(feed->ok_arg);
}
- aid = g_hash_table_lookup(rf->activity, crc_feed);
- taskbar_op_finish(aid);
+ taskbar_op_finish(crc_feed);
g_free(crc_feed);
g_free(feed->feed_url);
if (feed->feed_name) g_free(feed->feed_name);
@@ -3076,7 +3185,6 @@ setup_feed(add_feed *feed)
taskbar_op_message(tmsg, gen_md5(feed->feed_url));
check_folders();
- prepare_hashes();
rf->setup = 0;
rf->pending = TRUE;
@@ -3088,7 +3196,7 @@ setup_feed(add_feed *feed)
fetch_unblocking(
feed->feed_url,
textcb,
- NULL,
+ g_strdup(feed->feed_url),
(gpointer)finish_setup_feed,
feed, // we need to dupe key here
1,
@@ -3172,10 +3280,7 @@ generic_finish_feed(rfMessage *msg, gpoi
gboolean deleted = 0;
GString *response;
RDF *r;
-#if (EVOLUTION_VERSION >= 22900) //kb//
- EActivity *aid;
-#else
- guint aid;
+#if (EVOLUTION_VERSION < 22900)
MailComponent *mc = mail_component_peek ();
#endif
@@ -3208,8 +3313,7 @@ generic_finish_feed(rfMessage *msg, gpoi
if (rf->feed_queue == 0) {
d("taskbar_op_finish()\n");
- aid = g_hash_table_lookup(rf->activity, key);
- taskbar_op_finish(aid);
+ taskbar_op_finish(key);
taskbar_op_finish(NULL);
rf->autoupdate = FALSE;
farticle=0;
@@ -3287,8 +3391,7 @@ generic_finish_feed(rfMessage *msg, gpoi
if (rf->info->data->gd)
gtk_widget_destroy((GtkWidget *)rf->info->data->gd);
}
- aid = g_hash_table_lookup(rf->activity, key);
- taskbar_op_finish(aid);
+ taskbar_op_finish(key);
taskbar_op_finish(NULL);
//clean data that might hang on rf struct
rf->sr_feed = NULL;
@@ -3323,21 +3426,21 @@ generic_finish_feed(rfMessage *msg, gpoi
xmlError *err = xmlGetLastError();
gchar *tmsg = g_strdup_printf("\n%s\nInvalid feed: %s",
(gchar *)user_data,
- err->message);
+ err ? err->message : _("illegal content type!"));
rss_error(user_data,
NULL,
_("Error while parsing feed."),
tmsg);
g_free(tmsg);
- goto out;
+ goto cleanup;
}
if (msg->status_code == SOUP_STATUS_CANCELLED)
- goto out;
+ goto cleanup;
if (!deleted) {
if (!user_data || !lookup_key(user_data))
- goto out;
+ goto cleanup;
r->uri = g_hash_table_lookup(
rf->hr, lookup_key(user_data));
@@ -3364,18 +3467,9 @@ generic_finish_feed(rfMessage *msg, gpoi
if (g_hash_table_lookup(rf->hrdel_feed, lookup_key(user_data)))
get_feed_age(r, user_data);
}
- if (r->cache)
- xmlFreeDoc(r->cache);
- if (r->type)
- g_free(r->type);
- if (r->version)
- g_free(r->version);
- if (r->uids)
- g_array_free(r->uids, TRUE);
}
//ftotal+=r->total;
update_sr_message();
- g_free(r);
g_string_free(response, 1);
//tout:
@@ -3404,8 +3498,7 @@ generic_finish_feed(rfMessage *msg, gpoi
if (rf->info->data->gd)
gtk_widget_destroy((GtkWidget *)rf->info->data->gd);
}
- aid = g_hash_table_lookup(rf->activity, key);
- taskbar_op_finish(aid);
+ taskbar_op_finish(key);
taskbar_op_finish(NULL);
//clean data that might hang on rf struct
rf->sr_feed = NULL;
@@ -3415,8 +3508,16 @@ generic_finish_feed(rfMessage *msg, gpoi
rf->info = NULL;
}
#endif
-out:
- if (chn_name) { //user_data
+cleanup:if (r->cache)
+ xmlFreeDoc(r->cache);
+ if (r->type)
+ g_free(r->type);
+ if (r->version)
+ g_free(r->version);
+ if (r->uids)
+ g_array_free(r->uids, TRUE);
+ g_free(r);
+out: if (chn_name) { //user_data
//not sure why it dies here
if (!rf->cancel && !rf->cancel_all)
g_free(chn_name); //user_data
@@ -3667,6 +3768,11 @@ fetch_comments(gchar *url, EMFormatHTML
gboolean
update_articles(gboolean disabler)
{
+#if (DATASERVER_VERSION >= 2031002)
+ gboolean online = camel_session_get_online (session);
+#else
+ gboolean online = camel_session_is_online (session);
+#endif
#if EVOLUTION_VERSION < 22900 //kb//
MailComponent *mc = mail_component_peek ();
#if EVOLUTION_VERSION > 22801
@@ -3677,7 +3783,7 @@ update_articles(gboolean disabler)
rf->cancel=1;
#endif
- if (!rf->pending && !rf->feed_queue && !rf->cancel_all && rf->online) {
+ if (!rf->pending && !rf->feed_queue && !rf->cancel_all && online) {
g_print("Reading RSS articles...\n");
rf->autoupdate = TRUE;
rf->pending = TRUE;
@@ -3882,12 +3988,11 @@ sync_folders(void)
return;
if (!g_hash_table_size(rf->feed_folders))
- return;
+ goto exit;
g_hash_table_foreach(rf->feed_folders,
(GHFunc)write_feeds_folder_line,
(gpointer *)f);
- fclose(f);
g_free(feed_file);
g_hash_table_destroy(rf->reversed_feed_folders);
rf->reversed_feed_folders = g_hash_table_new_full(g_str_hash,
@@ -3897,6 +4002,8 @@ sync_folders(void)
g_hash_table_foreach(rf->feed_folders,
(GHFunc)populate_reversed,
rf->reversed_feed_folders);
+exit: fclose(f);
+ return;
}
/*construct feed_folders file with rename allocation
@@ -4115,8 +4222,13 @@ custom_update_articles(CDATA *cdata)
{
GError *err = NULL;
gchar *msg;
- //if (!rf->pending && !rf->feed_queue && rf->online)
- if (rf->online) {
+#if (DATASERVER_VERSION >= 2031002)
+ gboolean online = camel_session_get_online (session);
+#else
+ gboolean online = camel_session_is_online (session);
+#endif
+ //if (!rf->pending && !rf->feed_queue && online)
+ if (online) {
g_print("Fetch (custom) RSS articles...\n");
check_folders();
rf->err = NULL;
@@ -4126,7 +4238,8 @@ custom_update_articles(CDATA *cdata)
// check if we're enabled and no cancelation signal pending
// and no imports pending
dp("cdata->key:%s\n", (gchar *)cdata->key);
- if (g_hash_table_lookup(rf->hre, lookup_key(cdata->key)) && !rf->cancel && !rf->import) {
+ if (g_hash_table_lookup(rf->hre, lookup_key(cdata->key))
+ && !rf->cancel && !rf->import) {
d("\nFetching: %s..%s\n",
(char *)g_hash_table_lookup(rf->hr,
lookup_key(cdata->key)),
@@ -4216,7 +4329,11 @@ custom_fetch_feed(gpointer key, gpointer
void evo_window_popup(GtkWidget *win)
{
gint x, y, sx, sy, new_x, new_y;
+#if GTK_VERSION >= 2014000
GdkWindow *window = gtk_widget_get_window(win);
+#else
+ GdkWindow *window = win->window;
+#endif
g_return_if_fail(win != NULL);
g_return_if_fail(window != NULL);
@@ -4359,17 +4476,6 @@ custom_feed_timeout(void)
statuscb);
}
-static void
-rss_online(CamelSession *o, void *event_data, void *data)
-{
- d("Apoc, are we online?... Almost.\n");
-#if (DATASERVER_VERSION >= 2031002)
- rf->online = camel_session_get_online (o);
-#else
- rf->online = camel_session_is_online (o);
-#endif
-}
-
#if EVOLUTION_VERSION < 22900 //KB//
struct __EShellPrivate {
/* IID for registering the object on OAF. */
@@ -4440,27 +4546,11 @@ void org_gnome_cooly_rss_startup(void *e
G_CALLBACK(store_folder_renamed), NULL);
g_signal_connect(store, "folder_deleted",
G_CALLBACK(store_folder_deleted), NULL);
- g_signal_connect(
-#if EVOLUTION_VERSION < 22900 //kb//
- mail_component_peek_session(NULL),
-#else
- session,
-#endif
- "online", G_CALLBACK(rss_online), NULL);
#else
camel_object_hook_event(store, "folder_renamed",
(CamelObjectEventHookFunc)store_folder_renamed, NULL);
camel_object_hook_event(store, "folder_deleted",
(CamelObjectEventHookFunc)store_folder_deleted, NULL);
- camel_object_hook_event(
-#if EVOLUTION_VERSION < 22900 //kb//
- mail_component_peek_session(NULL),
-#else
- session,
-#endif
- "online",
- (CamelObjectEventHookFunc)rss_online,
- NULL);
#endif
}
@@ -4944,16 +5034,7 @@ e_plugin_lib_enable(EPlugin *ep, int ena
/*D-BUS init*/
rf->bus = init_dbus ();
#endif
- if (!rf->activity) //keeping track of taskbar operations
- rf->activity = g_hash_table_new_full(
- g_str_hash,
- g_str_equal,
- NULL, NULL);
- if (!rf->error_hash) //keeping trask of taskbar errors
- rf->error_hash = g_hash_table_new_full(
- g_str_hash,
- g_str_equal,
- g_free, NULL);
+ prepare_hashes();
//there is no shutdown for e-plugin yet.
atexit(rss_finalize);
render = GPOINTER_TO_INT(
@@ -5048,6 +5129,7 @@ create_mail(create_feed *CF)
tmp = decode_entities(CF->subj);
tmp2 = markup_decode(tmp);
safe_subj = camel_header_encode_string((unsigned char *)tmp2);
+ g_strdelimit(safe_subj, "\n", ' ');
camel_mime_message_set_subject(new, safe_subj);
g_free(tmp);
g_free(tmp2);
@@ -5238,10 +5320,10 @@ create_mail(create_feed *CF)
&& !rf->import
&& !CF->encl
&& !g_list_length(CF->attachments)) { //do not filter enclosure at this time nor media files
- g_warning("FILTER DISABLED\n");
-/* filter_uids = g_ptr_array_sized_new(1);
+// g_warning("FILTER DISABLED\n");
+ filter_uids = g_ptr_array_sized_new(1);
g_ptr_array_add(filter_uids, appended_uid);
- mail_filter_on_demand (mail_folder, filter_uids);*/
+ mail_filter_on_demand (mail_folder, filter_uids);
/* FIXME do not know how to free this */
// g_object_weak_ref((GObject *)filter_uids, free_filter_uids, NULL);
}
@@ -5389,6 +5471,8 @@ process_attachments(create_feed *CF)
do {
gchar *tmpdir, *name;
+ if (!strlen(l->data))
+ continue;
if (g_list_find_custom(rf->enclist, l->data,
(GCompareFunc)strcmp))
continue;
@@ -5584,7 +5668,7 @@ display_comments (RDF *r, EMFormatHTML *
xmlNodePtr root = xmlDocGetRootElement (r->cache);
if (tree_walk (root, r)) {
gchar *comments = update_comments(r);
- tmp = process_images(comments, r->uri, format);
+ tmp = process_images(comments, r->uri, TRUE, format);
g_free(comments);
if (r->maindate)
g_free(r->maindate);
@@ -5732,32 +5816,33 @@ get_feed_age(RDF *r, gpointer name)
uids = camel_folder_get_uids (folder);
camel_folder_freeze(folder);
for (i = 0; i < uids->len; i++) {
- g_print("notpresent\n");
el = NULL;
match = FALSE;
message = camel_folder_get_message(folder, uids->pdata[i], NULL);
- g_print("got message\n");
if (message == NULL)
break;
- g_print("got message\n");
feedid = (gchar *)camel_medium_get_header (
CAMEL_MEDIUM(message),
"X-Evolution-Rss-Feed-id");
- g_print("got header\n");
- if (!r->uids)
+ if (!r->uids) {
+#if (DATASERVER_VERSION >= 2031001)
+ g_object_unref (message);
+#else
+ camel_object_unref (message);
+#endif
break;
+ }
for (j=0; NULL != (el = g_array_index(r->uids, gpointer, j)); j++) {
if (!g_ascii_strcasecmp(g_strstrip(feedid), g_strstrip(el))) {
match = TRUE;
- g_object_unref(message);
break;
}
}
if (!match) {
- g_print("info\n");
+// g_print("info\n");
info = camel_folder_get_message_info(folder, uids->pdata[i]);
- g_print("info done\n");
+// g_print("info done\n");
flags = camel_message_info_flags(info);
if ((del_unread) && !(flags & CAMEL_MESSAGE_FLAGGED)) {
gchar *feed_dir, *feed_name;
@@ -5772,24 +5857,26 @@ get_feed_age(RDF *r, gpointer name)
}
camel_folder_free_message_info(folder, info);
}
- g_object_unref(message);
+#if (DATASERVER_VERSION >= 2031001)
+ g_object_unref (message);
+#else
+ camel_object_unref (message);
+#endif
}
camel_folder_free_uids (folder, uids);
camel_folder_sync (folder, TRUE, NULL);
camel_folder_thaw(folder);
camel_folder_expunge (folder, NULL);
- g_print("notpresent done\n");
}
if (del_feed == 2) {
guint del_days = GPOINTER_TO_INT(g_hash_table_lookup(rf->hrdel_days, key));
- g_print("feed ==2\n");
uids = camel_folder_get_uids (folder);
camel_folder_freeze(folder);
for (i = 0; i < uids->len; i++) {
- g_print("get info\n");
info = camel_folder_get_message_info(folder, uids->pdata[i]);
- g_print("got info\n");
- if (info && rf->current_uid && strcmp(rf->current_uid, uids->pdata[i])) {
+ if (info == NULL)
+ continue;
+ if (rf->current_uid && strcmp(rf->current_uid, uids->pdata[i])) {
date = camel_message_info_date_sent(info);
if (date < now - del_days * 86400) {
flags = camel_message_info_flags(info);
@@ -5804,19 +5891,17 @@ get_feed_age(RDF *r, gpointer name)
camel_folder_delete_message(folder, uids->pdata[i]);
}
}
- camel_folder_free_message_info(folder, info);
}
+ camel_folder_free_message_info(folder, info);
}
camel_folder_free_uids (folder, uids);
camel_folder_sync (folder, TRUE, NULL);
camel_folder_thaw(folder);
camel_folder_expunge (folder, NULL);
- g_print("feed ==2 done\n");
}
if (del_feed == 1) {
guint del_messages = GPOINTER_TO_INT(g_hash_table_lookup(rf->hrdel_messages, key));
guint total = camel_folder_get_message_count(folder);
- g_print("del?\n");
i=1;
while (del_messages < camel_folder_get_message_count(folder)
- camel_folder_get_deleted_message_count(folder) && i <= total) {
--- evolution-rss-0.1.9//src/rss-cache.c 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/rss-cache.c 2010-06-08 16:32:44.000000000 +0200
@@ -99,10 +99,41 @@ rss_cache_get(gchar *url)
return camel_data_cache_get(cache, HTTP_CACHE_PATH, url, NULL);
}
+#if DATASERVER_VERSION <= 2025004
+#define CAMEL_DATA_CACHE_BITS (6)
+#define CAMEL_DATA_CACHE_MASK ((1<<CAMEL_DATA_CACHE_BITS)-1)
+
+static char *
+data_cache_path(
+ CamelDataCache *cdc, int create, const char *path, const char *key)
+{
+ char *dir, *real;
+ char *tmp = NULL;
+ guint32 hash;
+
+ hash = g_str_hash(key);
+ hash = (hash>>5)&CAMEL_DATA_CACHE_MASK;
+ dir = alloca(strlen(cdc->path) + strlen(path) + 8);
+ sprintf(dir, "%s/%s/%02x", cdc->path, path, hash);
+ tmp = camel_file_util_safe_filename(key);
+ if (!tmp)
+ return NULL;
+ real = g_strdup_printf("%s/%s", dir, tmp);
+ g_free(tmp);
+
+ return real;
+}
+#endif
+
+
gchar*
rss_cache_get_filename(gchar *url)
{
+#if DATASERVER_VERSION <= 2025004
+ return data_cache_path(cache, FALSE, HTTP_CACHE_PATH, url);
+#else
return camel_data_cache_get_filename(cache, HTTP_CACHE_PATH, url, NULL);
+#endif
}
CamelStream*
--- evolution-rss-0.1.9//src/rss-config.c 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/rss-config.c 2010-07-09 17:01:15.000000000 +0200
@@ -17,6 +17,7 @@
*/
#include <gconf/gconf.h>
+#include <gconf/gconf-client.h>
#include <glib.h>
#include <glib/gi18n-lib.h>
#include <stdio.h>
@@ -558,13 +559,12 @@ get_main_folder(void)
g_free(feed_dir);
if (g_file_test(feed_file, G_FILE_TEST_EXISTS)) {
FILE *f = fopen(feed_file, "r");
- if (f) {
- if (fgets(mf, 511, f) != NULL) {
- fclose(f);
- g_free(feed_file);
- return g_strdup(mf);
- }
+ if (f && fgets(mf, 511, f) != NULL) {
+ fclose(f);
+ g_free(feed_file);
+ return g_strdup(mf);
}
+ fclose(f);
}
g_free(feed_file);
return g_strdup(DEFAULT_FEEDS_FOLDER);
@@ -640,10 +640,10 @@ migrate_crc_md5(const char *name, gchar
(void)fseek(fw, 0L, SEEK_SET);
fwrite(rfeed, strlen(rfeed), 1, fw);
}
- fclose(fw);
unlink(feed_name);
}
- fclose(fr);
+ if (fr) fclose(fr);
+ if (fw) fclose(fw);
}
g_free(feed_name);
feed_name = g_build_path(G_DIR_SEPARATOR_S, feed_dir, crc2, NULL);
@@ -658,11 +658,10 @@ migrate_crc_md5(const char *name, gchar
(void)fseek(fw, 0L, SEEK_SET);
fwrite(rfeed, strlen(rfeed), 1, fw);
}
- fclose(fw);
unlink(feed_name);
}
- fclose(fr);
-
+ if (fr) fclose(fr);
+ if (fw) fclose(fw);
}
g_free(feed_name);
--- evolution-rss-0.1.9//src/rss-config-factory.c 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/rss-config-factory.c 2010-07-20 22:32:03.000000000 +0200
@@ -65,6 +65,7 @@ extern int rss_verbose_debug;
#include "network-soup.h"
#include "notification.h"
+GHashTable *tmphash = NULL;
static guint feed_enabled = 0;
static guint feed_validate = 0;
static guint feed_html = 0;
@@ -557,7 +558,7 @@ build_dialog_add(gchar *url, gchar *feed
checkbutton1 = GTK_WIDGET (gtk_builder_get_object(gui, "html_check"));
gtk_toggle_button_set_active (
GTK_TOGGLE_BUTTON (checkbutton1),
- 1-fhtml);
+ fhtml);
checkbutton2 = GTK_WIDGET (gtk_builder_get_object(gui, "enabled_check"));
gtk_toggle_button_set_active (
@@ -705,7 +706,13 @@ build_dialog_add(gchar *url, gchar *feed
ok = GTK_WIDGET (
gtk_builder_get_object(gui, "ok_button"));
+#if GTK_VERSION < 2018000
+ GTK_WIDGET_SET_FLAGS (
+ ok,
+ GTK_CAN_DEFAULT);
+#else
gtk_widget_set_can_default (ok, TRUE);
+#endif
d("/*Gtk-CRITICAL **: gtk_box_pack: assertion `child->parent == NULL' failed*/");
gtk_dialog_add_action_widget (
(GtkDialog *)dialog1,
@@ -718,7 +725,13 @@ build_dialog_add(gchar *url, gchar *feed
GTK_DIALOG (dialog1),
cancel,
GTK_RESPONSE_CANCEL);
+#if GTK_VERSION < 2018000
+ GTK_WIDGET_SET_FLAGS (
+ cancel,
+ GTK_CAN_DEFAULT);
+#else
gtk_widget_set_can_default (cancel, TRUE);
+#endif
gtk_widget_add_accelerator (
ok,
@@ -780,7 +793,6 @@ actions_dialog_add(add_feed *feed, gchar
gtk_entry_get_text(GTK_ENTRY(entry1)));
fhtml = gtk_toggle_button_get_active (
GTK_TOGGLE_BUTTON (checkbutton1));
- fhtml ^= 1;
feed->fetch_html = fhtml;
feed->enabled = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(checkbutton2));
@@ -899,12 +911,21 @@ feeds_dialog_add(GtkDialog *d, gpointer
NULL);
#endif
progress = gtk_progress_bar_new();
+#if GTK_VERSION >= 2014000
gtk_box_pack_start(
GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(msg_feeds))),
progress,
FALSE,
FALSE,
0);
+#else
+ gtk_box_pack_start(
+ GTK_BOX(GTK_DIALOG(msg_feeds)->vbox),
+ progress,
+ FALSE,
+ FALSE,
+ 0);
+#endif
gtk_progress_bar_set_fraction(
(GtkProgressBar *)progress,
0);
@@ -1292,7 +1313,11 @@ remove_feed_dialog(gchar *msg)
#endif
gtk_window_set_keep_above(GTK_WINDOW(dialog1), TRUE);
+#if GTK_VERSION >= 2014000
dialog_vbox1 = gtk_dialog_get_content_area(GTK_DIALOG (dialog1));
+#else
+ dialog_vbox1 = GTK_DIALOG (dialog1)->vbox;
+#endif
gtk_widget_show (dialog_vbox1);
vbox1 = gtk_vbox_new (FALSE, 10);
@@ -1327,7 +1352,11 @@ remove_feed_dialog(gchar *msg)
FALSE,
0);
+#if GTK_VERSION >= 2014000
dialog_action_area1 = gtk_dialog_get_action_area(GTK_DIALOG (dialog1));
+#else
+ dialog_action_area1 = GTK_DIALOG (dialog1)->action_area;
+#endif
gtk_widget_show (dialog_action_area1);
gtk_button_box_set_layout (
GTK_BUTTON_BOX (dialog_action_area1),
@@ -1396,12 +1425,21 @@ process_dialog_edit(add_feed *feed, gcha
NULL);
#endif
progress = gtk_progress_bar_new();
+#if GTK_VERSION >= 2014000
gtk_box_pack_start(
GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(msg_feeds))),
progress,
FALSE,
FALSE,
0);
+#else
+ gtk_box_pack_start(
+ GTK_BOX(GTK_DIALOG(msg_feeds)->vbox),
+ progress,
+ FALSE,
+ FALSE,
+ 0);
+#endif
gtk_progress_bar_set_fraction((GtkProgressBar *)progress, 0);
/* xgettext:no-c-format */
gtk_progress_bar_set_text((GtkProgressBar *)progress, _("0% done"));
@@ -1554,7 +1592,7 @@ feeds_dialog_edit(GtkDialog *d, gpointer
gtk_widget_destroy(feed->dialog);
process_dialog_edit(feed, name, feed_name);
}
- if (feed->feed_url)
+ if (feed && feed->feed_url)
store_redraw(GTK_TREE_VIEW(rf->treeview));
}
}
@@ -1589,18 +1627,20 @@ import_one_feed(gchar *url, gchar *title
feed->prefix = g_strdup(prefix);
rf->progress_bar = import_progress;
rf->progress_dialog = import_dialog;
- if (g_hash_table_find(
- rf->hr,
- check_if_match,
- feed->feed_url)) {
+ if ((g_hash_table_find(rf->hr, check_if_match,feed->feed_url))
+ || (g_hash_table_find(tmphash, check_if_match, feed->feed_url))) {
rss_error(
title,
feed->feed_name,
_("Error adding feed."),
_("Feed already exists!"));
rf->import--;
- } else
+ } else {
setup_feed(feed);
+ g_hash_table_insert(tmphash,
+ g_strdup(url),
+ g_strdup(url));
+ }
/* this allows adding feeds somewhat synchronous way
* it is very convenient to be able to cancel importing
@@ -1664,7 +1704,9 @@ error: rss_error(NULL,
goto out;
}
doc = src;
- msg = g_strdup(_("Importing feeds..."));
+ tmp = g_path_get_basename(file);
+ msg = g_strdup_printf("%s: %s", _("Importing"), tmp);
+ g_free(tmp);
#if EVOLUTION_VERSION < 22904
import_dialog = e_error_new(
GTK_WINDOW(rf->preferences),
@@ -1688,6 +1730,7 @@ error: rss_error(NULL,
NULL);
import_label = gtk_label_new(_("Please wait"));
import_progress = gtk_progress_bar_new();
+#if GTK_VERSION >= 2014000
gtk_box_pack_start(
GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(import_dialog))),
import_label,
@@ -1700,6 +1743,20 @@ error: rss_error(NULL,
FALSE,
FALSE,
0);
+#else
+ gtk_box_pack_start(
+ GTK_BOX(GTK_DIALOG(import_dialog)->vbox),
+ import_label,
+ FALSE,
+ FALSE,
+ 0);
+ gtk_box_pack_start(
+ GTK_BOX(GTK_DIALOG(import_dialog)->vbox),
+ import_progress,
+ FALSE,
+ FALSE,
+ 0);
+#endif
gtk_widget_show_all(import_dialog);
g_free(msg);
if ((src = src->children)) {
@@ -1767,6 +1824,12 @@ error: rss_error(NULL,
src = src->children;
maintitle = (gchar *)layer_find(src, "title", NULL);
rf->import=2;
+ if (!tmphash)
+ tmphash = g_hash_table_new_full(
+ g_str_hash,
+ g_str_equal,
+ g_free,
+ g_free);
progress = 0;
rf->display_cancel=0; //clean this signal - as by this time we already cancel all displaying feed
while (src) {
@@ -1877,6 +1940,7 @@ fail: g_free(rssprefix);
}
goto out;
}
+ g_print("MARK #1\n");
while ((src = iterate_import_file(src, &url, &name, type))) {
if (url && strlen(url)) {
@@ -1906,7 +1970,9 @@ fail: g_free(rssprefix);
}
while (gtk_events_pending ())
gtk_main_iteration ();
-out: //prevent reseting queue before its time dues do async operations
+out: g_hash_table_destroy(tmphash);
+ tmphash=NULL;
+ //prevent reseting queue before its time dues do async operations
if (rf->import) rf->import -= 2;
rf->import_cancel = 0;
if (maintitle) xmlFree(maintitle);
@@ -2114,11 +2180,20 @@ create_import_dialog (void)
GTK_WINDOW (import_file_select),
GDK_WINDOW_TYPE_HINT_DIALOG);
+#if GTK_VERSION >= 2014000
dialog_vbox5 = gtk_dialog_get_content_area(GTK_DIALOG (import_file_select));
+#else
+ dialog_vbox5 = GTK_DIALOG (import_file_select)->vbox;
+#endif
gtk_widget_show (dialog_vbox5);
+#if GTK_VERSION >= 2014000
dialog_action_area5 = gtk_dialog_get_action_area(
GTK_DIALOG (import_file_select));
+#else
+ dialog_action_area5 = GTK_DIALOG (import_file_select)->action_area;
+#endif
+
gtk_widget_show (dialog_action_area5);
gtk_button_box_set_layout (
GTK_BUTTON_BOX (dialog_action_area5),
@@ -2130,9 +2205,15 @@ create_import_dialog (void)
GTK_DIALOG (import_file_select),
button1,
GTK_RESPONSE_CANCEL);
+#if GTK_VERSION < 2018000
+ GTK_WIDGET_SET_FLAGS (
+ button1,
+ GTK_CAN_DEFAULT);
+#else
gtk_widget_set_can_default (
button1,
TRUE);
+#endif
button2 = gtk_button_new_from_stock ("gtk-open");
gtk_widget_show (button2);
@@ -2140,7 +2221,13 @@ create_import_dialog (void)
GTK_DIALOG (import_file_select),
button2,
GTK_RESPONSE_OK);
+#if GTK_VERSION < 2018000
+ GTK_WIDGET_SET_FLAGS (
+ button2,
+ GTK_CAN_DEFAULT);
+#else
gtk_widget_set_can_default(button2, TRUE);
+#endif
gtk_widget_grab_default (button2);
return import_file_select;
@@ -2183,11 +2270,19 @@ create_export_dialog (void)
GTK_WINDOW (export_file_select),
GDK_WINDOW_TYPE_HINT_DIALOG);
+#if GTK_VERSION >= 2014000
vbox26 = gtk_dialog_get_content_area(GTK_DIALOG (export_file_select));
+#else
+ vbox26 = GTK_DIALOG (export_file_select)->vbox;
+#endif
gtk_widget_show (vbox26);
+#if GTK_VERSION >= 2014000
hbuttonbox1 = gtk_dialog_get_action_area(
GTK_DIALOG (export_file_select));
+#else
+ hbuttonbox1 = GTK_DIALOG (export_file_select)->action_area;
+#endif
gtk_widget_show (hbuttonbox1);
gtk_button_box_set_layout (
GTK_BUTTON_BOX (hbuttonbox1),
@@ -2199,14 +2294,25 @@ create_export_dialog (void)
GTK_DIALOG (export_file_select),
button3,
GTK_RESPONSE_CANCEL);
+#if GTK_VERSION < 2018000
+ GTK_WIDGET_SET_FLAGS (
+ button3,
+ GTK_CAN_DEFAULT);
+#else
gtk_widget_set_can_default(button3, TRUE);
-
+#endif
button4 = gtk_button_new_from_stock ("gtk-save");
gtk_widget_show (button4);
gtk_dialog_add_action_widget (
GTK_DIALOG (export_file_select),
button4, GTK_RESPONSE_OK);
+#if GTK_VERSION < 2018000
+ GTK_WIDGET_SET_FLAGS (
+ button4,
+ GTK_CAN_DEFAULT);
+#else
gtk_widget_set_can_default(button4, TRUE);
+#endif
gtk_widget_grab_default (button4);
return export_file_select;
@@ -2491,7 +2597,11 @@ export_opml(gchar *file)
// g_signal_connect(import_dialog, "response", G_CALLBACK(import_dialog_response), NULL);
import_label = gtk_label_new(_("Please wait"));
import_progress = gtk_progress_bar_new();
+#if GTK_VERSION >= 2014000
content_area = gtk_dialog_get_content_area(GTK_DIALOG(import_dialog));
+#else
+ content_area = GTK_DIALOG(import_dialog)->vbox;
+#endif
gtk_box_pack_start(
GTK_BOX(content_area),
import_label,
@@ -2948,10 +3058,17 @@ e_plugin_lib_get_configure_widget (EPlug
"rss-html-rendering.ui",
NULL);
ui->xml = gtk_builder_new ();
+#if GTK_VERSION >= 2014000
if (!gtk_builder_add_objects_from_file (ui->xml, uifile, toplevel, &error)) {
g_warning ("Couldn't load builder file: %s", error->message);
g_error_free (error);
}
+#else
+ g_warning("gtk too old! cannot create ui file. need >= 2.14\n");
+ g_free(ui);
+ // and not very interesed to back port this
+ return NULL;
+#endif
g_free (uifile);
ui->combobox = GTK_WIDGET (gtk_builder_get_object(ui->xml, "hbox1"));
@@ -3192,9 +3309,9 @@ void rss_folder_factory_commit (EPlugin
guint i=0;
gchar *key = NULL;
- add_feed *feed = (add_feed *)g_object_get_data((GObject *)epl, "add-feed");
- gchar *url = (gchar *)g_object_get_data((GObject *)epl, "url");
- gchar *ofolder = (gchar *)g_object_get_data((GObject *)epl, "ofolder");
+ add_feed *feed = (add_feed *)g_object_get_data((GObject *)target->config->widget, "add-feed");
+ gchar *url = (gchar *)g_object_get_data((GObject *)target->config->widget, "url");
+ gchar *ofolder = (gchar *)g_object_get_data((GObject *)target->config->widget, "ofolder");
EMConfigTargetFolder *targetfolder =
(EMConfigTargetFolder *)target->config->target;
@@ -3238,7 +3355,6 @@ void rss_folder_factory_commit (EPlugin
feed->feed_url = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry1)));
fhtml = gtk_toggle_button_get_active (
GTK_TOGGLE_BUTTON (checkbutton1));
- fhtml ^= 1;
feed->fetch_html = fhtml;
feed->enabled = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(checkbutton2));
@@ -3305,9 +3421,9 @@ void rss_folder_factory_commit (EPlugin
g_hash_table_remove(rf->hrpass, url);
if (auth_enabled) {
- g_hash_table_insert(rf->hruser, url,
+ g_hash_table_insert(rf->hruser, g_strdup(url),
g_strdup(gtk_entry_get_text (GTK_ENTRY (authuser))));
- g_hash_table_insert(rf->hrpass, url,
+ g_hash_table_insert(rf->hrpass, g_strdup(url),
g_strdup(gtk_entry_get_text (GTK_ENTRY (authpass))));
save_up(url);
} else
@@ -3370,12 +3486,12 @@ rss_folder_factory (EPlugin *epl, EConfi
NULL,
0);
g_object_set_data_full (
- G_OBJECT (epl),
+ G_OBJECT (data->parent),
"add-feed",
feed,
NULL);
- g_object_set_data_full (G_OBJECT (epl), "url", url, NULL);
- g_object_set_data_full (G_OBJECT (epl), "ofolder", ofolder, NULL);
+ g_object_set_data_full (G_OBJECT (data->parent), "url", url, NULL);
+ g_object_set_data_full (G_OBJECT (data->parent), "ofolder", ofolder, NULL);
ok = GTK_WIDGET (
gtk_builder_get_object(feed->gui, "ok_button"));
--- evolution-rss-0.1.9//src/rss.h 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/rss.h 2010-06-29 21:01:02.000000000 +0200
@@ -68,6 +68,7 @@
#define NETWORK_TIMEOUT (180000)
typedef struct _RDF {
+ gchar *base;
char *uri;
char *html;
xmlDocPtr cache;
--- evolution-rss-0.1.9//src/rss-image.c 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/rss-image.c 2010-07-20 22:32:03.000000000 +0200
@@ -88,6 +88,7 @@ update_feed_image(RDF *r)
dup_auth_data(r->uri, image);
fi->feed_fs = feed_fs;
fi->key = g_strdup(key);
+ d("call finish_create_icon_stream\n");
fetch_unblocking(image,
textcb,
NULL,
@@ -103,6 +104,7 @@ update_feed_image(RDF *r)
gchar *server = get_server_from_uri(r->uri);
//authentication data might be different
dup_auth_data(r->uri, server);
+ d("call finish_update_feed_image\n");
fetch_unblocking(
server,
textcb,
@@ -450,6 +452,50 @@ out: g_free(img_file);
}
#endif
+gchar *
+decode_image_cache_filename(gchar *name)
+{
+ gsize size;
+ gchar *csum, *tname;
+ gchar *tmp;
+ tmp = (gchar *)g_base64_decode(name+4, &size);
+ csum = g_compute_checksum_for_string(G_CHECKSUM_SHA1,
+ tmp, -1);
+ g_free(tmp);
+ tname = rss_cache_get_filename(csum);
+ g_free(csum);
+ return tname;
+}
+
+gboolean image_is_valid(gchar *image);
+
+gboolean
+file_is_image(gchar *image)
+{
+ gchar *mime_type, *contents;
+ gsize length;
+ gboolean result = TRUE;
+
+ g_return_val_if_fail(image != NULL, FALSE);
+
+ /*need to get mime type via file contents or else mime type is
+ * bound to be wrong, especially on files fetched from the web
+ * this is very important as we might get quite a few images
+ * missing otherwise */
+ g_file_get_contents (image,
+ &contents,
+ &length,
+ NULL);
+ mime_type = g_content_type_guess(NULL,
+ (guchar *)contents, length, NULL);
+ /*FIXME mime type here could be wrong */
+ if (g_ascii_strncasecmp (mime_type, "image/", 6))
+ result = FALSE;
+ g_free(mime_type);
+ g_free(contents);
+ return result;
+}
+
/* validates if image is indeed an image file
* if image file is not found it tries to fetch it
* we need to check mime time against content
@@ -458,15 +504,22 @@ out: g_free(img_file);
gchar *
verify_image(gchar *uri, EMFormatHTML *format)
{
- gchar *mime_type, *contents;
- gsize length;
gchar *nurl, *turl;
gchar *base_dir, *feed_dir, *name;
- gchar *scheme, *result;
+ gchar *scheme, *tname;
+ gchar *result = NULL;
+ gchar *duri = NULL;
g_return_val_if_fail(uri != NULL, NULL);
- if (!g_file_test((gchar *)uri, G_FILE_TEST_EXISTS)) {
+ if (strstr(uri, "img:"))
+ duri = decode_image_cache_filename(uri);
+ else {
+ if (!(duri = g_filename_from_uri(uri, NULL, NULL)))
+ duri = g_strdup(uri);
+ }
+
+ if (!g_file_test(duri, G_FILE_TEST_EXISTS)) {
camel_url_decode((gchar *)uri);
//FIXME lame method of extracting data cache path
//there must be a function in camel for getting data cache path
@@ -484,46 +537,58 @@ verify_image(gchar *uri, EMFormatHTML *f
if (!scheme) {
nurl = strextr((gchar *)uri, feed_dir);
g_free(feed_dir);
- turl = nurl + 4;
+ turl = nurl + 4; // skip cache directory
name = fetch_image_redraw(turl, NULL, format);
g_free(nurl);
} else {
+ if (!strcmp(scheme, "file"))
+ goto fail;
turl = uri;
name = fetch_image_redraw(uri, NULL, format);
g_free(scheme);
}
g_free(base_dir);
- result = g_filename_to_uri (name, NULL, NULL);
- g_free(name);
+ if (name) {
+ tname = decode_image_cache_filename(name);
+ g_free(name);
+#if (EVOLUTION_VERSION >= 23000)
+ result = g_filename_to_uri (tname, NULL, NULL);
+#else
+ result = g_strdup(tname);
+#endif
+ if (!file_is_image(tname)) {
+ g_free(tname);
+ goto fail;
+ }
+ g_free(tname);
+ }
+
+ if (duri)
+ g_free(duri);
return result;
} else {
- /*need to get mime type via file contents or else mime type is
- * bound to be wrong, especially on files fetched from the web
- * this is very important as we might get quite a few images
- * missing otherwise */
- g_file_get_contents (uri,
- &contents,
- &length,
- NULL);
- mime_type = g_content_type_guess(NULL, (guchar *)contents, length, NULL);
- /*FIXME mime type here could be wrong */
- if (g_ascii_strncasecmp (mime_type, "image/", 6)) {
- result = g_filename_to_uri (pixfile, NULL, NULL);
- return result;
- }
- g_free(mime_type);
- g_free(contents);
+ if (!file_is_image(duri))
+ goto fail;
/*
* appears the default has changed in efh_url_requested
* the new default is file://
* http://git.gnome.org/browse/evolution/commit/?id=d9deaf9bbc7fd9d0c72d5cf9b1981e3a56ed1162
*/
#if (EVOLUTION_VERSION >= 23000)
- return g_filename_to_uri(uri, NULL, NULL);
+ return g_filename_to_uri(duri?duri:uri, NULL, NULL);
#else
- return NULL;
+ return duri?duri:uri;
#endif
}
+fail:
+#if (EVOLUTION_VERSION >= 23000)
+ result = g_filename_to_uri (pixfile, NULL, NULL);
+#else
+ result = g_strdup(pixfile);
+#endif
+ if (duri)
+ g_free(duri);
+ return result;
}
// constructs url from @base in case url is relative
@@ -533,10 +598,16 @@ fetch_image_redraw(gchar *url, gchar *li
GError *err = NULL;
gchar *tmpurl = NULL;
FEED_IMAGE *fi = NULL;
- gchar *result, *safe, *cache_file;
+ gchar *result, *cache_file;
+ gchar *intern, *burl;
+ gsize size;
g_return_val_if_fail(url != NULL, NULL);
+ if (strstr(url, "img:"))
+ tmpurl = (gchar *)g_base64_decode(url+4, &size);
+ else {
+
if (strstr(url, "://") == NULL) {
if (*url == '.') //test case when url begins with ".."
tmpurl = g_strconcat(
@@ -558,21 +629,23 @@ fetch_image_redraw(gchar *url, gchar *li
if (!tmpurl)
return NULL;
+ }
- safe = g_compute_checksum_for_string (
- G_CHECKSUM_SHA1, tmpurl, -1);
+ intern = g_compute_checksum_for_string(G_CHECKSUM_SHA1,
+ tmpurl, -1);
if (g_hash_table_find(rf->key_session,
check_key_match,
tmpurl)) {
goto working;
}
- d("fetch_image_redraw() tmpurl:%s, safe url:%s\n", tmpurl, safe);
- cache_file = rss_cache_get_filename(safe);
+ cache_file = rss_cache_get_filename(intern);
+ d("fetch_image_redraw() tmpurl:%s, intern: %s\n",
+ tmpurl, cache_file);
if (!g_file_test (cache_file, G_FILE_TEST_EXISTS)) {
d("image cache MISS\n");
if (data) {
fi = g_new0(FEED_IMAGE, 1);
- fi->url = g_strdup(safe);
+ fi->url = g_strdup(intern);
fi->data = data;
fetch_unblocking(tmpurl,
textcb,
@@ -582,7 +655,7 @@ fetch_image_redraw(gchar *url, gchar *li
1,
&err);
} else {
- CamelStream *stream = rss_cache_add(safe);
+ CamelStream *stream = rss_cache_add(intern);
fetch_unblocking(tmpurl,
textcb,
NULL,
@@ -601,9 +674,10 @@ fetch_image_redraw(gchar *url, gchar *li
}
g_free(cache_file);
-working:result = rss_cache_get_path(FALSE, safe);
+working:burl = (gchar *)g_base64_encode((guchar *)tmpurl, strlen(tmpurl));
+ result = g_strdup_printf("img:%s", burl);
+ g_free(burl);
error: g_free(tmpurl);
- g_free(safe);
return result;
}
--- evolution-rss-0.1.9//src/rss-image.h 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/rss-image.h 2010-05-26 16:36:59.000000000 +0200
@@ -26,6 +26,7 @@ typedef struct _FEED_IMAGE {
void rss_load_images(void);
gboolean display_folder_icon(GtkTreeStore *store, gchar *key);
+gchar *decode_image_cache_filename(gchar *name);
void
#if LIBSOUP_VERSION < 2003000
finish_create_icon (SoupMessage *msg, FEED_IMAGE *user_data);
--- evolution-rss-0.1.9//src/strptime.c 2010-05-19 10:58:13.000000000 +0200
+++ evolution-rss-0.2.0//src/strptime.c 2010-06-03 15:35:36.000000000 +0200
@@ -1094,6 +1094,8 @@ __strptime_internal (const char *rp, con
return (char *) rp;
}
+char *
+strptime (const char *buf, const char *format, struct tm *tm);
char *
strptime (const char *buf, const char *format, struct tm *tm)
Attachment:
signature.asc
Description: This is a digitally signed message part