summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan A. Suarez Romero <jasuarez@igalia.com>2013-05-13 11:30:49 +0000
committerJuan A. Suarez Romero <jasuarez@igalia.com>2013-05-13 11:30:49 +0000
commit5cec516920a1d6e3a99045745584b63e65d5aaaa (patch)
tree08a233f9223d3682cfcddda9d6abbc3286c0ad3f
parent5973947051d6ca789965c92c5c33cf66cadd3f25 (diff)
lastfm-albumart: Hardcode MEGA and EXTRA thumbnails
Sometimes Lastfm doesn't return thumbnails for MEGA and EXTRA sizes, even when they are available. So hardcode them in the results.
-rw-r--r--src/lastfm-albumart/grl-lastfm-albumart.c79
1 files changed, 44 insertions, 35 deletions
diff --git a/src/lastfm-albumart/grl-lastfm-albumart.c b/src/lastfm-albumart/grl-lastfm-albumart.c
index dcd3670..34dd239 100644
--- a/src/lastfm-albumart/grl-lastfm-albumart.c
+++ b/src/lastfm-albumart/grl-lastfm-albumart.c
@@ -44,6 +44,7 @@ GRL_LOG_DOMAIN_STATIC(lastfm_albumart_log_domain);
#define LASTFM_GET_ALBUM "http://ws.audioscrobbler.com/1.0/album/%s/%s/info.xml"
#define LASTFM_DEFAULT_IMAGE "http://cdn.last.fm/flatness/catalogue/noimage/2/default_album_medium.png"
+#define LASTFM_BASE_IMAGE "http://userserve-ak.last.fm/serve/%s/%s"
#define LASTFM_XML_COVER_MEDIUM "/album/coverart/medium"
#define LASTFM_XML_COVER_LARGE "/album/coverart/large"
@@ -194,9 +195,28 @@ xml_get_image (const gchar *xmldata, const gchar *image_node)
xmlXPathFreeContext (xpath_ctx);
xmlFreeDoc (doc);
+ if (g_strcmp0 (image, LASTFM_DEFAULT_IMAGE) == 0) {
+ g_free (image);
+ image = NULL;
+ }
+
return image;
}
+static gchar *
+get_image_id (gchar **image, gint size)
+{
+ gint i;
+
+ for (i = 0; i < size; i++) {
+ if (image[i]) {
+ return g_path_get_basename(image[i]);
+ }
+ }
+
+ return NULL;
+}
+
static void
read_done_cb (GObject *source_object,
GAsyncResult *res,
@@ -208,7 +228,9 @@ read_done_cb (GObject *source_object,
GError *wc_error = NULL;
GrlRelatedKeys *relkeys;
gchar *content = NULL;
- gchar *image = NULL;
+ gchar *image[5] = { NULL };
+ gchar *image_id;
+ gint i;
/* Get rid of stored operation data */
cancellable = grl_operation_get_data (rs->operation_id);
@@ -236,45 +258,32 @@ read_done_cb (GObject *source_object,
return;
}
- image = xml_get_image (content, LASTFM_XML_COVER_MEGA);
- if (image && g_strcmp0 (image, LASTFM_DEFAULT_IMAGE) != 0) {
- relkeys = grl_related_keys_new_with_keys (GRL_METADATA_KEY_THUMBNAIL, image,
- NULL);
- grl_data_add_related_keys (GRL_DATA (rs->media), relkeys);
- }
- g_free (image);
+ image[0] = xml_get_image (content, LASTFM_XML_COVER_MEGA);
+ image[1] = xml_get_image (content, LASTFM_XML_COVER_EXTRA);
+ image[2] = xml_get_image (content, LASTFM_XML_COVER_LARGE);
+ image[3] = xml_get_image (content, LASTFM_XML_COVER_MEDIUM);
+ image[4] = xml_get_image (content, LASTFM_XML_COVER_SMALL);
- image = xml_get_image (content, LASTFM_XML_COVER_EXTRA);
- if (image && g_strcmp0 (image, LASTFM_DEFAULT_IMAGE) != 0) {
- relkeys = grl_related_keys_new_with_keys (GRL_METADATA_KEY_THUMBNAIL, image,
- NULL);
- grl_data_add_related_keys (GRL_DATA (rs->media), relkeys);
- }
- g_free (image);
+ image_id = get_image_id (image, G_N_ELEMENTS (image));
- image = xml_get_image (content, LASTFM_XML_COVER_LARGE);
- if (image && g_strcmp0 (image, LASTFM_DEFAULT_IMAGE) != 0) {
- relkeys = grl_related_keys_new_with_keys (GRL_METADATA_KEY_THUMBNAIL, image,
- NULL);
- grl_data_add_related_keys (GRL_DATA (rs->media), relkeys);
+ /* Sometimes "mega" and "extra" values are not returned; let's hardcode them */
+ if (!image[0] && image_id) {
+ image[0] = g_strdup_printf (LASTFM_BASE_IMAGE, "500", image_id);
}
- g_free (image);
-
- image = xml_get_image (content, LASTFM_XML_COVER_MEDIUM);
- if (image && g_strcmp0 (image, LASTFM_DEFAULT_IMAGE) != 0) {
- relkeys = grl_related_keys_new_with_keys (GRL_METADATA_KEY_THUMBNAIL, image,
- NULL);
- grl_data_add_related_keys (GRL_DATA (rs->media), relkeys);
+ if (!image[1] && image_id) {
+ image[1] = g_strdup_printf (LASTFM_BASE_IMAGE, "252", image_id);
}
- g_free (image);
-
- image = xml_get_image (content, LASTFM_XML_COVER_SMALL);
- if (image && g_strcmp0 (image, LASTFM_DEFAULT_IMAGE) != 0) {
- relkeys = grl_related_keys_new_with_keys (GRL_METADATA_KEY_THUMBNAIL, image,
- NULL);
- grl_data_add_related_keys (GRL_DATA (rs->media), relkeys);
+ g_free (image_id);
+
+ for (i = 0; i < G_N_ELEMENTS (image); i++) {
+ if (image[i]) {
+ relkeys = grl_related_keys_new_with_keys (GRL_METADATA_KEY_THUMBNAIL,
+ image[i],
+ NULL);
+ grl_data_add_related_keys (GRL_DATA (rs->media), relkeys);
+ g_free (image[i]);
+ }
}
- g_free (image);
rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL);
}