[rhythmbox] artsearch: try harder to find album art from musicbrainz
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rhythmbox] artsearch: try harder to find album art from musicbrainz
- Date: Fri, 3 Aug 2012 14:45:52 +0000 (UTC)
commit 6839a04ecfc29030df7e40182da73f04056093a8
Author: Giovanni Campagna <gcampagna src gnome org>
Date: Wed Aug 1 22:45:14 2012 +0200
artsearch: try harder to find album art from musicbrainz
If the song is lacking musicbrainz specific metadata, try a search
for artist and album name instead.
https://bugzilla.gnome.org/show_bug.cgi?id=681018
plugins/artsearch/musicbrainz.py | 22 ++++++++++++++++++++--
1 files changed, 20 insertions(+), 2 deletions(-)
---
diff --git a/plugins/artsearch/musicbrainz.py b/plugins/artsearch/musicbrainz.py
index 6b38d2d..8b271d6 100644
--- a/plugins/artsearch/musicbrainz.py
+++ b/plugins/artsearch/musicbrainz.py
@@ -26,7 +26,7 @@
import xml.dom.minidom as dom
-import rb
+import rb, urllib
from gi.repository import RB
# musicbrainz URLs
@@ -34,6 +34,9 @@ MUSICBRAINZ_RELEASE_URL = "http://musicbrainz.org/ws/2/release/%s?inc=artists"
MUSICBRAINZ_RELEASE_PREFIX = "http://musicbrainz.org/release/"
MUSICBRAINZ_RELEASE_SUFFIX = ".html"
+MUSICBRAINZ_SEARCH_QUERY = "artist:\"%s\" AND release:\"%s\""
+MUSICBRAINZ_SEARCH_URL = "http://musicbrainz.org/ws/2/release/?query=%s&limit=1"
+
# musicbrainz IDs
MUSICBRAINZ_VARIOUS_ARTISTS = "89ad4ac3-39f7-470e-963a-56509c546377"
@@ -84,12 +87,27 @@ class MusicBrainzSearch(object):
print "exception parsing musicbrainz response: %s" % e
callback(*cbargs)
+ def try_search_artist_album (self, key, store, callback, *args):
+ album = key.get_field("album")
+ artist = key.get_field("artist")
+
+ if not album or not artist:
+ print "artist or album information missing"
+ callback(*args)
+ return
+
+ query = MUSICBRAINZ_SEARCH_QUERY % (artist.lower(), album.lower())
+ url = MUSICBRAINZ_SEARCH_URL % (urllib.quote(query, safe=':'),)
+
+ loader = rb.Loader()
+ loader.get_url(url, self.get_release_cb, (key, store, callback, args))
+
def search(self, key, last_time, store, callback, *args):
key = key.copy() # ugh
album_id = key.get_info("musicbrainz-albumid")
if album_id is None:
print "no musicbrainz release ID for this track"
- callback(*args)
+ self.try_search_artist_album(key, store, callback, args)
return
if album_id.startswith(MUSICBRAINZ_RELEASE_PREFIX):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]