diff --git a/core/tags/album.c b/core/tags/album.c index 53db4b89..386c15c5 100644 --- a/core/tags/album.c +++ b/core/tags/album.c @@ -112,40 +112,42 @@ static bool __album_run_query(struct album *album, gchar *term1, return ret; } +static bool __album_query_artist(struct album *album, struct artist *al_artist) +{ + gchar *release, *artist, *year; + bool found; + + if (!al_artist || strncmp(al_artist->ar_lower, "various", 7) == 0) + return false; + + release = g_strdup_printf("release:\"%s\"~", album->al_lower); + artist = g_strdup_printf("artist:\"%s\"~", al_artist->ar_name); + year = g_strdup_printf("date:%d*", album->al_year); + + if (album->al_year > 0) + found = __album_run_query(album, release, artist, year); + if (!found) + found = __album_run_query(album, release, artist, NULL); + if (!found && album->al_year > 0) + found = __album_run_query(album, album->al_lower, artist, year); + if (!found) + found = __album_run_query(album, album->al_lower, artist, NULL); + + g_free(release); + g_free(artist); + g_free(year); + return found; +} + static bool __album_fetch_artwork(struct album *album) { - struct artist *artist = album->al_artist; - gchar *terms[4] = {NULL, NULL, NULL, NULL}; - unsigned int i = 0; - if (album_artwork_exists(album)) return true; if (string_length(album->al_name) == 0) return true; - terms[i++] = g_strdup_printf("release:\"%s\"~", album->al_lower); - if (artist && strncmp(artist->ar_lower, "various", 7) != 0) - terms[i++] = g_strdup_printf("artist:\"%s\"~", artist->ar_name); - if (album->al_year > 0) - terms[i++] = g_strdup_printf("date:%d*", album->al_year); - - if (terms[2]) { - if (__album_run_query(album, terms[0], terms[1], terms[2])) - goto out; - if (__album_run_query(album, terms[0], terms[2], NULL)) - goto out; - if (__album_run_query(album, terms[1], terms[2], NULL)) - goto out; - } - - if (terms[1] && __album_run_query(album, terms[0], terms[1], NULL)) - goto out; - - __album_run_query(album, terms[0], NULL, NULL); - -out: - for (i = 0; terms[i]; i++) - g_free(terms[i]); + if (!__album_query_artist(album, album->al_artist)) + __album_run_query(album, album->al_lower, NULL, NULL); return true; }