[libgdata] core: Add a "proxy-resolver" property.



commit 8f1923fcd9c4203f68ce6a0405526500a77783e5
Author: Matthew Barnes <mbarnes redhat com>
Date:   Wed Oct 9 12:54:11 2013 -0400

    core: Add a "proxy-resolver" property.
    
    Bound to SoupSession's "proxy-resolver" property.
    
    This also bumps the libsoup requirement to 2.42.
    
    This deprecates the following API:
     • GDataService:proxy-uri
     • gdata_service_[get|set]_proxy_uri()
    and adds the following new API:
     • GDataService:proxy-resolver
     • gdata_service_[get|set]_proxy_resolver()
    
    Helps: https://bugzilla.gnome.org/show_bug.cgi?id=709758

 configure.ac                      |    2 +-
 docs/reference/gdata-sections.txt |    2 +
 gdata/gdata-service.c             |  113 +++++++++++++++++++++++++++++++++----
 gdata/gdata-service.h             |    9 ++-
 gdata/gdata.symbols               |    2 +
 5 files changed, 114 insertions(+), 14 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 252d6e0..b56123d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -35,7 +35,7 @@ AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums])
 # Requirements
 GLIB_REQS=2.31.0
 GIO_REQS=2.17.3
-SOUP_REQS=2.37.91
+SOUP_REQS=2.42.0
 OAUTH_REQS=0.9.4
 GTK_REQS=2.91.2
 GOA_REQS=3.2
diff --git a/docs/reference/gdata-sections.txt b/docs/reference/gdata-sections.txt
index 63991ac..773600a 100644
--- a/docs/reference/gdata-sections.txt
+++ b/docs/reference/gdata-sections.txt
@@ -37,6 +37,8 @@ gdata_service_delete_entry_async
 gdata_service_delete_entry_finish
 gdata_service_get_proxy_uri
 gdata_service_set_proxy_uri
+gdata_service_get_proxy_resolver
+gdata_service_set_proxy_resolver
 gdata_service_get_timeout
 gdata_service_set_timeout
 gdata_service_get_locale
diff --git a/gdata/gdata-service.c b/gdata/gdata-service.c
index 28a5460..ee6f5de 100644
--- a/gdata/gdata-service.c
+++ b/gdata/gdata-service.c
@@ -78,10 +78,14 @@ static GDataFeed *__gdata_service_query (GDataService *self, GDataAuthorizationD
                                          GType entry_type, GCancellable *cancellable, 
GDataQueryProgressCallback progress_callback,
                                          gpointer progress_user_data, GError **error, gboolean is_async);
 
+static SoupURI *_get_proxy_uri (GDataService *self);
+static void _set_proxy_uri (GDataService *self, SoupURI *proxy_uri);
+
 struct _GDataServicePrivate {
        SoupSession *session;
        gchar *locale;
        GDataAuthorizer *authorizer;
+       GProxyResolver *proxy_resolver;
 };
 
 enum {
@@ -89,6 +93,7 @@ enum {
        PROP_TIMEOUT,
        PROP_LOCALE,
        PROP_AUTHORIZER,
+       PROP_PROXY_RESOLVER,
 };
 
 G_DEFINE_TYPE (GDataService, gdata_service, G_TYPE_OBJECT)
@@ -119,6 +124,7 @@ gdata_service_class_init (GDataServiceClass *klass)
         * Note that if a #GDataAuthorizer is being used with this #GDataService, the authorizer might also 
need its proxy URI setting.
         *
         * Since: 0.2.0
+        * Deprecated: Use #GDataService:proxy-resolver instead, which gives more flexibility over the proxy 
used. (Since: 0.15.0.)
         **/
        g_object_class_install_property (gobject_class, PROP_PROXY_URI,
                                         g_param_spec_boxed ("proxy-uri",
@@ -186,6 +192,19 @@ gdata_service_class_init (GDataServiceClass *klass)
                                                              "Authorizer", "An authorizer object to provide 
an authorization token for each request.",
                                                              GDATA_TYPE_AUTHORIZER,
                                                              G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+       /**
+        * GDataService:proxy-resolver:
+        *
+        * The #GProxyResolver used to determine a proxy URI.  Setting this will clear the 
#GDataService:proxy-uri property.
+        *
+        * Since: 0.15.0
+        */
+       g_object_class_install_property (gobject_class, PROP_PROXY_RESOLVER,
+                                        g_param_spec_object ("proxy-resolver",
+                                                             "Proxy Resolver", "A GProxyResolver used to 
determine a proxy URI.",
+                                                             G_TYPE_PROXY_RESOLVER,
+                                                             G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 }
 
 static void
@@ -200,6 +219,9 @@ gdata_service_init (GDataService *self)
        /* Proxy the SoupSession's proxy-uri and timeout properties */
        g_signal_connect (self->priv->session, "notify::proxy-uri", (GCallback) notify_proxy_uri_cb, self);
        g_signal_connect (self->priv->session, "notify::timeout", (GCallback) notify_timeout_cb, self);
+
+       /* Keep our GProxyResolver synchronized with SoupSession's. */
+       g_object_bind_property (self->priv->session, "proxy-resolver", self, "proxy-resolver", 
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
 }
 
 static void
@@ -215,6 +237,8 @@ gdata_service_dispose (GObject *object)
                g_object_unref (priv->session);
        priv->session = NULL;
 
+       g_clear_object (&priv->proxy_resolver);
+
        /* Chain up to the parent class */
        G_OBJECT_CLASS (gdata_service_parent_class)->dispose (object);
 }
@@ -237,7 +261,7 @@ gdata_service_get_property (GObject *object, guint property_id, GValue *value, G
 
        switch (property_id) {
                case PROP_PROXY_URI:
-                       g_value_set_boxed (value, gdata_service_get_proxy_uri (GDATA_SERVICE (object)));
+                       g_value_set_boxed (value, _get_proxy_uri (GDATA_SERVICE (object)));
                        break;
                case PROP_TIMEOUT:
                        g_value_set_uint (value, gdata_service_get_timeout (GDATA_SERVICE (object)));
@@ -248,6 +272,9 @@ gdata_service_get_property (GObject *object, guint property_id, GValue *value, G
                case PROP_AUTHORIZER:
                        g_value_set_object (value, priv->authorizer);
                        break;
+               case PROP_PROXY_RESOLVER:
+                       g_value_set_object (value, priv->proxy_resolver);
+                       break;
                default:
                        /* We don't have any other property... */
                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -260,7 +287,7 @@ gdata_service_set_property (GObject *object, guint property_id, const GValue *va
 {
        switch (property_id) {
                case PROP_PROXY_URI:
-                       gdata_service_set_proxy_uri (GDATA_SERVICE (object), g_value_get_boxed (value));
+                       _set_proxy_uri (GDATA_SERVICE (object), g_value_get_boxed (value));
                        break;
                case PROP_TIMEOUT:
                        gdata_service_set_timeout (GDATA_SERVICE (object), g_value_get_uint (value));
@@ -271,6 +298,9 @@ gdata_service_set_property (GObject *object, guint property_id, const GValue *va
                case PROP_AUTHORIZER:
                        gdata_service_set_authorizer (GDATA_SERVICE (object), g_value_get_object (value));
                        break;
+               case PROP_PROXY_RESOLVER:
+                       gdata_service_set_proxy_resolver (GDATA_SERVICE (object), g_value_get_object (value));
+                       break;
                default:
                        /* We don't have any other property... */
                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -1799,6 +1829,20 @@ notify_proxy_uri_cb (GObject *gobject, GParamSpec *pspec, GObject *self)
        g_object_notify (self, "proxy-uri");
 }
 
+/* Static function which isn't deprecated so we can continue using it internally. */
+static SoupURI *
+_get_proxy_uri (GDataService *self)
+{
+       SoupURI *proxy_uri;
+
+       g_return_val_if_fail (GDATA_IS_SERVICE (self), NULL);
+
+       g_object_get (self->priv->session, SOUP_SESSION_PROXY_URI, &proxy_uri, NULL);
+       g_object_unref (proxy_uri); /* remove the ref added by g_object_get */
+
+       return proxy_uri;
+}
+
 /**
  * gdata_service_get_proxy_uri:
  * @self: a #GDataService
@@ -1808,18 +1852,21 @@ notify_proxy_uri_cb (GObject *gobject, GParamSpec *pspec, GObject *self)
  * Return value: (transfer none): the proxy URI, or %NULL
  *
  * Since: 0.2.0
+ * Deprecated: Use gdata_service_get_proxy_resolver() instead, which gives more flexibility over the proxy 
used. (Since: 0.15.0.)
  **/
 SoupURI *
 gdata_service_get_proxy_uri (GDataService *self)
 {
-       SoupURI *proxy_uri;
-
-       g_return_val_if_fail (GDATA_IS_SERVICE (self), NULL);
-
-       g_object_get (self->priv->session, SOUP_SESSION_PROXY_URI, &proxy_uri, NULL);
-       g_object_unref (proxy_uri); /* remove the ref added by g_object_get */
+       return _get_proxy_uri (self);
+}
 
-       return proxy_uri;
+/* Static function which isn't deprecated so we can continue using it internally. */
+static void
+_set_proxy_uri (GDataService *self, SoupURI *proxy_uri)
+{
+       g_return_if_fail (GDATA_IS_SERVICE (self));
+       g_object_set (self->priv->session, SOUP_SESSION_PROXY_URI, proxy_uri, NULL);
+       g_object_notify (G_OBJECT (self), "proxy-uri");
 }
 
 /**
@@ -1835,13 +1882,57 @@ gdata_service_get_proxy_uri (GDataService *self)
  * Note that if a #GDataAuthorizer is being used with this #GDataService, the authorizer might also need its 
proxy URI setting.
  *
  * Since: 0.2.0
+ * Deprecated: Use gdata_service_set_proxy_resolver() instead, which gives more flexibility over the proxy 
used. (Since: 0.15.0.)
  **/
 void
 gdata_service_set_proxy_uri (GDataService *self, SoupURI *proxy_uri)
 {
+       _set_proxy_uri (self, proxy_uri);
+}
+
+/**
+ * gdata_service_get_proxy_resolver:
+ * @self: a #GDataService
+ *
+ * Gets the #GProxyResolver on the #GDataService's #SoupSession.
+ *
+ * Return value: (transfer none) (allow-none): a #GProxyResolver, or %NULL
+ *
+ * Since: 0.15.0
+ */
+GProxyResolver *
+gdata_service_get_proxy_resolver (GDataService *self)
+{
+       g_return_val_if_fail (GDATA_IS_SERVICE (self), NULL);
+
+       return self->priv->proxy_resolver;
+}
+
+/**
+ * gdata_service_set_proxy_resolver:
+ * @self: a #GDataService
+ * @proxy_resolver: (allow-none): a #GProxyResolver, or %NULL
+ *
+ * Sets the #GProxyResolver on the #SoupSession used internally by the given #GDataService.
+ *
+ * Setting this will clear the #GDataService:proxy-uri property.
+ *
+ * Since: 0.15.0
+ */
+void
+gdata_service_set_proxy_resolver (GDataService *self, GProxyResolver *proxy_resolver)
+{
        g_return_if_fail (GDATA_IS_SERVICE (self));
-       g_object_set (self->priv->session, SOUP_SESSION_PROXY_URI, proxy_uri, NULL);
-       g_object_notify (G_OBJECT (self), "proxy-uri");
+       g_return_if_fail (proxy_resolver == NULL || G_IS_PROXY_RESOLVER (proxy_resolver));
+
+       if (proxy_resolver != NULL) {
+               g_object_ref (proxy_resolver);
+       }
+
+       g_clear_object (&self->priv->proxy_resolver);
+       self->priv->proxy_resolver = proxy_resolver;
+
+       g_object_notify (G_OBJECT (self), "proxy-resolver");
 }
 
 static void
diff --git a/gdata/gdata-service.h b/gdata/gdata-service.h
index 83c2575..987915c 100644
--- a/gdata/gdata-service.h
+++ b/gdata/gdata-service.h
@@ -200,8 +200,13 @@ void gdata_service_delete_entry_async (GDataService *self, GDataAuthorizationDom
                                        GAsyncReadyCallback callback, gpointer user_data);
 gboolean gdata_service_delete_entry_finish (GDataService *self, GAsyncResult *async_result, GError **error);
 
-SoupURI *gdata_service_get_proxy_uri (GDataService *self) G_GNUC_PURE;
-void gdata_service_set_proxy_uri (GDataService *self, SoupURI *proxy_uri);
+#ifndef LIBGDATA_DISABLE_DEPRECATED
+SoupURI *gdata_service_get_proxy_uri (GDataService *self) G_GNUC_PURE G_GNUC_DEPRECATED_FOR 
(gdata_service_get_proxy_resolver);
+void gdata_service_set_proxy_uri (GDataService *self, SoupURI *proxy_uri) G_GNUC_DEPRECATED_FOR 
(gdata_service_set_proxy_resolver);
+#endif /* !LIBGDATA_DISABLE_DEPRECATED */
+
+GProxyResolver *gdata_service_get_proxy_resolver (GDataService *self);
+void gdata_service_set_proxy_resolver (GDataService *self, GProxyResolver *proxy_resolver);
 
 guint gdata_service_get_timeout (GDataService *self) G_GNUC_PURE;
 void gdata_service_set_timeout (GDataService *self, guint timeout);
diff --git a/gdata/gdata.symbols b/gdata/gdata.symbols
index bc65405..a22723c 100644
--- a/gdata/gdata.symbols
+++ b/gdata/gdata.symbols
@@ -64,6 +64,8 @@ gdata_service_delete_entry_async
 gdata_service_delete_entry_finish
 gdata_service_get_proxy_uri
 gdata_service_set_proxy_uri
+gdata_service_get_proxy_resolver
+gdata_service_set_proxy_resolver
 gdata_query_get_type
 gdata_query_new
 gdata_query_new_with_limits


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