[rhythmbox] artsearch: try harder to find album art from musicbrainz



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]