From df3436f68a2695905abd5bee7dedcd3a121e5e98 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Mon, 11 Jul 2016 08:05:33 -0400 Subject: [PATCH] core/tags/album: Search with quotes around artist instead of album name I think this results in a slightly better search, although there are still a few wrong images fetched. Signed-off-by: Anna Schumaker --- core/tags/album.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/core/tags/album.c b/core/tags/album.c index 673fe4cd..2759d547 100644 --- a/core/tags/album.c +++ b/core/tags/album.c @@ -77,16 +77,14 @@ static bool __album_foreach_fetch(struct album *album, Mb5Metadata metadata) } static bool __album_query_releaseid(struct album *album, Mb5Query *mb5, - gchar *extra) + gchar *param) { - gchar *param, *query = "query"; Mb5Metadata metadata = NULL; + gchar *query = "query"; tQueryResult result; gchar error[256]; bool ret = false; - param = g_strdup_printf("release:\"%s\" %s", album->al_name, extra); - do { metadata = mb5_query_query(mb5, "release", "", "", 1, &query, ¶m); @@ -102,22 +100,37 @@ static bool __album_query_releaseid(struct album *album, Mb5Query *mb5, mb5_metadata_delete(metadata); } + return ret; +} + +static bool __album_query_name(struct album *album, Mb5Query *mb5, + gchar *extra, bool quotes) +{ + gchar *fmt = "release:%s%s%s%s"; + gchar *param = g_strdup_printf(fmt, quotes ? "\"" : "", + quotes ? album->al_name : album->al_lower, + quotes ? "\"" : "", + extra ? extra : ""); + bool ret = __album_query_releaseid(album, mb5, param); g_free(param); - g_free(extra); return ret; } static bool __album_query_artist(struct album *album, Mb5Query *mb5) { - gchar *fmt = "AND artist:%s"; + gchar *fmt = " AND artist:\"%s\""; gchar *param = g_strdup_printf(fmt, album->al_artist->ar_lower); - return __album_query_releaseid(album, mb5, param); + bool ret = __album_query_name(album, mb5, param, false); + g_free(param); + return ret; } static bool __album_query_year(struct album *album, Mb5Query *mb5) { - gchar *param = g_strdup_printf("AND date:%d", album->al_year); - return __album_query_releaseid(album, mb5, param); + gchar *param = g_strdup_printf(" AND date:%d", album->al_year); + bool ret = __album_query_name(album, mb5, param, true); + g_free(param); + return ret; } static bool __album_fetch_artwork(struct album *album) @@ -135,7 +148,7 @@ static bool __album_fetch_artwork(struct album *album) goto out; if (album->al_year && __album_query_year(album, mb5)) goto out; - __album_query_releaseid(album, mb5, g_strdup("")); + __album_query_name(album, mb5, NULL, true); out: mb5_query_delete(mb5);