# Bryan Schumaker (10/24/2010) import libsaria from libsaria import sources from libsaria import web from libsaria import xm from libsaria import callbacks from libsaria import threads from libsaria import storage file_id = libsaria.path.file_id cache = libsaria.cache pref_attr = xm.find_preferred_attribute pref_sizes = ["extralarge", "large", "medium", "small"] APIROOT = "http://ws.audioscrobbler.com/2.0/" APIKEY = "2c76f85a6704efd74b5a358821284ef9" SECRET = "3a6012bfb627b60a884cf33fc044885c" class LastFmRequest(dict): def __init__(self, method): self.method = method def print_file(self, file): for line in file: print line.strip() file.seek(0) def place(self, printfile=False): url = web.Url(APIROOT + "?method=" + self.method) url["api_key"] = APIKEY for param in self: url[param] = self[param] try: file = url.open() except: return None if file == None: return None if printfile==True: self.print_file(file) doc = xm.parse( file ) lfm = xm.child(doc) if xm.attributes(lfm)["status"] == "ok": return xm.child(lfm) else: return None def lfm_cache_album(file, artist, album, title): req = LastFmRequest("album.getInfo") req["album"] = album req["artist"] = artist doc = req.place() if doc == None: return False node = pref_attr(doc, "image", "size", pref_sizes) node = xm.child(node) if node == None: return try: url = web.Url(node.data) for line in url.open(): file.write(line) return True except: pass return False def set_art_from_file(file, path): try: fin = open(path) file.write(fin.read()) fin.close() except: return False return True def get_artwork_tags(artist, album, title): storage.cache.get_item(artist, album, title, "Folder.jpg", lfm_cache_album) cached = cache[artist] file = cached.get("%s.jpg" % album, lfm_cache_album, artist, album, title) return file def set_artwork_tags(artist, album, path): cached = cache[artist] cached.delete("%s.jpg" % album) file = cached.get("%s.jpg" % album, set_art_from_file, path) def get_artwork_id(id): artist, album, title = sources.get_attrs("artist", "album", "title") return get_artwork_tags(artist, album, title) def get_artwork_bg(file): id = sources.get_attrs("id") file = get_artwork_id(id) callbacks.get_art(file, id) def get_artwork(file): threads.background(get_artwork_bg, file)