diff --git a/.cvsignore b/.cvsignore index 8699bda..0c73f06 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -evolution-rss-0.0.7.tar.gz +evolution-rss-0.0.8.tar.gz diff --git a/evolution-rss-0.0.7-autoreconf.patch b/evolution-rss-0.0.7-autoreconf.patch deleted file mode 100644 index 082f32e..0000000 --- a/evolution-rss-0.0.7-autoreconf.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- evolution-rss-0.0.7/Makefile.am 2007-11-23 19:05:17.000000000 +0200 -+++ /work/evolution/evolution-rss/Makefile.am 2008-02-13 08:02:25.000000000 +0200 -@@ -1,10 +1,14 @@ - SUBDIRS = pixmaps po src - --## We dist autogen.sh since this is an example program --## Real-world programs do not need to distribute autogen.sh --## But there is no harm in it, and you probably should. -+ACLOCAL_AMFLAGS = -I m4 -+ -+INTLTOOL = \ -+ intltool-extract.in \ -+ intltool-merge.in \ -+ intltool-update.in - - EXTRA_DIST = \ -+ $(INTLTOOL) \ - autogen.sh \ - intltool-extract.in \ - intltool-merge.in \ diff --git a/evolution-rss-0.0.7-fix-detect.patch b/evolution-rss-0.0.7-fix-detect.patch deleted file mode 100644 index 8fe8535..0000000 --- a/evolution-rss-0.0.7-fix-detect.patch +++ /dev/null @@ -1,55 +0,0 @@ -diff -Naur evolution-rss-0.0.7/ChangeLog evolution-rss/ChangeLog ---- evolution-rss-0.0.7/ChangeLog 2007-12-12 14:50:40.000000000 -0500 -+++ evolution-rss/ChangeLog 2007-12-23 11:25:53.000000000 -0500 -@@ -1,3 +1,9 @@ -+Tue 18 Dec 2007 09:38:56 PM EET -+ -+ * fix m4 support for evolution >= 2.11 -+ * fix send and receive dialog crash for -+ evolution >= 2.12 -+ - Wed 12 Dec 2007 10:35:41 AM EET - - * prevend evolution-import-rss import empty -diff -Naur evolution-rss-0.0.7/configure.ac evolution-rss/configure.ac ---- evolution-rss-0.0.7/configure.ac 2007-12-12 14:50:31.000000000 -0500 -+++ evolution-rss/configure.ac 2007-12-23 08:30:14.000000000 -0500 -@@ -68,8 +68,8 @@ - AC_MSG_RESULT($EVOLUTION_VERSION) - AC_SUBST(EVOLUTION_BASE_VERSION) - AC_SUBST(EVOLUTION_EXEC_VERSION) --if test "x$EVOLUTION_EXEC_VERSION" = "x2.12" || -- test "x$EVOLUTION_EXEC_VERSION" = "x2.11"; then -+evolution_exec_int="$(echo "$EVOLUTION_EXEC_VERSION" | $AWK -F . '{print [$]1 * 10000 + [$]2 * 100 + [$]3}')" -+if test "$evolution_exec_int" -ge "21100"; then - AC_DEFINE_UNQUOTED(EVOLUTION_2_12,1, [evolution mail 2.12 present]) - AC_SUBST(EVOLUTION_2_12) - fi -diff -Naur evolution-rss-0.0.7/src/evolution-import-rss.c evolution-rss/src/evolution-import-rss.c ---- evolution-rss-0.0.7/src/evolution-import-rss.c 2007-12-12 14:08:44.000000000 -0500 -+++ evolution-rss/src/evolution-import-rss.c 2007-12-23 08:30:12.000000000 -0500 -@@ -183,8 +183,12 @@ - - - if (evo_running) -+ { - if (s) - send_dbus_message ("evolution_rss_feed", s); -+ else -+ g_print("Syntax: evolution-import-rss URL\n"); -+ } - else - { - g_print("evolution repetably failed to start!\n"); -diff -Naur evolution-rss-0.0.7/src/rss.c evolution-rss/src/rss.c ---- evolution-rss-0.0.7/src/rss.c 2007-12-13 13:50:03.000000000 -0500 -+++ evolution-rss/src/rss.c 2007-12-23 10:33:42.000000000 -0500 -@@ -3957,7 +3957,7 @@ - info = g_malloc0 (sizeof (*info)); - // info->type = type; - -- info->uri = "feed"; //g_stddup -+ info->uri = g_strdup("feed"); //g_stddup - - info->cancel = camel_operation_new (op_status, info); - info->state = SEND_ACTIVE; diff --git a/evolution-rss-0.0.7-libsoup-2.4.patch b/evolution-rss-0.0.7-libsoup-2.4.patch deleted file mode 100644 index d08fe16..0000000 --- a/evolution-rss-0.0.7-libsoup-2.4.patch +++ /dev/null @@ -1,1176 +0,0 @@ ---- evolution-rss-0.0.7/configure.ac 2008-02-10 18:50:24.000000000 +0200 -+++ evolution-rss/trunk/configure.ac 2008-02-10 13:20:55.000000000 +0200 -@@ -73,9 +73,23 @@ - AC_DEFINE_UNQUOTED(EVOLUTION_2_12,1, [evolution mail 2.12 present]) - AC_SUBST(EVOLUTION_2_12) - fi -+AC_SUBST(evolution_exec_int) -+ - MINOR_VERSION=`echo $EVOLUTION_EXEC_VERSION|cut -d. -f2|awk '{print 1000 * $1}'` - AC_SUBST(MINOR_VERSION) - -+dnl locate libsoup flavour -+SOUP= -+PKG_CHECK_MODULES([LIBSOUP_24], libsoup-2.4, [SOUP=2.4], [SOUP=]) -+if test "x$SOUP" != "x2.4"; then -+ PKG_CHECK_MODULES([LIBSOUP_22], libsoup-2.2, [SOUP=2.2], [SOUP=]) -+fi -+if test "x$SOUP" == "x"; then -+ PKG_CHECK_MODULES(LIBSOUP, libsoup, [SOUP=], []) -+else -+SOUP="-$SOUP" -+fi -+ - dnl base packages and versions - LIBGTK_REQUIRED=2.4.0 - LIBGNOME_REQUIRED=2.7.0 -@@ -88,7 +102,7 @@ - [libgnome-2.0 >= $LIBGNOME_REQUIRED dnl - libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED dnl - gtk+-2.0 >= $LIBGTK_REQUIRED dnl -- libsoup-2.2 >= $LIBSOUP_REQUIRED dnl -+ libsoup$SOUP >= $LIBSOUP_REQUIRED dnl - evolution-plugin$EVOLUTION_BASE_VERSION_S >= $EVOLUTION_REQUIRED dnl - libglade-2.0 dnl - ]) -@@ -235,6 +249,13 @@ - AC_PATH_PROG(GCONFTOOL, gconftool-2, no) - AM_GCONF_SOURCE_2 - -+dnl ******************** -+dnl extract soup version -+dnl ******************** -+SOUP_VERSION=`pkg-config --modversion libsoup$SOUP` -+SOUP_VERSION=`echo $SOUP_VERSION|$AWK -F . '{print $1 * 1000000 + $2 * 1000 + $3}'` -+AC_SUBST(SOUP_VERSION) -+ - dnl *********** - dnl D-BUS stuff - dnl *********** -@@ -250,6 +271,7 @@ - fi - AM_CONDITIONAL([HAVE_DBUS], [test x$have_dbus = xyes]) - -+ - dnl I18n stuff - AC_PATH_PROG(GETTEXT, gettext, no) - if test "x$GETTEXT" = "xno"; then ---- evolution-rss-0.0.7/src/network-soup.c 2007-12-11 22:27:00.000000000 +0200 -+++ evolution-rss/trunk/src/network-soup.c 2008-02-10 13:20:53.000000000 +0200 -@@ -1,5 +1,5 @@ - /* Evolution RSS Reader Plugin -- * Copyright (C) 2007 Lucian Langa -+ * Copyright (C) 2007-2008 Lucian Langa - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by -@@ -40,18 +40,31 @@ - } CallbackInfo; - - static void -+#if LIBSOUP_VERSION < 2003000 - got_chunk_blocking_cb(SoupMessage *msg, CallbackInfo *info) { -+#else -+got_chunk_blocking_cb(SoupMessage *msg, SoupBuffer *chunk, CallbackInfo *info) { -+#endif - NetStatusProgress progress = {0}; - const char* clen; - - if (info->total == 0) { -+#if LIBSOUP_VERSION < 2003000 - clen = soup_message_get_header(msg->response_headers, - "Content-length"); -+#else -+ clen = soup_message_headers_get(msg->response_headers, -+ "Content-length"); -+#endif - if (!clen) - return; - info->total = atoi(clen); - } -+#if LIBSOUP_VERSION < 2003000 - info->current += msg->response.length; -+#else -+ info->current += chunk->length; -+#endif - - progress.current = info->current; - progress.total = info->total; -@@ -59,18 +72,32 @@ - } - - static void -+#if LIBSOUP_VERSION < 2003000 - got_chunk_cb(SoupMessage *msg, CallbackInfo *info) { -+#else -+got_chunk_cb(SoupMessage *msg, SoupBuffer *chunk, CallbackInfo *info) { -+#endif -+ - NetStatusProgress *progress = NULL; - const char* clen; - - if (info->total == 0) { -+#if LIBSOUP_VERSION < 2003000 - clen = soup_message_get_header(msg->response_headers, - "Content-length"); -+#else -+ clen = soup_message_headers_get(msg->response_headers, -+ "Content-length"); -+#endif - if (!clen) - return; - info->total = atoi(clen); - } -+#if LIBSOUP_VERSION < 2003000 - info->current += msg->response.length; -+#else -+ info->current += chunk->length; -+#endif - progress = g_new0(NetStatusProgress, 1); - - progress->current = info->current; -@@ -97,59 +124,92 @@ - recv_msg (SoupMessage *msg, gpointer user_data) - { - GString *response = NULL; -+#if LIBSOUP_VERSION < 2003000 - response = g_string_new_len(msg->response.body, msg->response.length); -+#else -+ response = g_string_new_len(msg->response_body->data, msg->response_body->length); -+#endif - #ifdef RSS_DEBUG - g_print("got it!\n"); - g_print("res:[%s]\n", response->str); - #endif - } - -+static gboolean -+remove_if_match (gpointer key, gpointer value, gpointer user_data) -+{ -+ if (value == user_data) -+ { -+ g_hash_table_remove(rf->key_session, key); -+ return TRUE; -+ } -+ else -+ return FALSE; -+} -+ -+void -+construct_abort(gpointer key, gpointer value, gpointer user_data) -+{ -+ g_hash_table_insert(rf->abort_session, key, value); -+} -+ - static void - unblock_free (gpointer user_data, GObject *ex_msg) - { - #ifdef RSS_DEBUG - g_print("weak ref - trying to free object\n"); - #endif -+ g_hash_table_remove(rf->session, user_data); -+ g_hash_table_destroy(rf->abort_session); -+ rf->abort_session = g_hash_table_new(g_direct_hash, g_direct_equal); -+ g_hash_table_foreach(rf->session, construct_abort, NULL); -+ g_hash_table_find(rf->key_session, -+ remove_if_match, -+ user_data); - gboolean prune = soup_session_try_prune_connection (user_data); - //I really don't know if his is necesarry - //but I believe it won't hurt - if (prune) - g_object_unref(user_data); -- g_hash_table_remove(rf->session, user_data); - } - - //this will insert proxy in the session - void --proxyfy_session(SoupSession *session) -+proxify_session(SoupSession *session) - { - gboolean use_proxy = -- gconf_client_get_bool(rss_gconf, GCONF_KEY_USE_PROXY, NULL); -+ gconf_client_get_bool(rss_gconf, GCONF_KEY_USE_PROXY, NULL); - gint port_proxy = - gconf_client_get_int(rss_gconf, GCONF_KEY_PORT_PROXY, NULL); - gchar *host_proxy = - gconf_client_get_string(rss_gconf, GCONF_KEY_HOST_PROXY, NULL); -- gboolean auth_proxy = -+ gboolean auth_proxy = - gconf_client_get_bool(rss_gconf, GCONF_KEY_AUTH_PROXY, NULL); - gchar *user_proxy = - gconf_client_get_string(rss_gconf, GCONF_KEY_USER_PROXY, NULL); - gchar *pass_proxy = - gconf_client_get_string(rss_gconf, GCONF_KEY_PASS_PROXY, NULL); - -- - if (use_proxy && host_proxy && port_proxy > 0) - { - gchar *proxy_uri = - g_strdup_printf("http://%s:%d/", host_proxy, port_proxy); - -+#if LIBSOUP_VERSION < 2003000 - SoupUri *puri = soup_uri_new (proxy_uri); -- if (auth_proxy) -- { -- puri->user = g_strdup(user_proxy); -- puri->passwd = g_strdup(pass_proxy); -- } -- g_object_set (G_OBJECT (session), SOUP_SESSION_PROXY_URI, puri, NULL); -+#else -+ SoupURI *puri = soup_uri_new (proxy_uri); -+#endif -+/* if (auth_proxy) -+ { -+ puri->user = g_strdup(user_proxy); -+ puri->passwd = g_strdup(pass_proxy); -+ }*/ -+ g_object_set (G_OBJECT (session), SOUP_SESSION_PROXY_URI, puri, NULL); -+#if LIBSOUP_VERSION < 2003000 - if (puri) - g_free(puri); -+#endif - if (proxy_uri) - g_free(proxy_uri); - } -@@ -239,6 +299,7 @@ - } - - static void -+#if LIBSOUP_VERSION < 2003000 - authenticate (SoupSession *session, - SoupMessage *msg, - const char *auth_type, -@@ -246,26 +307,51 @@ - char **username, - char **password, - gpointer data) -+#else -+authenticate (SoupSession *session, -+ SoupMessage *msg, -+ SoupAuth *auth, -+ gboolean retrying, -+ gpointer data) -+#endif - { - gchar *user = g_hash_table_lookup(rf->hruser, data); - gchar *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); -+#endif - } - else - { -+ if (rf->soup_auth_retry) -+ { -+ //means we're already tested once and probably -+ //won't try again -+ rf->soup_auth_retry = FALSE; - if (!read_up(data)) -- create_user_pass_dialog(data); -- -- user = g_hash_table_lookup(rf->hruser, data); -- pass = g_hash_table_lookup(rf->hrpass, data); -- *username = g_strdup(user); -- *password = g_strdup(pass); -+ { -+ if (create_user_pass_dialog(data)) -+ rf->soup_auth_retry = FALSE; -+ else -+ rf->soup_auth_retry = TRUE; -+ } -+#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 -+ if (!retrying) -+ soup_auth_authenticate (auth, user, pass); -+#endif -+ } - } - } -- -+ - static void - reauthenticate (SoupSession *session, - SoupMessage *msg, -@@ -275,9 +361,23 @@ - char **password, - gpointer data) - { -- create_user_pass_dialog(data); -- *username = g_strdup(g_hash_table_lookup(rf->hruser, data)); -- *password = g_strdup(g_hash_table_lookup(rf->hrpass, data)); -+ gchar *user, *pass; -+ if (rf->soup_auth_retry) -+ { -+ //means we're already tested once and probably -+ //won't try again -+ rf->soup_auth_retry = FALSE; -+ if (create_user_pass_dialog(data)) -+ { -+ rf->soup_auth_retry = FALSE; -+ } -+ else -+ { -+ rf->soup_auth_retry = TRUE; -+ } -+ *username = g_strdup(g_hash_table_lookup(rf->hruser, data)); -+ *password = g_strdup(g_hash_table_lookup(rf->hrpass, data)); -+ } - } - - static int -@@ -287,6 +387,7 @@ - g_main_loop_quit (data); - } - -+ - gboolean - net_get_unblocking(const char *url, NetStatusCallback cb, - gpointer data, gpointer cb2, -@@ -299,7 +400,7 @@ - // soup_session_async_new_with_options(SOUP_SESSION_TIMEOUT, SS_TIMEOUT, NULL); - soup_session_async_new(); - --// proxyfy_session(soup_sess); -+ proxify_session(soup_sess); - info = g_new0(CallbackInfo, 1); - info->user_cb = cb; - info->user_data = data; -@@ -307,11 +408,17 @@ - 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 - g_signal_connect (soup_sess, "reauthenticate", - G_CALLBACK (reauthenticate), (gpointer)url); -+#endif - - /* Queue an async HTTP request */ - msg = soup_message_new ("GET", url); -@@ -319,17 +426,25 @@ - { - g_set_error(err, NET_ERROR, NET_ERROR_GENERIC, - soup_status_get_phrase(2)); //invalid url -+ g_print("status:%s\n", soup_status_get_phrase(2)); //invalid url - return -1; - } - g_hash_table_insert(rf->session, soup_sess, msg); -+ g_hash_table_insert(rf->abort_session, soup_sess, msg); -+ g_hash_table_insert(rf->key_session, data, soup_sess); - - gchar *agstr = g_strdup_printf("Evolution/%s; Evolution-RSS/%s", -- EVOLUTION_VERSION, VERSION); -+ EVOLUTION_VERSION_STRING, VERSION); -+#if LIBSOUP_VERSION < 2003000 - soup_message_add_header (msg->request_headers, "User-Agent", - agstr); -+#else -+ soup_message_headers_append (msg->request_headers, "User-Agent", -+ agstr); -+#endif - g_free(agstr); - -- g_signal_connect(G_OBJECT(msg), "got-chunk", -+ g_signal_connect(G_OBJECT(msg), "got_chunk", - G_CALLBACK(got_chunk_cb), info); //FIXME Find a way to free this maybe weak_ref - - soup_session_queue_message (soup_sess, msg, -@@ -337,6 +452,7 @@ - - g_object_add_weak_pointer (G_OBJECT(msg), (gpointer)info); - g_object_weak_ref (G_OBJECT(msg), unblock_free, soup_sess); -+// g_object_weak_ref (G_OBJECT(soup_sess), unblock_free, soup_sess); - // GMainLoop *mainloop = g_main_loop_new (g_main_context_default (), FALSE); - // g_timeout_add (10 * 1000, &conn_mainloop_quit, mainloop); - return 1; -@@ -346,7 +462,11 @@ - net_post_blocking(const char *url, GSList *headers, GString *post, - NetStatusCallback cb, gpointer data, - GError **err) { -+#if LIBSOUP_VERSION < 2003000 - SoupUri *suri = NULL; -+#else -+ SoupURI *suri = NULL; -+#endif - SoupMessage *req = NULL; - GString *response = NULL; - CallbackInfo info = { cb, data, 0, 0 }; -@@ -360,8 +480,10 @@ - - g_signal_connect (soup_sess, "authenticate", - G_CALLBACK (authenticate), soup_sess); -+#if LIBSOUP_VERSION < 2003000 - g_signal_connect (soup_sess, "reauthenticate", - G_CALLBACK (reauthenticate), soup_sess); -+#endif - - suri = soup_uri_new(url); - if (!suri) -@@ -379,16 +501,25 @@ - * a bit. */ - char *colonpos = strchr(header, ':'); - *colonpos = 0; -+#if LIBSOUP_VERSION < 2003000 - soup_message_add_header(req->request_headers, header, colonpos+1); -+#else -+ soup_message_headers_append(req->request_headers, header, colonpos+1); -+#endif - *colonpos = ':'; - } - gchar *agstr = g_strdup_printf("Evolution/%s; Evolution-RSS/%s", -- EVOLUTION_VERSION, VERSION); -+ EVOLUTION_VERSION_STRING, VERSION); -+#if LIBSOUP_VERSION < 2003000 - soup_message_add_header (req->request_headers, "User-Agent", - agstr); -+#else -+ soup_message_headers_append (req->request_headers, "User-Agent", -+ agstr); -+#endif - g_free(agstr); - -- proxyfy_session(soup_sess); -+ proxify_session(soup_sess); - rf->b_session = soup_sess; - rf->b_msg_session = req; - soup_session_send_message(soup_sess, req); -@@ -403,7 +534,11 @@ - goto out; - } - -+#if LIBSOUP_VERSION < 2003000 - response = g_string_new_len(req->response.body, req->response.length); -+#else -+ response = g_string_new_len(req->response_body->data, req->response_body->length); -+#endif - - out: - if (suri) soup_uri_free(suri); ---- evolution-rss-0.0.7/src/misc.c 2007-11-27 19:27:40.000000000 +0200 -+++ evolution-rss/trunk/src/misc.c 2008-02-10 13:20:53.000000000 +0200 -@@ -34,7 +34,7 @@ - static void - print_hash(gpointer key, gpointer value, gpointer user_data) - { -- g_print("key:%s, value:%s\n", key, value); -+ g_print("key:%p, value:%p\n", key, value); - } - - static void -@@ -229,6 +229,128 @@ - *f++ = 0; - return g_strdup(res); - } -+ -+static void -+header_decode_lwsp(const char **in) -+{ -+ const char *inptr = *in; -+ char c; -+ -+ -+ while ((camel_mime_is_lwsp(*inptr) || *inptr =='(') && *inptr != '\0') { -+ while (camel_mime_is_lwsp(*inptr) && *inptr != '\0') { -+ inptr++; -+ } -+ -+ /* check for comments */ -+ if (*inptr == '(') { -+ int depth = 1; -+ inptr++; -+ while (depth && (c=*inptr) && *inptr != '\0') { -+ if (c=='\\' && inptr[1]) { -+ inptr++; -+ } else if (c=='(') { -+ depth++; -+ } else if (c==')') { -+ depth--; -+ } -+ inptr++; -+ } -+ } -+ } -+ *in = inptr; -+} -+ -+static char * -+decode_token (const char **in) -+{ -+ const char *inptr = *in; -+ const char *start; -+ -+ header_decode_lwsp (&inptr); -+ start = inptr; -+ while (camel_mime_is_ttoken (*inptr)) -+ inptr++; -+ if (inptr > start) { -+ *in = inptr; -+ return g_strndup (start, inptr - start); -+ } else { -+ return NULL; -+ } -+} -+ -+/* hrm, is there a library for this shit? */ -+static struct { -+ char *name; -+ int offset; -+} tz_offsets [] = { -+ { "UT", 0 }, -+ { "GMT", 0 }, -+ { "EST", -500 }, /* these are all US timezones. bloody yanks */ -+ { "EDT", -400 }, -+ { "CST", -600 }, -+ { "CDT", -500 }, -+ { "MST", -700 }, -+ { "MDT", -600 }, -+ { "PST", -800 }, -+ { "PDT", -700 }, -+ { "Z", 0 }, -+ { "A", -100 }, -+ { "M", -1200 }, -+ { "N", 100 }, -+ { "Y", 1200 }, -+}; -+ -+static const char tz_months [][4] = { -+ "Jan", "Feb", "Mar", "Apr", "May", "Jun", -+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" -+}; -+ -+static const char tz_days [][4] = { -+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" -+}; -+ -+gboolean -+is_rfc822(char *in) -+{ -+ const char *inptr = in; -+ struct tm tm; -+ guint i; -+ -+ header_decode_lwsp (&inptr); -+ char *day = decode_token(&inptr); -+ if (day) -+ { -+ g_free (day); -+ header_decode_lwsp (&inptr); -+ if (*inptr == ',') -+ inptr++; -+ else -+ goto notrfc; -+ } -+ tm.tm_mday = camel_header_decode_int(&inptr); -+ if (tm.tm_mday == 0) -+ goto notrfc; -+ -+ char *monthname = decode_token(&inptr); -+ gboolean foundmonth = FALSE; -+ if (monthname) { -+ for (i=0;i $@ - - %.error.in: %.error.xml ---- evolution-rss-0.0.7/src/rss.h 2007-12-08 17:56:11.000000000 +0200 -+++ evolution-rss/trunk/src/rss.h 2008-02-10 20:13:12.000000000 +0200 -@@ -53,6 +53,7 @@ - GHashTable *hrh; //fetch html flag - GHashTable *hruser; //auth user hash - GHashTable *hrpass; //auth user hash -+ gboolean soup_auth_retry; //wether to retry auth after an unsucessful auth - GHashTable *hrdel_feed; //option to delete messages in current feed - GHashTable *hrdel_days; //option to delete messages older then days - GHashTable *hrdel_messages; //option to keep last messages -@@ -82,6 +83,9 @@ - guint feed_queue; - gboolean cancel; //cancelation signal - GHashTable *session; //queue of active unblocking sessions -+ GHashTable *abort_session; //this is a hack to be able to iterate when -+ //we remove keys from seesion with weak_ref -+ GHashTable *key_session; //queue of active unblocking sessions and keys linked - SoupSession *b_session; //active blocking session - SoupMessage *b_msg_session; //message running in the blocking session - guint rc_id; -@@ -95,6 +99,8 @@ - gchar *main_folder; // "News&Blogs" folder name - GHashTable *feed_folders; // defined feeds folders - GHashTable *reversed_feed_folders; // easyer when we lookup for the value -+ GHashTable *activity; -+ GHashTable *error_hash; - guint test; - #if HAVE_DBUS - DBusConnection *bus; // DBUS -@@ -224,7 +230,7 @@ - } create_feed; - - u_int32_t gen_crc(const char *msg); --void create_user_pass_dialog(gchar *url); -+gboolean create_user_pass_dialog(gchar *url); - static void start_check_cb (GtkWidget *widget, gpointer data); - static void err_destroy (GtkWidget *widget, gpointer data); - static gboolean check_if_match (gpointer key, gpointer value, gpointer user_data); ---- evolution-rss-0.0.7/src/rss.c 2008-02-10 18:50:24.000000000 +0200 -+++ evolution-rss/trunk/src/rss.c 2008-02-10 13:20:53.000000000 +0200 -@@ -91,7 +96,9 @@ - #include - - #include -+#if LIBSOUP_VERSION < 2003000 - #include -+#endif - - #include "rss.h" - #include "network-soup.c" -@@ -145,8 +162,8 @@ - guint count = 0; - gchar *buffer = NULL; - --#define RSS_CONTROL_ID "OAFIID:GNOME_Evolution_RSS:" EVOLUTION_VERSION --#define FACTORY_ID "OAFIID:GNOME_Evolution_RSS_Factory:" EVOLUTION_VERSION -+#define RSS_CONTROL_ID "OAFIID:GNOME_Evolution_RSS:" EVOLUTION_VERSION_STRING -+#define FACTORY_ID "OAFIID:GNOME_Evolution_RSS_Factory:" EVOLUTION_VERSION_STRING - - guint upgrade = 0; // set to 2 when initailization successfull - -@@ -336,7 +541,7 @@ - }*/ - } - --void -+gboolean - create_user_pass_dialog(gchar *url) - { - GtkWidget *dialog1; -@@ -351,6 +556,7 @@ - GtkWidget *okbutton1; - GtkWidget *checkbutton1; - GtkWidget *vbox1; -+ guint resp; - - if (!rf->hruser) - rf->hruser = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free); -@@ -400,6 +606,7 @@ - (GtkAttachOptions) (0), 0, 0); - gtk_entry_set_invisible_char (GTK_ENTRY (username), 8226); - gchar *user = g_hash_table_lookup(rf->hruser, url); -+ g_print("user:%s\n", user); - if (user) - gtk_entry_set_text (GTK_ENTRY (username), user); - password = gtk_entry_new (); -@@ -441,21 +648,26 @@ - case GTK_RESPONSE_OK: - if (user) - g_hash_table_remove(rf->hruser, url); -- g_hash_table_insert(rf->hruser, url, g_strdup(gtk_entry_get_text (GTK_ENTRY (username)))); -+ g_hash_table_insert(rf->hruser, url, -+ g_strdup(gtk_entry_get_text (GTK_ENTRY (username)))); - if (pass) - g_hash_table_remove(rf->hrpass, url); -- g_hash_table_insert(rf->hrpass, url, g_strdup(gtk_entry_get_text (GTK_ENTRY (password)))); -+ g_hash_table_insert(rf->hrpass, url, -+ g_strdup(gtk_entry_get_text (GTK_ENTRY (password)))); - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbutton1))) - save_up(url); - else - del_up(url); - - gtk_widget_destroy (dialog1); -+ resp = 0; - break; - default: - gtk_widget_destroy (dialog1); -+ resp = 1; - break; - } -+ return resp; - } - - add_feed * -@@ -756,24 +968,47 @@ - -1); - } - --void -+gboolean - cancel_soup_sess(gpointer key, gpointer value, gpointer user_data) - { -- if (SOUP_IS_MESSAGE(value)) -+ g_print("key:%p, value:%p ==", key, value); -+ -+ if (SOUP_IS_SESSION(key)) - { -- soup_message_set_status(value, SOUP_STATUS_CANCELLED); -- soup_session_cancel_message(key, value); -+ if (SOUP_IS_MESSAGE(value)) -+ { -+#if LIBSOUP_VERSION < 2003000 -+ soup_message_set_status(value, SOUP_STATUS_CANCELLED); -+ soup_session_cancel_message(key, value); -+#else -+ soup_session_cancel_message(key, value, SOUP_STATUS_CANCELLED); -+#endif -+ } -+ soup_session_abort(key); -+ g_hash_table_find(rf->key_session, -+ remove_if_match, -+ user_data); - } -- soup_session_abort(key); -- g_hash_table_remove(rf->session, key); -+ g_print(" key:%p, value:%p\n", key, value); -+ return TRUE; -+} -+void -+remove_weak(gpointer key, gpointer value, gpointer user_data) -+{ -+ g_object_weak_unref(value, unblock_free, key); - } - - void - abort_all_soup(void) - { - //abort all session -- if (rf->session) -- g_hash_table_foreach(rf->session, cancel_soup_sess, NULL); -+ if (rf->abort_session) -+ { -+ g_hash_table_foreach(rf->abort_session, remove_weak, NULL); -+ g_hash_table_foreach_remove(rf->abort_session, cancel_soup_sess, NULL); -+ g_hash_table_destroy(rf->session); -+ rf->session = g_hash_table_new(g_direct_hash, g_direct_equal); -+ } - if (rf->progress_bar) - { - gtk_progress_bar_set_fraction((GtkProgressBar *)rf->progress_bar, 1); -@@ -783,8 +1018,12 @@ - { - if (SOUP_IS_MESSAGE(rf->b_msg_session)) - { -+#if LIBSOUP_VERSION < 2003000 - soup_message_set_status(rf->b_msg_session, SOUP_STATUS_CANCELLED); - soup_session_cancel_message(rf->b_session, rf->b_msg_session); -+#else -+ soup_session_cancel_message(rf->b_session, rf->b_msg_session, SOUP_STATUS_CANCELLED); -+#endif - } - soup_session_abort(rf->b_session); - rf->b_session = NULL; -@@ -2326,9 +2588,17 @@ - html_set_base(xmlNode *doc, char *base, char *tag, char *prop, char *basehref) - { - gchar *url; -+#if LIBSOUP_VERSION < 2003000 - SoupUri *newuri; -+#else -+ SoupURI *newuri; -+#endif - gchar *newuristr; -+#if LIBSOUP_VERSION < 2003000 - SoupUri *base_uri = soup_uri_new (base); -+#else -+ SoupURI *base_uri = soup_uri_new (base); -+#endif - while (doc = html_find((xmlNode *)doc, tag)) - { - if (url = xmlGetProp(doc, prop)) -@@ -2364,7 +2634,11 @@ - // all relative links - if (basehref != NULL) - { -+#if LIBSOUP_VERSION < 2003000 - SoupUri *newbase_uri = soup_uri_new (basehref); -+#else -+ SoupURI *newbase_uri = soup_uri_new (basehref); -+#endif - newuri = soup_uri_new_with_base (newbase_uri, url); - soup_uri_free(newbase_uri); - } -@@ -2431,7 +2705,9 @@ - ctxt->vctxt.error = my_xml_parser_error_handler; - ctxt->vctxt.warning = my_xml_parser_error_handler; - -- xmlCtxtUseOptions(ctxt, XML_PARSE_DTDLOAD| XML_PARSE_NOENT); -+ xmlCtxtUseOptions(ctxt, XML_PARSE_DTDLOAD -+ | XML_PARSE_NOENT -+ | XML_PARSE_NOCDATA); - - xmlParseDocument (ctxt); - -@@ -2619,7 +2895,7 @@ - { - // GtkAdjustment *a = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(widget)); - // g_print("page size:%d\n", a->page_size); --// g_print("value size:%d\n", a->value); -+ g_print("mycall()\n"); - int width; - GtkRequisition req; - // EMFormatHTMLDisplay *efhd = (EMFormatHTMLDisplay *) efh; -@@ -2636,6 +2912,7 @@ - { - width = widget->allocation.width - 16 - 2;// - 16; - int height = widget->allocation.height - 16 - k; -+ g_print("resize webkit :width:%d, height: %d\n", width, height); - #ifdef RSS_DEBUG - g_print("resize webkit :width:%d, height: %d\n", width, height); - #endif -@@ -2652,14 +2929,26 @@ - // g_print("size:%d\n", wheight); - // height = req.height - 200;// - 16 - 194; - // g_print("my cal %d w:%d h:%d\n", GTK_IS_WIDGET(data), width, height); -- if (GTK_IS_WIDGET(data) && height > 50) -+ g_print("data:%p\n", data); -+ g_print("is_widget:%d\n", GTK_IS_WIDGET(widget)); -+ g_print("is_data:%p\n", data); -+ g_print("is_is_data:%d\n", GTK_IS_WIDGET(gtk_bin_get_child(data))); -+ g_print("is_is_data:%d\n", GTK_IS_WIDGET(data)); -+// if (GTK_IS_MOZ_EMBED(data)) -+// { -+// g_print("is mozembed\n"); -+ if (data && GTK_IS_WIDGET(data) && height > 50) -+ { - gtk_widget_set_size_request((GtkWidget *)data, width, height); - // apparently resizing gtkmozembed widget won't redraw if using xulrunner - // there is no point in reload for the rest - #ifdef HAVE_XULRUNNER -- gtk_moz_embed_reload(rf->mozembed, GTK_MOZ_EMBED_FLAG_RELOADNORMAL); -+ gtk_moz_embed_reload(rf->mozembed, GTK_MOZ_EMBED_FLAG_RELOADNORMAL); - #endif -+ } -+// } - } -+ g_print("resize done\n"); - } - - #ifdef HAVE_GTKMOZEMBED -@@ -2776,6 +3065,7 @@ - // gtk_box_pack_start (GTK_BOX (w), gpage, TRUE, TRUE, 0); - gtk_widget_show_all(moz); - gtk_container_add ((GtkContainer *) eb, moz); -+ gtk_container_check_resize ((GtkContainer *) eb); - g_print("add\n"); - // gtk_widget_set_size_request((GtkWidget *)rf->mozembed, 330, 330); - // gtk_container_add ((GtkContainer *) eb, rf->mozembed); -@@ -2874,6 +3164,7 @@ - gtk_moz_embed_stop_load(GTK_MOZ_EMBED(rf->mozembed)); - // gtk_moz_embed_pop_startup(); - #endif -+ g_signal_stop_emission_by_name(po->format->html, "size_allocate"); - if (rf->mozembed) - { - g_print("call pfree() for controls2\n"); -@@ -2957,6 +3248,7 @@ - pobj = (struct _org_gnome_rss_controls_pobject *) em_format_html_add_pobject ((EMFormatHTML *) t->format, sizeof(*pobj), classid, message, (EMFormatHTMLPObjectFunc)org_gnome_rss_controls2); - pobj->website = g_strstrip(g_strdup((gchar *)website)); - pobj->is_html = GPOINTER_TO_INT(is_html); -+ pobj->format = (EMFormatHTML *)t->format; - pobj->object.free = pfree; - camel_stream_printf (t->stream, "
\n", classid); - goto out; -@@ -2974,14 +3266,21 @@ - camel_stream_printf (t->stream, ""); - goto out; - } -- xmlDoc *doc = parse_html(addr, content->str, content->len); -- if (doc) -+ -+ inlen = content->len; -+ utf8len = 5*inlen+1; -+ buffer2 = g_malloc(utf8len); -+ UTF8ToHtml(buffer2, &utf8len, content->str, &inlen); -+ xmlDoc *src = (xmlDoc *)parse_html(addr, buffer2, strlen(buffer2)); -+ -+ if (src) - { -- htmlDocDumpMemory(doc, &buff, &size); -+ htmlDocDumpMemory(src, &buff, &size); - #ifdef RSS_DEBUG - g_print("%s\n", buff); - #endif -- xmlFree(doc); -+ g_print("%s\n", buff); -+ xmlFree(src); - } - else - goto out; -@@ -3099,11 +3398,34 @@ - gchar * - generate_safe_chn_name(gchar *chn_name) - { -- guint i = 1; -+ guint i = 0; -+ gchar *c; -+ gchar *stmp; - while (check_chn_name(chn_name)) - { -+ GString *result = g_string_new (NULL); - gchar *tmp = chn_name; -- chn_name = g_strdup_printf("%s #%d", tmp, i++); -+ if (c = strrchr(tmp, '#')) -+ { -+ if (isdigit(*(c+1))) -+ { -+ stmp = g_strndup(tmp, c - tmp); -+ while (isdigit(*(c+1))) -+ { -+ g_string_append_c(result, *(c+1)); -+ c++; -+ } -+ i = atoi(result->str); -+ chn_name = g_strdup_printf("%s#%d", stmp, i+1); -+ g_free(stmp); -+ } -+ else -+ chn_name = g_strdup_printf("%s #%d", tmp, i+1); -+ } -+ else -+ chn_name = g_strdup_printf("%s #%d", tmp, i+1); -+ memset(result->str, 0, result->len); -+ g_string_free (result, TRUE); - g_free(tmp); - } - return chn_name; -@@ -3293,7 +3617,11 @@ - } - - void -+#if LIBSOUP_VERSION < 2003000 - finish_feed (SoupMessage *msg, gpointer user_data) -+#else -+finish_feed (SoupSession *soup_sess, SoupMessage *msg, gpointer user_data) -+#endif - { - GError *err = NULL; - gchar *chn_name = NULL; -@@ -3365,14 +3702,22 @@ - goto out; - } - -+#if LIBSOUP_VERSION < 2003000 - if (!msg->response.length) -+#else -+ if (!msg->response_body->length) -+#endif - goto out; - - if (msg->status_code == SOUP_STATUS_CANCELLED) - goto out; - - -+#if LIBSOUP_VERSION < 2003000 - GString *response = g_string_new_len(msg->response.body, msg->response.length); -+#else -+ GString *response = g_string_new_len(msg->response_body->data, msg->response_body->length); -+#endif - //#ifdef RSS_DEBUG - g_print("feed %s\n", user_data); - //#endif -@@ -3393,19 +3738,24 @@ - if (!user_data || !lookup_key(user_data)) - goto out; - r->uri = g_hash_table_lookup(rf->hr, lookup_key(user_data)); -+ - chn_name = display_doc (r); - -- if (g_ascii_strcasecmp(user_data, chn_name) != 0) -- { -- gchar *md5 = g_strdup(g_hash_table_lookup(rf->hrname, user_data)); -- g_hash_table_remove(rf->hrname_r, md5); -- g_hash_table_remove(rf->hrname, user_data); -- g_hash_table_insert(rf->hrname, g_strdup(chn_name), md5); -- g_hash_table_insert(rf->hrname_r, g_strdup(md5), g_strdup(chn_name)); -- save_gconf_feed(); -- } - if (chn_name) -+ { -+ if (g_ascii_strcasecmp(user_data, chn_name) != 0) -+ { -+ gchar *md5 = g_strdup( -+ g_hash_table_lookup(rf->hrname, user_data)); -+ g_hash_table_remove(rf->hrname_r, md5); -+ g_hash_table_remove(rf->hrname, user_data); -+ g_hash_table_insert(rf->hrname, g_strdup(chn_name), md5); -+ g_hash_table_insert(rf->hrname_r, g_strdup(md5), -+ g_strdup(chn_name)); -+ save_gconf_feed(); -+ } - g_free(chn_name); -+ } - if (r->cache) - xmlFreeDoc(r->cache); - if (r->type) -@@ -3865,7 +4239,7 @@ - #if GTK_2_6 - gtk_label_set_ellipsize (GTK_LABEL (label2), PANGO_ELLIPSIZE_START); - #endif -- gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_CENTER); -+ gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_FILL); - readrss_label = gtk_label_new(_("Please wait")); - if (!rf->progress_dialog) - { -@@ -4120,6 +4494,7 @@ - rf->rc_id = 0; - rf->feed_queue = 0; - rf->main_folder = get_main_folder(); -+ rf->soup_auth_retry = 1; - get_feed_folders(); - #if HAVE_DBUS - g_print("init_dbus()\n"); -@@ -4138,13 +4513,13 @@ - if (!render) // set render just in case it was forced in configure - { - render = RENDER_N; -- gconf_client_set_int(rss_gconf, GCONF_KEY_HTML_RENDER, render, NULL); -+ gconf_client_set_int(rss_gconf, -+ GCONF_KEY_HTML_RENDER, render, NULL); - } - #ifdef HAVE_GTKMOZEMBED - if (2 == render) - rss_mozilla_init(); - #endif -- g_print("called\n"); - } - upgrade = 2; - } else { -@@ -4166,6 +4541,7 @@ - CamelMimeMessage *new = camel_mime_message_new(); - CamelInternetAddress *addr; - CamelMessageInfo *info; -+ CamelException *ex; - struct tm tm; - time_t time; - CamelDataWrapper *rtext; -@@ -4198,9 +4574,15 @@ - //handle pubdate - if (CF->date) - { -- time_t actual_time; -- actual_time = camel_header_decode_date(CF->date, &offset); -- camel_mime_message_set_date(new, actual_time, offset); -+ //check if CF->date obeys rfc822 -+ if (!is_rfc822(CF->date)) -+ camel_mime_message_set_date(new, CAMEL_MESSAGE_DATE_CURRENT, 0); -+ else -+ { -+ time_t actual_time; -+ actual_time = camel_header_decode_date(CF->date, &offset); -+ camel_mime_message_set_date(new, actual_time, offset); -+ } - } - else - { -@@ -4762,7 +5146,11 @@ - } - - static void -+#if LIBSOUP_VERSION < 2003000 - finish_enclosure (SoupMessage *msg, create_feed *user_data) -+#else -+finish_enclosure (SoupSession *soup_sess, SoupMessage *msg, create_feed *user_data) -+#endif - { - gchar *tmpdir = NULL; - gchar *name = NULL; -@@ -4775,7 +5163,11 @@ - f = fopen(name, "wb+"); - if (f) - { -+#if LIBSOUP_VERSION < 2003000 - fwrite(msg->response.body, msg->response.length, 1, f); -+#else -+ fwrite(msg->response_body->data, msg->response_body->length, 1, f); -+#endif - fclose(f); - //replace encl with filename generated - g_free(user_data->encl); -@@ -5155,6 +5547,7 @@ - #ifdef RSS_DEBUG - g_print("Cleaning folder: %s\n", real_folder); - #endif -+ - gchar *real_name = g_strdup_printf("%s/%s", lookup_main_folder(), real_folder); - if (!(folder = camel_store_get_folder (store, real_name, 0, NULL))) - goto fail; -@@ -5622,6 +6015,12 @@ - renderer, - set_sensitive, - NULL, NULL); -+ -+#if !defined(HAVE_GTKMOZEMBED) && !defined (HAVE_WEBKIT) -+ GtkWidget *label_webkit = glade_xml_get_widget(sf->gui, "label_webkits"); -+ gtk_label_set_text(label_webkit, _("Note: In order to be able to use Mozilla (Firefox) or Apple Webkit \nas renders you need firefox or webkit devel package \ninstalled and evolution-rss should be recompiled to see those packages.")); -+ gtk_widget_show(label_webkit); -+#endif - g_signal_connect (combo, "changed", G_CALLBACK (render_engine_changed), NULL); - g_signal_connect (combo, "value-changed", G_CALLBACK (render_engine_changed), NULL); - gtk_widget_show(combo); ---- evolution-rss-0.0.7/ChangeLog 2008-02-10 18:50:24.000000000 +0200 -+++ evolution-rss/trunk/ChangeLog 2008-02-10 20:57:37.000000000 +0200 -@@ -1,3 +1,14 @@ -+Sun 10 Feb 2008 08:51:04 PM EET -+ -+ * backporting evolution-rss-0.0.7 to -+ libsoup-2.4 -+ * fix generation safe channel name -+ * fix gtkhtml UTF8 rendering -+ * fix xml parsing nocdata -+ * fix proxy options that were ignored -+ * fix authentication window -+ * checks for date to obey rfc822 -+ - Tue 18 Dec 2007 09:38:56 PM EET - - * fix m4 support for evolution >= 2.11 diff --git a/sources b/sources index b2ff369..72cb0e7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -01635af0e33b4dab0a4855160352512c evolution-rss-0.0.7.tar.gz +c5adce093e332573bc1fcfaf23c1f8b6 evolution-rss-0.0.8.tar.gz