diff options
-rwxr-xr-x | app.py | 17 | ||||
-rw-r--r-- | static/playlist.js | 8 | ||||
-rw-r--r-- | static/sound.js | 8 |
3 files changed, 33 insertions, 0 deletions
@@ -38,8 +38,25 @@ class JSONApplication(object): start_response('200 OK', [('Content-Type', 'application/json'), ('Content-Length', str(len(contents)))]) return [contents] + def hint(self, environ, start_response, path): + track_id = int(path[1]) + session = db.Session() + try: + track = db.Track.get_by_id(session, track_id) + cached = self.cache_check(track) + finally: + session.close() + + if not cached: + r = codec.Recoder(track.get_path(), config.get('encoder'), track.file_index, os.path.join(config.get('cache_dir'), str(track.id))) + r.recode() + + start_response('200 OK', [('Content-Type', 'application/json')]) + return [json.dumps({'recoded': not cached})] + handlers = { 'list': list, + 'hint': hint, } def __call__(self, environ, start_response, path): diff --git a/static/playlist.js b/static/playlist.js index 6f57075..b94de61 100644 --- a/static/playlist.js +++ b/static/playlist.js @@ -39,6 +39,9 @@ $(function(){ item.id = this.current_id; this.current_id++; var model = items.create(item); + if(items.indexOf(model) < 2) { + sound_hint(model); + } }, addOne: function(item) { var view = new PlaylistItemView({model: item}); @@ -60,6 +63,11 @@ $(function(){ items.remove(item); this.render(); return next; + }, + hintnext: function() { + var next = items.at(1); + if(next) + sound_hint(next); } }); diff --git a/static/sound.js b/static/sound.js index 874c213..c4f2dbf 100644 --- a/static/sound.js +++ b/static/sound.js @@ -1,4 +1,5 @@ function playsound(model) { + playlist.hintnext(); var item = model.toJSON(); var id = item.track_id; var cid = model.cid; @@ -51,3 +52,10 @@ function playsound(model) { sound.play(); $('#cid-' + cid).addClass('playing'); } + +function sound_hint(model) { + $('#cid-' + model.cid).addClass('loading'); + $.get('/json/hint/' + model.attributes.track_id, function(data) { + $('#cid-' + model.cid).removeClass('nocache').removeClass('loading'); + }); +} |