evolution-rss r419 - in trunk: . src
- From: lucilanga svn gnome org
- To: svn-commits-list gnome org
- Subject: evolution-rss r419 - in trunk: . src
- Date: Wed, 17 Dec 2008 20:06:57 +0000 (UTC)
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]