From 67a9aa153f5e644b0f61d253d4b83ea05607bd56 Mon Sep 17 00:00:00 2001
From: ale <ale@incal.net>
Date: Sun, 24 Jul 2011 20:32:52 +0100
Subject: [PATCH] show album art

---
 server/djrandom/frontend/frontend.py      | 23 +++++++++++++++++++----
 server/djrandom/frontend/static/player.js |  8 ++++++--
 2 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/server/djrandom/frontend/frontend.py b/server/djrandom/frontend/frontend.py
index 7c69f91..ae29f18 100644
--- a/server/djrandom/frontend/frontend.py
+++ b/server/djrandom/frontend/frontend.py
@@ -8,10 +8,12 @@ import logging
 from datetime import datetime
 from flask import Flask, request, Response, abort, jsonify, \
     render_template, session
+from flask.helpers import send_file
 from djrandom import daemonize
 from djrandom import utils
 from djrandom.model.mp3 import MP3, PlayLog
 from djrandom.model.playlist import Playlist
+from djrandom.model.external import AlbumImageRetriever
 from djrandom.database import Session, init_db
 from djrandom.frontend import search
 from sqlalchemy import distinct
@@ -22,6 +24,7 @@ app = Flask(__name__)
 app.secret_key = 'J@9als[13- "!>0@!!zWz}='
 storage_root = None
 searcher = None
+album_images = None
 
 USERID_COOKIE = 'USERID'
 
@@ -100,6 +103,16 @@ def play_callback(sha1):
     return jsonify(status=True)
 
 
+@app.route('/album_image/<artist>/<album>')
+def get_album_image(artist, album):
+    img_file = album_images.get_album_image(
+        urllib.urlunquote_plus(artist),
+        urllib.urlunquote_plus(album))
+    if not img_file:
+        abort(404)
+    return send_file(img_file, mimetype='image/jpeg', conditional=True)
+
+
 @app.route('/json/playlist/save', methods=['POST'])
 def save_playlist():
     hashes = request.form.get('h', '')
@@ -210,10 +223,11 @@ def download_song(sha1):
     return response
 
 
-def run_frontend(port, storage_dir, solr_url, db_url):
-    global storage_root, searcher
+def run_frontend(port, storage_dir, solr_url, db_url, lastfm_api_key):
+    global storage_root, searcher, album_images
     storage_root = storage_dir
     searcher = search.Searcher(solr_url)
+    album_images = AlbumImageRetriever(lastfm_api_key)
     init_db(db_url)
 
     from gevent.wsgi import WSGIServer
@@ -227,6 +241,7 @@ def main():
     parser.add_option('--port', type='int', default=3003)
     parser.add_option('--storage_dir')
     parser.add_option('--db_url')
+    parser.add_option('--lastfm_api_key')
     daemonize.add_standard_options(parser)
     utils.read_config_defaults(
         parser, os.getenv('DJRANDOM_CONF', '/etc/djrandom.conf'))
@@ -239,8 +254,8 @@ def main():
         parser.error('Too many arguments')
 
     daemonize.daemonize(opts, run_frontend,
-                        (opts.port, opts.storage_dir,
-                         opts.solr_url, opts.db_url),
+                        (opts.port, opts.storage_dir, opts.solr_url,
+                         opts.db_url, opts.lastfm_api_key),
                         support_gevent=True)
 
 
diff --git a/server/djrandom/frontend/static/player.js b/server/djrandom/frontend/static/player.js
index a5a5bf5..dc173c7 100644
--- a/server/djrandom/frontend/static/player.js
+++ b/server/djrandom/frontend/static/player.js
@@ -329,10 +329,14 @@ djr.Player.prototype.play = function(song) {
 
   // Load song info in the player UI. We cheat by stealing the data
   // from the existing <div> instead than from the server.
+  var artist = $('#song_' + song + ' .artist').text();
+  var album = $('#song_' + song + ' .album').text();
+  var album_art_url = '/album_image/' + escape(artist) + '/' + escape(album);
   $('#jp_playlist_1').html(
     $('#song_' + song + ' .title').text() + '<br>'
-      + $('#song_' + song + ' .artist').text() + '<br>'
-      + '<small>' + $('#song_' + song + ' .album').text() + '</small>'
+      + artist + '<br>'
+      + '<small>' + album + '</small><br>'
+      + '<img src=\"' + album_art_url + '\" border=\"0\">'
   );
 
   // Report the new song being played.
-- 
GitLab