diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2013-10-09 12:54:11 -0400 |
---|---|---|
committer | Philip Withnall <philip@tecnocode.co.uk> | 2013-10-09 20:56:28 +0100 |
commit | 8f1923fcd9c4203f68ce6a0405526500a77783e5 (patch) | |
tree | 20f3e7b610d286097093dc5b8e762f093e0bb7f3 | |
parent | da3aa429b5fba38b57aec40ecb37ab340cce90a5 (diff) | |
download | libgdata-8f1923fcd9c4203f68ce6a0405526500a77783e5.tar.gz |
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
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | docs/reference/gdata-sections.txt | 2 | ||||
-rw-r--r-- | gdata/gdata-service.c | 113 | ||||
-rw-r--r-- | gdata/gdata-service.h | 9 | ||||
-rw-r--r-- | gdata/gdata.symbols | 2 |
5 files changed, 114 insertions, 14 deletions
diff --git a/configure.ac b/configure.ac index 252d6e03..b56123d0 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 63991ac9..773600a4 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 28a5460a..ee6f5dec 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 83c2575c..987915c0 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 bc654056..a22723c8 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 |