summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xapp.py17
-rw-r--r--static/playlist.js8
-rw-r--r--static/sound.js8
3 files changed, 33 insertions, 0 deletions
diff --git a/app.py b/app.py
index 7d88ebe..6ea7082 100755
--- a/app.py
+++ b/app.py
@@ -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');
+ });
+}