From cbc6358b49229db1e4481add82068f5511c97aaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Wagner?= Date: Wed, 22 Dec 2021 23:16:17 +0100 Subject: lastfm: modernized --- rest-extras/lastfm-proxy-call.c | 16 ++--- rest-extras/lastfm-proxy-call.h | 6 +- rest-extras/lastfm-proxy-private.h | 33 ---------- rest-extras/lastfm-proxy.c | 132 +++++++++++++++++++++++-------------- rest-extras/lastfm-proxy.h | 75 ++++++--------------- 5 files changed, 109 insertions(+), 153 deletions(-) delete mode 100644 rest-extras/lastfm-proxy-private.h diff --git a/rest-extras/lastfm-proxy-call.c b/rest-extras/lastfm-proxy-call.c index 417fa18..dd56715 100644 --- a/rest-extras/lastfm-proxy-call.c +++ b/rest-extras/lastfm-proxy-call.c @@ -25,7 +25,7 @@ #include #include #include "lastfm-proxy-call.h" -#include "lastfm-proxy-private.h" +#include "lastfm-proxy.h" #include "rest/sha1.h" G_DEFINE_TYPE (LastfmProxyCall, lastfm_proxy_call, REST_TYPE_PROXY_CALL) @@ -34,23 +34,23 @@ static gboolean _prepare (RestProxyCall *call, GError **error) { LastfmProxy *proxy = NULL; - LastfmProxyPrivate *priv; GHashTable *params; + const gchar *session_key; char *s; g_object_get (call, "proxy", &proxy, NULL); - priv = LASTFM_PROXY_GET_PRIVATE (proxy); rest_proxy_call_add_params (call, "method", rest_proxy_call_get_function (call), - "api_key", priv->api_key, + "api_key", lastfm_proxy_get_api_key (proxy), NULL); /* Reset function because Lastfm puts the function in the parameters */ rest_proxy_call_set_function (call, NULL); - if (priv->session_key) - rest_proxy_call_add_param (call, "sk", priv->session_key); + session_key = lastfm_proxy_get_session_key (proxy); + if (session_key) + rest_proxy_call_add_param (call, "sk", session_key); params = rest_params_as_string_hash_table (rest_proxy_call_get_params (call)); s = lastfm_proxy_sign (proxy, params); @@ -75,7 +75,3 @@ static void lastfm_proxy_call_init (LastfmProxyCall *self) { } - -#if BUILD_TESTS -#warning TODO lastfm signature test cases -#endif diff --git a/rest-extras/lastfm-proxy-call.h b/rest-extras/lastfm-proxy-call.h index da4c7ad..20e9b8e 100644 --- a/rest-extras/lastfm-proxy-call.h +++ b/rest-extras/lastfm-proxy-call.h @@ -20,8 +20,7 @@ * */ -#ifndef _LASTFM_PROXY_CALL -#define _LASTFM_PROXY_CALL +#pragma once #include @@ -44,6 +43,3 @@ struct _LastfmProxyCallClass { }; G_END_DECLS - -#endif /* _LASTFM_PROXY_CALL */ - diff --git a/rest-extras/lastfm-proxy-private.h b/rest-extras/lastfm-proxy-private.h deleted file mode 100644 index 128f7a9..0000000 --- a/rest-extras/lastfm-proxy-private.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * librest - RESTful web services access - * Copyright (c) 2010 Intel Corporation. - * - * Authors: Rob Bradford - * Ross Burton - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU Lesser General Public License, - * version 2.1, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for - * more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - */ - -#include "lastfm-proxy.h" - -#define LASTFM_PROXY_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASTFM_TYPE_PROXY, LastfmProxyPrivate)) - -struct _LastfmProxyPrivate { - char *api_key; - char *secret; - char *session_key; -}; - diff --git a/rest-extras/lastfm-proxy.c b/rest-extras/lastfm-proxy.c index b9fc713..7b0dd28 100644 --- a/rest-extras/lastfm-proxy.c +++ b/rest-extras/lastfm-proxy.c @@ -26,18 +26,26 @@ #include #include #include "lastfm-proxy.h" -#include "lastfm-proxy-private.h" #include "lastfm-proxy-call.h" -G_DEFINE_TYPE (LastfmProxy, lastfm_proxy, REST_TYPE_PROXY) +typedef struct { + char *api_key; + char *secret; + char *session_key; +} LastfmProxyPrivate; + +G_DEFINE_TYPE_WITH_PRIVATE (LastfmProxy, lastfm_proxy, REST_TYPE_PROXY) enum { PROP_0, PROP_API_KEY, PROP_SECRET, PROP_SESSION_KEY, + N_PROPS, }; +static GParamSpec *properties [N_PROPS]; + GQuark lastfm_proxy_error_quark (void) { @@ -57,10 +65,13 @@ _new_call (RestProxy *proxy) } static void -lastfm_proxy_get_property (GObject *object, guint property_id, - GValue *value, GParamSpec *pspec) +lastfm_proxy_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) { - LastfmProxyPrivate *priv = LASTFM_PROXY_GET_PRIVATE (object); + LastfmProxy *self = LASTFM_PROXY (object); + LastfmProxyPrivate *priv = lastfm_proxy_get_instance_private (self); switch (property_id) { case PROP_API_KEY: @@ -81,7 +92,8 @@ static void lastfm_proxy_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { - LastfmProxyPrivate *priv = LASTFM_PROXY_GET_PRIVATE (object); + LastfmProxy *self = LASTFM_PROXY (object); + LastfmProxyPrivate *priv = lastfm_proxy_get_instance_private (self); switch (property_id) { case PROP_API_KEY: @@ -107,7 +119,8 @@ lastfm_proxy_set_property (GObject *object, guint property_id, static void lastfm_proxy_finalize (GObject *object) { - LastfmProxyPrivate *priv = LASTFM_PROXY_GET_PRIVATE (object); + LastfmProxy *self = LASTFM_PROXY (object); + LastfmProxyPrivate *priv = lastfm_proxy_get_instance_private (self); g_free (priv->api_key); g_free (priv->secret); @@ -116,18 +129,11 @@ lastfm_proxy_finalize (GObject *object) G_OBJECT_CLASS (lastfm_proxy_parent_class)->finalize (object); } -#ifndef G_PARAM_STATIC_STRINGS -#define G_PARAM_STATIC_STRINGS (G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB) -#endif - static void lastfm_proxy_class_init (LastfmProxyClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); RestProxyClass *proxy_class = REST_PROXY_CLASS (klass); - GParamSpec *pspec; - - g_type_class_add_private (klass, sizeof (LastfmProxyPrivate)); object_class->get_property = lastfm_proxy_get_property; object_class->set_property = lastfm_proxy_set_property; @@ -135,32 +141,38 @@ lastfm_proxy_class_init (LastfmProxyClass *klass) proxy_class->new_call = _new_call; - pspec = g_param_spec_string ("api-key", "api-key", - "The API key", NULL, - G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, - PROP_API_KEY, - pspec); - - pspec = g_param_spec_string ("secret", "secret", - "The API key secret", NULL, - G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, - PROP_SECRET, - pspec); - - pspec = g_param_spec_string ("session-key", "session-key", - "The session key", NULL, - G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, - PROP_SESSION_KEY, - pspec); + properties [PROP_API_KEY] = + g_param_spec_string ("api-key", + "api-key", + "The API key", + NULL, + (G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + properties [PROP_SECRET] = + g_param_spec_string ("secret", + "secret", + "The API key secret", + NULL, + (G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + properties [PROP_SESSION_KEY] = + g_param_spec_string ("session-key", + "session-key", + "The session key", + NULL, + (G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + + g_object_class_install_properties (object_class, N_PROPS, properties); } static void lastfm_proxy_init (LastfmProxy *self) { - self->priv = LASTFM_PROXY_GET_PRIVATE (self); } RestProxy * @@ -196,9 +208,12 @@ lastfm_proxy_new_with_session (const char *api_key, * freed. */ const char * -lastfm_proxy_get_api_key (LastfmProxy *proxy) +lastfm_proxy_get_api_key (LastfmProxy *self) { - LastfmProxyPrivate *priv = LASTFM_PROXY_GET_PRIVATE (proxy); + LastfmProxyPrivate *priv = lastfm_proxy_get_instance_private (self); + + g_return_val_if_fail (LASTFM_IS_PROXY (self), NULL); + return priv->api_key; } @@ -212,9 +227,12 @@ lastfm_proxy_get_api_key (LastfmProxy *proxy) * freed. */ const char * -lastfm_proxy_get_secret (LastfmProxy *proxy) +lastfm_proxy_get_secret (LastfmProxy *self) { - LastfmProxyPrivate *priv = LASTFM_PROXY_GET_PRIVATE (proxy); + LastfmProxyPrivate *priv = lastfm_proxy_get_instance_private (self); + + g_return_val_if_fail (LASTFM_IS_PROXY (self), NULL); + return priv->secret; } @@ -228,9 +246,12 @@ lastfm_proxy_get_secret (LastfmProxy *proxy) * by #LastfmProxy and should not be freed. */ const char * -lastfm_proxy_get_session_key (LastfmProxy *proxy) +lastfm_proxy_get_session_key (LastfmProxy *self) { - LastfmProxyPrivate *priv = LASTFM_PROXY_GET_PRIVATE (proxy); + LastfmProxyPrivate *priv = lastfm_proxy_get_instance_private (self); + + g_return_val_if_fail (LASTFM_IS_PROXY (self), NULL); + return priv->session_key; } @@ -242,12 +263,14 @@ lastfm_proxy_get_session_key (LastfmProxy *proxy) * Set the session key. */ void -lastfm_proxy_set_session_key (LastfmProxy *proxy, const char *session_key) +lastfm_proxy_set_session_key (LastfmProxy *self, + const char *session_key) { LastfmProxyPrivate *priv; - g_return_if_fail (LASTFM_IS_PROXY (proxy)); - priv = LASTFM_PROXY_GET_PRIVATE (proxy); + g_return_if_fail (LASTFM_IS_PROXY (self)); + + priv = lastfm_proxy_get_instance_private (self); if (priv->session_key) g_free (priv->session_key); @@ -256,17 +279,18 @@ lastfm_proxy_set_session_key (LastfmProxy *proxy, const char *session_key) } char * -lastfm_proxy_sign (LastfmProxy *proxy, GHashTable *params) +lastfm_proxy_sign (LastfmProxy *self, + GHashTable *params) { LastfmProxyPrivate *priv; GString *s; GList *keys; char *md5; - g_return_val_if_fail (LASTFM_IS_PROXY (proxy), NULL); + g_return_val_if_fail (LASTFM_IS_PROXY (self), NULL); g_return_val_if_fail (params, NULL); - priv = LASTFM_PROXY_GET_PRIVATE (proxy); + priv = lastfm_proxy_get_instance_private (self); s = g_string_new (NULL); @@ -295,13 +319,18 @@ lastfm_proxy_sign (LastfmProxy *proxy, GHashTable *params) } char * -lastfm_proxy_build_login_url (LastfmProxy *proxy, const char *token) +lastfm_proxy_build_login_url (LastfmProxy *self, + const char *token) { - g_return_val_if_fail (LASTFM_IS_PROXY (proxy), NULL); + LastfmProxyPrivate *priv; + + g_return_val_if_fail (LASTFM_IS_PROXY (self), NULL); g_return_val_if_fail (token, NULL); + priv = lastfm_proxy_get_instance_private (self); + return g_strdup_printf ("http://www.last.fm/api/auth/?api_key=%s&token=%s", - proxy->priv->api_key, + priv->api_key, token); } @@ -316,7 +345,8 @@ lastfm_proxy_build_login_url (LastfmProxy *proxy, const char *token) * Returns: %TRUE if this response is successful, %FALSE otherwise. */ gboolean -lastfm_proxy_is_successful (RestXmlNode *root, GError **error) +lastfm_proxy_is_successful (RestXmlNode *root, + GError **error) { RestXmlNode *node; diff --git a/rest-extras/lastfm-proxy.h b/rest-extras/lastfm-proxy.h index 85e612a..b378882 100644 --- a/rest-extras/lastfm-proxy.h +++ b/rest-extras/lastfm-proxy.h @@ -20,8 +20,7 @@ * */ -#ifndef _LASTFM_PROXY -#define _LASTFM_PROXY +#pragma once #include #include @@ -30,65 +29,33 @@ G_BEGIN_DECLS #define LASTFM_TYPE_PROXY lastfm_proxy_get_type() -#define LASTFM_PROXY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), LASTFM_TYPE_PROXY, LastfmProxy)) +G_DECLARE_DERIVABLE_TYPE (LastfmProxy, lastfm_proxy, LASTFM, PROXY, RestProxy) -#define LASTFM_PROXY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), LASTFM_TYPE_PROXY, LastfmProxyClass)) - -#define LASTFM_IS_PROXY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LASTFM_TYPE_PROXY)) - -#define LASTFM_IS_PROXY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), LASTFM_TYPE_PROXY)) - -#define LASTFM_PROXY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), LASTFM_TYPE_PROXY, LastfmProxyClass)) - -typedef struct _LastfmProxyPrivate LastfmProxyPrivate; - -/** - * LastfmProxy: - * - * #LastfmProxy has no publicly available members. - */ -typedef struct { - RestProxy parent; - LastfmProxyPrivate *priv; -} LastfmProxy; - -typedef struct { +struct _LastfmProxyClass { RestProxyClass parent_class; + /*< private >*/ /* padding for future expansion */ gpointer _padding_dummy[8]; -} LastfmProxyClass; +}; #define LASTFM_PROXY_ERROR lastfm_proxy_error_quark() -GType lastfm_proxy_get_type (void); - -RestProxy* lastfm_proxy_new (const char *api_key, - const char *secret); - -RestProxy* lastfm_proxy_new_with_session (const char *api_key, - const char *secret, - const char *session_key); - -const char * lastfm_proxy_get_api_key (LastfmProxy *proxy); - -const char * lastfm_proxy_get_secret (LastfmProxy *proxy); - -const char * lastfm_proxy_get_session_key (LastfmProxy *proxy); - -void lastfm_proxy_set_session_key (LastfmProxy *proxy, const char *session_key); - -char * lastfm_proxy_sign (LastfmProxy *proxy, GHashTable *params); - -char * lastfm_proxy_build_login_url (LastfmProxy *proxy, const char *token); - -gboolean lastfm_proxy_is_successful (RestXmlNode *root, GError **error); +RestProxy *lastfm_proxy_new (const char *api_key, + const char *secret); +RestProxy *lastfm_proxy_new_with_session (const char *api_key, + const char *secret, + const char *session_key); +const char *lastfm_proxy_get_api_key (LastfmProxy *proxy); +const char *lastfm_proxy_get_secret (LastfmProxy *proxy); +const char *lastfm_proxy_get_session_key (LastfmProxy *proxy); +void lastfm_proxy_set_session_key (LastfmProxy *proxy, + const char *session_key); +char *lastfm_proxy_sign (LastfmProxy *proxy, + GHashTable *params); +char *lastfm_proxy_build_login_url (LastfmProxy *proxy, + const char *token); +gboolean lastfm_proxy_is_successful (RestXmlNode *root, + GError **error); G_END_DECLS - -#endif /* _LASTFM_PROXY */ -- cgit v1.2.1