[evolution-rss] handle blocking soup_session in web authentication; fix writting of favicons timestamp files
- From: Lucian Langa <lucilanga src gnome org>
- To: svn-commits-list gnome org
- Subject: [evolution-rss] handle blocking soup_session in web authentication; fix writting of favicons timestamp files
- Date: Wed, 8 Jul 2009 21:00:14 +0000 (UTC)
commit 85355b2bb2dd5e3e8f41930bc45033f7f5719921
Author: Lucian Langa <lucilanga gnome org>
Date: Wed Jul 8 23:57:40 2009 +0300
handle blocking soup_session in web authentication; fix writting of favicons timestamp files
src/network-soup.c | 26 ++++++++------------------
src/parser.c | 6 +++---
src/parser.h | 2 +-
src/rss.c | 42 ++++++++++++++++++++++--------------------
4 files changed, 34 insertions(+), 42 deletions(-)
---
diff --git a/src/network-soup.c b/src/network-soup.c
index 6ddca9a..86b236a 100644
--- a/src/network-soup.c
+++ b/src/network-soup.c
@@ -359,8 +359,6 @@ authenticate (SoupSession *session,
g_object_get (G_OBJECT(session),
"proxy-uri", &proxy_uri,
NULL);
- g_print("user:%s\n", proxy_uri->user);
- g_print("pass:%s\n", proxy_uri->password);
//proxy_auth_dialog("Proxy Authentication", proxy_uri->user, proxy_uri->password);
//g_object_set (G_OBJECT (session), SOUP_SESSION_PROXY_URI, proxy_uri, NULL);
return;
@@ -376,19 +374,22 @@ authenticate (SoupSession *session,
#else
if (!retrying)
soup_auth_authenticate (auth, user, pass);
+ else {
+ if (!rf->autoupdate)
+ goto authpop;
+ }
#endif
} else {
- if (rf->soup_auth_retry) {
- //means we're already tested once and probably
- //won't try again
- rf->soup_auth_retry = FALSE;
//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) {
//we will continue after user has made a decision on
//web auth dialog
- soup_session_pause_message(session, msg);
+ //Bug 522147 â?? need to be able to pause synchronous I/O
+authpop: if (G_OBJECT_TYPE(session) == SOUP_TYPE_SESSION_ASYNC) {
+ soup_session_pause_message(session, msg);
+ }
RSS_AUTH *auth_info = g_new0(RSS_AUTH, 1);
auth_info->url = data;
auth_info->soup_auth = auth;
@@ -396,17 +397,6 @@ authenticate (SoupSession *session,
auth_info->session = session;
auth_info->message = msg;
web_auth_dialog(auth_info);
- return;
- }
-#if LIBSOUP_VERSION < 2003000
- *username = g_strdup(g_hash_table_lookup(rf->hruser, data));
- *password = g_strdup(g_hash_table_lookup(rf->hrpass, data));
-#else
- user = g_hash_table_lookup(rf->hruser, data);
- pass = g_hash_table_lookup(rf->hrpass, data);
- if (!retrying)
- soup_auth_authenticate (auth, user, pass);
-#endif
}
}
}
diff --git a/src/parser.c b/src/parser.c
index 807d6e2..f63911f 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -55,10 +55,10 @@ rss_html_url_decode(const char *html, int len)
doc = src;
- while ((doc = html_find((xmlNode *)doc, "img"))) {
- if ((url = (gchar *)xmlGetProp(doc, (xmlChar *)"src"))) {
+ while ((doc = (xmlDoc *)html_find((xmlNode *)doc, "img"))) {
+ if ((url = (gchar *)xmlGetProp((xmlNodePtr)doc, (xmlChar *)"src"))) {
tmpurl = camel_url_decode_path(strstr(url, "http:"));
- xmlSetProp(doc, (xmlChar *)"src", (xmlChar *)tmpurl);
+ xmlSetProp((xmlNodePtr)doc, (xmlChar *)"src", (xmlChar *)tmpurl);
g_free(tmpurl);
}
}
diff --git a/src/parser.h b/src/parser.h
index d7f0904..f6c9aa1 100644
--- a/src/parser.h
+++ b/src/parser.h
@@ -20,7 +20,7 @@
#define __PARSER_H__
gchar *update_channel(RDF *r);
-
+xmlDoc *rss_html_url_decode(const char *html, int len);
char *layer_find (xmlNodePtr node, char *match, char *fail);
char *layer_find_innerelement (xmlNodePtr node, char *match, char *el, char *fail);
gchar *layer_find_innerhtml (xmlNodePtr node, char *match, char *submatch, char *fail);
diff --git a/src/rss.c b/src/rss.c
index b51b78f..69df342 100644
--- a/src/rss.c
+++ b/src/rss.c
@@ -595,7 +595,8 @@ user_pass_cb(RSS_AUTH *auth_info, gint response, GtkDialog *dialog)
rf->soup_auth_retry = TRUE;
break;
}
- soup_session_unpause_message(auth_info->session, auth_info->message);
+ if (soup_session_get_async_context(auth_info->session))
+ soup_session_unpause_message(auth_info->session, auth_info->message);
gtk_widget_destroy(GTK_WIDGET(dialog));
g_free(auth_info);
@@ -760,6 +761,7 @@ void
web_auth_dialog(RSS_AUTH *auth_info)
{
GtkDialog *dialog;
+ gint response;
if (!rf->hruser)
rf->hruser = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
@@ -767,9 +769,14 @@ web_auth_dialog(RSS_AUTH *auth_info)
rf->hrpass = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
auth_info->user = g_hash_table_lookup(rf->hruser, auth_info->url);
- auth_info->pass = g_hash_table_lookup(rf->hruser, auth_info->url);
+ auth_info->pass = g_hash_table_lookup(rf->hrpass, auth_info->url);
dialog = create_user_pass_dialog(auth_info);
- g_signal_connect_swapped (dialog,
+ //Bug 522147 â?? need to be able to pause synchronous I/O
+ if (G_OBJECT_TYPE(auth_info->session) != SOUP_TYPE_SESSION_ASYNC) {
+ response = gtk_dialog_run(dialog);
+ user_pass_cb(auth_info, response, dialog);
+ } else
+ g_signal_connect_swapped (dialog,
"response",
G_CALLBACK (user_pass_cb),
auth_info);
@@ -794,7 +801,6 @@ timeout_soup(void)
{
d(g_print("Network timeout occured. Cancel active operations.\n"));
abort_all_soup();
- rf->autoupdate = FALSE;
return FALSE;
}
@@ -1856,16 +1862,16 @@ pfree(EMFormatHTMLPObject *o)
void
org_gnome_evolution_presend (EPlugin *ep, EMEventTargetComposer *t)
{
- gchar *tmsg;
xmlChar *buff = NULL;
- gint size, length;
+ gint size;
+ gsize length;
gchar *text;
/* unfortunately e_msg_composer does not have raw get/set text body
* so it is far easier using gtkhtml_editor_* functions rather than
* procesing CamelMimeMessage or GByteArray
*/
- text = gtkhtml_editor_get_text_html (t->composer, &length);
+ text = gtkhtml_editor_get_text_html ((GtkhtmlEditor *)t->composer, &length);
xmlDoc *doc = rss_html_url_decode(text, strlen(text));
if (doc) {
@@ -1873,7 +1879,7 @@ org_gnome_evolution_presend (EPlugin *ep, EMEventTargetComposer *t)
xmlFree(doc);
}
- gtkhtml_editor_set_text_html(t->composer, buff, size);
+ gtkhtml_editor_set_text_html((GtkhtmlEditor *)t->composer, (gchar *)buff, size);
}
EMFormat *fom;
@@ -1891,7 +1897,8 @@ void org_gnome_cooly_format_rss(void *ep, EMFormatHookTarget *t) //camelmimepart
gchar *comments = NULL;
gchar *category = NULL;
GdkPixbuf *pixbuf = NULL;
- guint engine = 0, size;
+ guint engine = 0;
+ int size;
CamelDataWrapper *dw = camel_data_wrapper_new();
CamelMimePart *part = camel_mime_part_new();
CamelStream *fstream = camel_stream_mem_new();
@@ -2743,10 +2750,8 @@ generic_finish_feed(rfMessage *msg, gpointer user_data)
#endif
}
- if (rf->cancel_all) {
- rf->autoupdate = FALSE;
+ if (rf->cancel_all)
goto out;
- }
if (msg->status_code != SOUP_STATUS_OK &&
msg->status_code != SOUP_STATUS_CANCELLED) {
@@ -2762,7 +2767,6 @@ generic_finish_feed(rfMessage *msg, gpointer user_data)
if (rf->cancel) {
#ifdef EVOLUTION_2_12
if(rf->label && rf->feed_queue == 0 && rf->info) {
- rf->autoupdate = FALSE;
farticle=0;
ftotal=0;
gtk_label_set_markup (GTK_LABEL (rf->label), _("Canceled."));
@@ -2862,7 +2866,6 @@ generic_finish_feed(rfMessage *msg, gpointer user_data)
g_free(furl);
}
if(rf->label && rf->feed_queue == 0 && rf->info) {
- rf->autoupdate = FALSE;
farticle=0;
ftotal=0;
gtk_label_set_markup (GTK_LABEL (rf->label), _("Complete"));
@@ -2925,7 +2928,6 @@ fetch_one_feed(gpointer key, gpointer value, gpointer user_data)
return TRUE;
} else if (rf->cancel && !rf->feed_queue) {
rf->cancel = 0; //all feeds were either procesed or skipped
- rf->autoupdate = FALSE;
}
return FALSE;
}
@@ -3310,15 +3312,18 @@ check_update_feed_image(gchar *key)
ret = TRUE;
goto out;
}
- if ((f = fopen(fav_file, "r"))) {
+ if ((f = fopen(fav_file, "r+"))) {
fgets(rfeed, 50, f);
- fclose(f);
remain = start.tv_sec - strtoul((const char *)&rfeed, NULL, 10);
if (FEED_IMAGE_TTL <= remain) {
+ (void)fseek(f, 0L, SEEK_SET);
+ fprintf(f, "%lu", start.tv_sec);
+ fclose(f);
ret = TRUE;
goto out;
} else {
d(g_print("next favicon will be fetched in %lu seconds\n", FEED_IMAGE_TTL - remain));
+ fclose(f);
ret = FALSE;
}
}
@@ -3597,7 +3602,6 @@ custom_update_articles(CDATA *cdata)
// feed gets deleted
} else if (rf->cancel && !rf->feed_queue) {
rf->cancel = 0; //all feeds where either procesed or skipped
- rf->autoupdate = FALSE;
}
}
return TRUE;
@@ -3941,7 +3945,6 @@ org_gnome_cooly_rss_refresh(void *ep, EMPopupTargetSelect *t)
flabel = label2;
}
if (!rf->pending && !rf->feed_queue) {
- rf->autoupdate = FALSE;
rf->pending = TRUE;
check_folders();
@@ -4130,7 +4133,6 @@ org_gnome_cooly_rss(void *ep, EMPopupTargetSelect *t)
}
#endif
if (!rf->pending && !rf->feed_queue) {
- rf->autoupdate = FALSE;
rf->pending = TRUE;
check_folders();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]