@@ -53,7 +54,7 @@
diff --git a/public/javascripts/audio.js b/public/javascripts/audio.js
index e836704..876bc5b 100644
--- a/public/javascripts/audio.js
+++ b/public/javascripts/audio.js
@@ -3,20 +3,39 @@ var Audio = {
audio: null,
tid: null,
- init: function() {
- this.audio = document.getElementById('a');
- },
-
play: function() {
- this.audio.play();
+ try {
+ this.audio.play();
+ } catch(e) {}
},
pause: function() {
- this.audio.pause();
+ try {
+ this.audio.pause();
+ } catch(e) {}
},
- setTrack: function(url) {
- this.audio.setAttribute('src', url);
+ rewind: function() {
+ try {
+ this.audio.currentTime = 0;
+ } catch(e) {}
+ },
+
+ addTrack: function(id, url) {
+ if ($('#a'+ id).length == 0) {
+ $('#audiobox').append('
')
+ }
+ },
+
+ setTrack: function(id) {
+ this.audio = document.getElementById('a'+ id);
+ $(this.audio).bind('play',function() {
+ $('#player .controls .play').hide();
+ $('#player .controls .pause').show();
+ }).bind('pause ended', function() {
+ $('#player .controls .pause').hide();
+ $('#player .controls .play').show();
+ });
},
getLoadedPercent: function() {
@@ -47,5 +66,17 @@ var Audio = {
Audio.getLoadedPercent(),
Audio.getPlayedPercent()
);
+ },
+
+ killListener: function() {
+ window.clearTimeout(this.tid);
}
-}
\ No newline at end of file
+}
+
+$('#player .controls .play').live('click', function(){
+ Audio.play();
+});
+
+$('#player .controls .pause').live('click', function(){
+ Audio.pause();
+});
\ No newline at end of file
diff --git a/public/javascripts/player.js b/public/javascripts/player.js
index e181d1d..9438275 100644
--- a/public/javascripts/player.js
+++ b/public/javascripts/player.js
@@ -18,29 +18,70 @@ var Player = {
},
setTrack: function(obj) {
- var id = $(obj).attr('id');
+ if (typeof obj == 'string') {
+ var id = obj;
+ obj = $('#i'+ obj);
+ } else {
+ var id = $(obj).attr('id').split('i')[1];
+ }
var query = $(obj).find('.title').html();
var length = $(obj).find('.duration').html();
$('#player .now-playing').html(query);
$('.playlist-tracks li').removeClass('now');
- $('#'+ id).addClass('now');
+ $('#i'+ id).addClass('now');
loadTracksData(query, this.playSource);
},
playSource: function(url) {
- Audio.setTrack(url);
+ var id = $('.playlist-tracks .now').attr('id').split('i')[1];
+ Audio.pause();
+ Audio.rewind();
+ Audio.addTrack(id, url);
+ Audio.setTrack(id);
Audio.play();
Audio.startListener();
},
+ nextTrack: function() {
+ if (true) { // Shuffle off
+ if ($('.playlist-tracks .now').next().length == 0 && true) { // Last track in the playlist and repeat is on
+ return $('.playlist-tracks li').first().attr('id').split('i')[1];
+ } else {
+ return $('.playlist-tracks .now').next().attr('id').split('i')[1];
+ }
+ }
+ },
+
+ prevTrack: function() {
+ if (true) { // Shuffle off
+ if ($('.playlist-tracks .now').prev().length == 0 && true) { // First track in the playlist
+ return $('.playlist-tracks li').last().attr('id').split('i')[1];
+ } else {
+ return $('.playlist-tracks .now').prev().attr('id').split('i')[1];
+ }
+ }
+ },
+
updateUI: function(buffered, played) {
$('#player .loaded').width(Math.round(buffered * this.bar_width));
$('#player .played').width(Math.round(played * this.bar_width));
+ if (played == 1) {
+ Audio.killListener();
+ this.setTrack(this.nextTrack());
+ }
}
}
+$('#player .controls .prev').live('click', function(){
+ Player.setTrack(Player.prevTrack());
+});
+
+$('#player .controls .next').live('click', function(){
+ Player.setTrack(Player.nextTrack());
+});
+
$('.add-album').live('click', function() {
var artist = $('.artist-info .name').html();
$(this).parent().parent().parent().find('.tracklist li').each(function(i, item){
@@ -66,8 +107,4 @@ $('.tracklist li').live('mouseover mouseout', function(e){
$('.playlist-tracks li').live('dblclick', function(){
Player.setTrack(this);
-});
-
-$(function(){
- Audio.init();
});
\ No newline at end of file
diff --git a/public/stylesheets/player.css b/public/stylesheets/player.css
index dc3ddc3..13afd8a 100644
--- a/public/stylesheets/player.css
+++ b/public/stylesheets/player.css
@@ -41,6 +41,10 @@
#player .controls .play {
background-image: url('/images/icns/play.png');
}
+ #player .controls .pause {
+ background-image: url('/images/icns/pause.png');
+ display: none;
+ }
#player .controls .next {
background-image: url('/images/icns/next.png');
}