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