evolution-rss r419 - in trunk: . src



Author: lucilanga
Date: Wed Dec 17 20:06:57 2008
New Revision: 419
URL: http://svn.gnome.org/viewvc/evolution-rss?rev=419&view=rev

Log:
2008-12-17  Lucian Langa  <lucilanga gnome org>

* src/file-gio.{c,h}: gio file support
* src/fetch.c: fetch_unblocking: add
support for file operations
* src/rss.c: statuscb correctly update
progress bar

Modified:
   trunk/ChangeLog
   trunk/src/fetch.c
   trunk/src/file-gio.c
   trunk/src/rss.c
   trunk/src/rss.h

Modified: trunk/src/fetch.c
==============================================================================
--- trunk/src/fetch.c	(original)
+++ trunk/src/fetch.c	Wed Dec 17 20:06:57 2008
@@ -19,6 +19,8 @@
  */
 
 #include "network.h"
+#include "rss.h"
+#include "file-gio.h"
 
 GString*
 fetch_blocking(const char *url, GSList *headers, GString *post,
@@ -65,8 +67,16 @@
 	scheme = g_uri_parse_scheme(url);
 
 	if (!g_ascii_strcasecmp(scheme, "file")) {
-		
+		g_free(scheme);
+		return file_get_unblocking(url,
+				NULL, // add status here //
+				NULL,
+				gio_finish_feed,
+				cbdata2,
+				0,
+				&err);	
 	} else {
+		g_free(scheme);
 		return net_get_unblocking(url,
                                 cb,
                                 NULL,

Modified: trunk/src/file-gio.c
==============================================================================
--- trunk/src/file-gio.c	(original)
+++ trunk/src/file-gio.c	Wed Dec 17 20:06:57 2008
@@ -18,103 +18,24 @@
  * vim: tabstop=4 shiftwidth=4 noexpandtab :
  */
 
+#include <gio/gio.h>
 
-GString*
-file_get_unblocking(const char *uri, GSList *headers, GString *post,
-                  NetStatusCallback cb, gpointer data,
-                  GError **err) {
+#include "file-gio.h"
+
+gboolean
+file_get_unblocking(const char *uri, NetStatusCallback cb,
+                                gpointer data, gpointer cb2,
+                                gpointer cbdata2,
+                                guint track,
+                                GError **err)
+{
 	GFile *file;
 
 	file = g_file_new_for_uri (uri);
-	g_file_read_async (file,
-                           G_PRIORITY_DEFAULT,
-                           GCancellable *cancellable,
-                           GAsyncReadyCallback callback,
-                           gpointer user_data);
+	g_file_load_contents_async (file,
+                           NULL,
+                           cb2,
+                           cbdata2);
 	return 1;
-
-#if LIBSOUP_VERSION < 2003000
-        SoupUri *suri = NULL;
-#else
-        SoupURI *suri = NULL;
-#endif
-        SoupMessage *req = NULL;
-        GString *response = NULL;
-        CallbackInfo info = { cb, data, 0, 0 };
-        SoupSession *soup_sess = NULL;
-
-        if (!rf->b_session)
-                rf->b_session = soup_sess =
-                        soup_session_sync_new_with_options(SOUP_SESSION_TIMEOUT, SS_TIMEOUT, NULL);
-        else
-                soup_sess = rf->b_session;
-
-        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
-
-        req = soup_message_new(SOUP_METHOD_GET, url);
-        if (!req)
-        {
-                g_set_error(err, NET_ERROR, NET_ERROR_GENERIC,
-                                soup_status_get_phrase(2));                     //invalid url
-                goto out;
-        }
-        d(g_print("request ok :%d\n", req->status_code));
-        g_signal_connect(G_OBJECT(req), "got-chunk",
-                        G_CALLBACK(got_chunk_blocking_cb), &info);
-        for (; headers; headers = headers->next) {
-                char *header = headers->data;
-                /* soup wants the key and value separate, so we have to munge this
- *                  * 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_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);
-
-        proxify_session(soup_sess);
-        rf->b_session = soup_sess;
-        rf->b_msg_session = req;
-        soup_session_send_message(soup_sess, req);
-
-        if (req->status_code != SOUP_STATUS_OK) {
-                //might not be a good ideea
-                soup_session_abort(soup_sess);
-                g_object_unref(soup_sess);
-                rf->b_session = NULL;
-                g_set_error(err, NET_ERROR, NET_ERROR_GENERIC,
-                                soup_status_get_phrase(req->status_code));
-                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);
-        if (req) g_object_unref(G_OBJECT(req));
-
-        return response;
 }
 

Modified: trunk/src/rss.c
==============================================================================
--- trunk/src/rss.c	(original)
+++ trunk/src/rss.c	Wed Dec 17 20:06:57 2008
@@ -73,6 +73,7 @@
 #define O_BINARY 0
 #endif
 
+#include <glib.h>
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtk.h>
 #include <gdk-pixbuf/gdk-pixbuf.h>
@@ -128,6 +129,7 @@
 #include "rss.h"
 #include "parser.h"
 #include "network-soup.c"
+#include "file-gio.c"
 #include "fetch.c"
 #include "misc.c"
 #if HAVE_DBUS
@@ -2129,6 +2131,14 @@
 		g_hash_table_replace(rf->hrttl, g_strdup(key), GINT_TO_POINTER(value));
 }
 
+struct _rfMessage {
+	guint 	 status_code;
+	gchar 	*body;
+	goffset	 length;
+};
+
+typedef struct _rfMessage rfMessage;
+
 void
 #if LIBSOUP_VERSION < 2003000
 finish_feed (SoupMessage *msg, gpointer user_data)
@@ -2136,6 +2146,45 @@
 finish_feed (SoupSession *soup_sess, SoupMessage *msg, gpointer user_data)
 #endif
 {
+	rfMessage *rfmsg = g_new0(rfMessage, 1);
+	rfmsg->status_code = msg->status_code;
+#if LIBSOUP_VERSION < 2003000
+	rfmsg->body = msg->response.body;
+	rfmsg->length = msg->response.length;
+#else
+	rfmsg->body = msg->response_body->data;
+	rfmsg->length = msg->response_body->length; 
+#endif
+	generic_finish_feed(rfmsg, user_data);
+	g_free(rfmsg);
+}
+
+void
+gio_finish_feed (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+	gsize file_size;
+        char *file_contents;
+        gboolean result;
+
+	rfMessage *rfmsg = g_new0(rfMessage, 1);
+
+	result = g_file_load_contents_finish (G_FILE (object),
+                                              res,
+                                              &file_contents, &file_size,
+                                              NULL, NULL);
+	rfmsg->status_code = SOUP_STATUS_OK;
+	rfmsg->body = file_contents;
+	rfmsg->length = file_size;
+	generic_finish_feed(rfmsg, user_data);
+	if (result) {
+                g_free (file_contents);
+        }
+	g_free(rfmsg);
+}
+
+void
+generic_finish_feed(rfMessage *msg, gpointer user_data)
+{
 	GError *err = NULL;
 	gchar *chn_name = NULL;
 	//FIXME user_data might be out of bounds here
@@ -2204,9 +2253,9 @@
 	    msg->status_code != SOUP_STATUS_CANCELLED) {
         	g_set_error(&err, NET_ERROR, NET_ERROR_GENERIC,
                 	soup_status_get_phrase(msg->status_code));
-                gchar *msg = g_strdup_printf("\n%s\n%s", user_data, err->message);
-                rss_error(user_data, NULL, _("Error fetching feed."), msg);
-                g_free(msg);
+                gchar *tmsg = g_strdup_printf("\n%s\n%s", user_data, err->message);
+                rss_error(user_data, NULL, _("Error fetching feed."), tmsg);
+                g_free(tmsg);
         	goto out;
     	}
 
@@ -2240,22 +2289,15 @@
 		goto out;
 	}
 	
-#if LIBSOUP_VERSION < 2003000
-	if (!msg->response.length)
-#else
-	if (!msg->response_body->length)
-#endif
+	if (!msg->length)
 		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
+	GString *response = g_string_new_len(msg->body, msg->length);
+
 //#ifdef RSS_DEBUG
 	g_print("feed %s\n", user_data);
 //#endif
@@ -2381,7 +2423,7 @@
 			g_hash_table_lookup(rf->hr, lookup_key(key)), key));
 		rf->feed_queue++;
 
-		net_get_unblocking(
+		fetch_unblocking(
 				g_hash_table_lookup(rf->hr, lookup_key(key)),
 				user_data,
 				key,

Modified: trunk/src/rss.h
==============================================================================
--- trunk/src/rss.h	(original)
+++ trunk/src/rss.h	Wed Dec 17 20:06:57 2008
@@ -316,6 +316,7 @@
 void populate_reversed(gpointer key, gpointer value, GHashTable *hash);
 gchar *rss_component_peek_base_directory(MailComponent *component);
 static void custom_feed_timeout(void);
+void gio_finish_feed (GObject *object, GAsyncResult *res, gpointer user_data);
 
 
 typedef struct FEED_FOLDERS {



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