[libgrss] added ability to add SoupSession features (gzip compression and cookies)
- From: Roberto Guido <rguido src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgrss] added ability to add SoupSession features (gzip compression and cookies)
- Date: Fri, 7 Jun 2013 21:02:09 +0000 (UTC)
commit 186ea796fbdaa990afc3191d45d674e3b97e2f05
Author: Heinrich Müller <henmull src gnome org>
Date: Fri Jun 7 13:12:27 2013 +0200
added ability to add SoupSession features (gzip compression and cookies)
src/feed-channel.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++
src/feed-channel.h | 4 ++
2 files changed, 96 insertions(+), 0 deletions(-)
---
diff --git a/src/feed-channel.c b/src/feed-channel.c
index 7dac065..19d9380 100644
--- a/src/feed-channel.c
+++ b/src/feed-channel.c
@@ -59,8 +59,10 @@ struct _GrssFeedChannelPrivate {
gchar *copyright;
gchar *editor;
GList *contributors;
+ SoupCookieJar *jar;
gchar *webmaster;
gchar *generator;
+ gboolean gzip;
time_t pub_time;
time_t update_time;
@@ -108,6 +110,8 @@ grss_feed_channel_finalize (GObject *obj)
g_free (iter->data);
g_list_free (chan->priv->contributors);
}
+ if (chan->priv->jar != NULL)
+ g_free (chan->priv->jar);
}
static void
@@ -644,6 +648,39 @@ grss_feed_channel_get_contributors (GrssFeedChannel *channel)
}
/**
+ * grss_feed_channel_add_cookie:
+ * @channel: a #GrssFeedChannel.
+ * @cookie: HTML cookie to add to the channel's cookie jar
+ */
+void
+grss_feed_channel_add_cookie (GrssFeedChannel *channel, SoupCookie *cookie)
+{
+ if (cookie != NULL)
+ {
+ if (channel->priv->jar == NULL)
+ channel->priv->jar = soup_cookie_jar_new();
+ soup_cookie_jar_add_cookie (channel->priv->jar, cookie);
+ }
+}
+
+/**
+ * grss_feed_channel_get_cookies:
+ * @channel: a #GrssFeedChannel.
+ *
+ * Retrieves reference to the HTML cookies of the @channel.
+ * Must be freed with g_list_free.
+ *
+ * Return value: list of cookies to the channel, or %NULL.
+ */
+GList*
+grss_feed_channel_get_cookies (GrssFeedChannel *channel)
+{
+ if (channel->priv->jar != NULL)
+ return soup_cookie_jar_all_cookies(channel->priv->jar);
+ return NULL;
+}
+
+/**
* grss_feed_channel_set_webmaster:
* @channel: a #GrssFeedChannel.
* @webmaster: webmaster of the feed.
@@ -686,6 +723,18 @@ grss_feed_channel_set_generator (GrssFeedChannel *channel, gchar *generator)
}
/**
+ * grss_feed_channel_set_gzip_compression:
+ * Set the Gzip compression for the channel to on or off
+ * @value either enable (TRUE) or disable compression (FALSE)
+ *
+ */
+void
+grss_feed_channel_set_gzip_compression(GrssFeedChannel *channel, gboolean value)
+{
+ channel->priv->gzip = value;
+}
+
+/**
* grss_feed_channel_get_generator:
* @channel: a #GrssFeedChannel.
*
@@ -700,6 +749,17 @@ grss_feed_channel_get_generator (GrssFeedChannel *channel)
}
/**
+ * grss_feed_channel_get_gzip_compression:
+ *
+ * GZip Compression of the channel is either on or off
+ */
+gboolean
+grss_feed_channel_get_gzip_compression (GrssFeedChannel *channel)
+{
+ return channel->priv->gzip;
+}
+
+/**
* grss_feed_channel_set_publish_time:
* @channel: a #GrssFeedChannel.
* @publish: timestamp of publishing.
@@ -825,6 +885,22 @@ quick_and_dirty_parse (GrssFeedChannel *channel, SoupMessage *msg, GList **save_
}
}
+static void
+init_soup_session (SoupSession *session, GrssFeedChannel *channel)
+{
+ if (channel->priv->jar != NULL)
+ soup_session_add_feature(session, SOUP_SESSION_FEATURE(channel->priv->jar));
+ if (channel->priv->gzip == TRUE)
+ soup_session_add_feature_by_type (session, SOUP_TYPE_CONTENT_DECODER);
+}
+
+static void
+init_soup_message (SoupMessage* msg, GrssFeedChannel *channel)
+{
+ if (channel->priv->gzip == TRUE)
+ soup_message_headers_append(msg->request_headers, "Accept-encoding", "gzip");
+}
+
/**
* grss_feed_channel_fetch:
* @channel: a #GrssFeedChannel.
@@ -850,7 +926,11 @@ grss_feed_channel_fetch (GrssFeedChannel *channel, GError **error)
ret = FALSE;
session = soup_session_sync_new ();
+ init_soup_session (session, channel);
+
msg = soup_message_new ("GET", grss_feed_channel_get_source (channel));
+ init_soup_message (msg, channel);
+
status = soup_session_send_message (session, msg);
if (status >= 200 && status <= 299) {
@@ -932,7 +1012,11 @@ grss_feed_channel_fetch_async (GrssFeedChannel *channel, GAsyncReadyCallback cal
result = g_simple_async_result_new (G_OBJECT (channel), callback, user_data,
grss_feed_channel_fetch_async);
session = soup_session_async_new ();
+ init_soup_session (session, channel);
+
msg = soup_message_new ("GET", grss_feed_channel_get_source (channel));
+ init_soup_message (msg, channel);
+
soup_session_queue_message (session, msg, feed_downloaded, result);
}
@@ -957,7 +1041,11 @@ grss_feed_channel_fetch_all (GrssFeedChannel *channel, GError **error)
SoupSession *session;
session = soup_session_sync_new ();
+ init_soup_session (session, channel);
+
msg = soup_message_new ("GET", grss_feed_channel_get_source (channel));
+ init_soup_message(msg, channel);
+
status = soup_session_send_message (session, msg);
items = NULL;
@@ -1037,7 +1125,11 @@ grss_feed_channel_fetch_all_async (GrssFeedChannel *channel, GAsyncReadyCallback
result = g_simple_async_result_new (G_OBJECT (channel), callback, user_data,
grss_feed_channel_fetch_async);
session = soup_session_async_new ();
+ init_soup_session (session, channel);
+
msg = soup_message_new ("GET", grss_feed_channel_get_source (channel));
+ init_soup_message (msg, channel);
+
soup_session_queue_message (session, msg, feed_downloaded_return_items, result);
}
diff --git a/src/feed-channel.h b/src/feed-channel.h
index ec8ebfe..3519275 100644
--- a/src/feed-channel.h
+++ b/src/feed-channel.h
@@ -77,10 +77,14 @@ void grss_feed_channel_set_editor (GrssFeedChannel
*channel, gchar *editor);
const gchar* grss_feed_channel_get_editor (GrssFeedChannel *channel);
void grss_feed_channel_add_contributor (GrssFeedChannel *channel, gchar
*contributor);
const GList* grss_feed_channel_get_contributors (GrssFeedChannel *channel);
+void grss_feed_channel_add_cookie (GrssFeedChannel *channel, SoupCookie
*cookie);
+GList* grss_feed_channel_get_cookies (GrssFeedChannel *channel);
void grss_feed_channel_set_webmaster (GrssFeedChannel *channel, gchar *webmaster);
const gchar* grss_feed_channel_get_webmaster (GrssFeedChannel *channel);
void grss_feed_channel_set_generator (GrssFeedChannel *channel, gchar *generator);
const gchar* grss_feed_channel_get_generator (GrssFeedChannel *channel);
+void grss_feed_channel_set_gzip_compression(GrssFeedChannel *channel, gboolean value);
+gboolean grss_feed_channel_get_gzip_compression (GrssFeedChannel *channel);
void grss_feed_channel_set_publish_time (GrssFeedChannel *channel, time_t publish);
time_t grss_feed_channel_get_publish_time (GrssFeedChannel *channel);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]