2011-07-26 14:04:57 +00:00
|
|
|
var PlayList={
|
|
|
|
urlBase:OC.linkTo('media','ajax/api.php')+'?action=play&path=',
|
|
|
|
current:-1,
|
|
|
|
items:[],
|
|
|
|
player:null,
|
2011-08-01 14:43:02 +00:00
|
|
|
volume:0.8,
|
2011-08-03 23:19:21 +00:00
|
|
|
active:false,
|
2011-07-26 14:04:57 +00:00
|
|
|
next:function(){
|
2011-08-25 18:37:51 +00:00
|
|
|
var items=PlayList.items;
|
2011-07-26 14:04:57 +00:00
|
|
|
var next=PlayList.current+1;
|
2011-08-12 10:34:02 +00:00
|
|
|
if(next>=items.length){
|
2011-07-26 14:04:57 +00:00
|
|
|
next=0;
|
|
|
|
}
|
|
|
|
PlayList.play(next);
|
2011-07-29 21:53:22 +00:00
|
|
|
PlayList.render();
|
2011-07-26 14:04:57 +00:00
|
|
|
},
|
|
|
|
previous:function(){
|
2011-08-25 18:37:51 +00:00
|
|
|
var items=PlayList.items;
|
2011-07-26 14:04:57 +00:00
|
|
|
var next=PlayList.current-1;
|
|
|
|
if(next<0){
|
2011-08-12 10:34:02 +00:00
|
|
|
next=items.length-1;
|
2011-07-26 14:04:57 +00:00
|
|
|
}
|
|
|
|
PlayList.play(next);
|
2011-07-29 21:53:22 +00:00
|
|
|
PlayList.render();
|
2011-07-26 14:04:57 +00:00
|
|
|
},
|
2011-08-01 14:43:02 +00:00
|
|
|
play:function(index,time,ready){
|
2011-08-25 18:37:51 +00:00
|
|
|
var items=PlayList.items;
|
2011-07-26 14:04:57 +00:00
|
|
|
if(index==null){
|
|
|
|
index=PlayList.current;
|
|
|
|
}
|
2011-08-12 10:34:02 +00:00
|
|
|
if(index>-1 && index<items.length){
|
2011-07-26 14:04:57 +00:00
|
|
|
PlayList.current=index;
|
|
|
|
if(PlayList.player){
|
2011-08-12 10:34:02 +00:00
|
|
|
if(PlayList.player.data('jPlayer').options.supplied!=items[index].type){//the the audio type changes we need to reinitialize jplayer
|
2011-08-25 18:37:51 +00:00
|
|
|
PlayList.player.jPlayer("play",time);
|
|
|
|
localStorage.setItem(oc_current_user+'oc_playlist_time',time);
|
2011-07-26 14:04:57 +00:00
|
|
|
PlayList.player.jPlayer("destroy");
|
2011-08-25 18:37:51 +00:00
|
|
|
PlayList.save(); // so that the init don't lose the playlist
|
|
|
|
PlayList.init(items[index].type,null); // init calls load that calls play
|
2011-07-26 14:04:57 +00:00
|
|
|
}else{
|
2011-08-12 10:34:02 +00:00
|
|
|
PlayList.player.jPlayer("setMedia", items[PlayList.current]);
|
2011-09-28 09:45:22 +00:00
|
|
|
$(".jp-current-song").text(items[PlayList.current].name);
|
2011-08-12 10:34:02 +00:00
|
|
|
items[index].playcount++;
|
2011-08-01 14:43:02 +00:00
|
|
|
PlayList.player.jPlayer("play",time);
|
2011-07-31 23:56:45 +00:00
|
|
|
if(index>0){
|
2011-07-31 23:25:34 +00:00
|
|
|
var previous=index-1;
|
|
|
|
}else{
|
2011-08-12 10:34:02 +00:00
|
|
|
var previous=items.length-1;
|
2011-07-31 23:25:34 +00:00
|
|
|
}
|
2011-08-12 10:34:02 +00:00
|
|
|
if(index+1<items.length){
|
2011-07-31 23:25:34 +00:00
|
|
|
var next=index+1;
|
|
|
|
}else{
|
|
|
|
var next=0;
|
|
|
|
}
|
2011-08-12 10:34:02 +00:00
|
|
|
$('.jp-next').attr('title',items[next].name);
|
|
|
|
$('.jp-previous').attr('title',items[previous].name);
|
2011-07-31 23:12:28 +00:00
|
|
|
if (typeof Collection !== 'undefined') {
|
2011-07-29 22:21:24 +00:00
|
|
|
Collection.registerPlay();
|
|
|
|
}
|
2011-08-01 14:19:51 +00:00
|
|
|
if(ready){
|
|
|
|
ready();
|
|
|
|
}
|
2011-07-26 14:04:57 +00:00
|
|
|
}
|
|
|
|
}else{
|
2011-08-25 18:37:51 +00:00
|
|
|
localStorage.setItem(oc_current_user+'oc_playlist_time',time);
|
|
|
|
localStorage.setItem(oc_current_user+'oc_playlist_playing','true');
|
|
|
|
PlayList.save(); // so that the init don't lose the playlist
|
|
|
|
PlayList.init(items[index].type,null); // init calls load that calls play
|
2011-07-26 14:04:57 +00:00
|
|
|
}
|
|
|
|
}
|
2011-09-28 09:45:22 +00:00
|
|
|
$(".song").removeClass("collection_playing");
|
|
|
|
$(".jp-playlist-" + index).addClass("collection_playing");
|
2011-07-26 14:04:57 +00:00
|
|
|
},
|
|
|
|
init:function(type,ready){
|
|
|
|
if(!PlayList.player){
|
|
|
|
$(".jp-previous").click(function() {
|
|
|
|
PlayList.previous();
|
|
|
|
$(this).blur();
|
|
|
|
PlayList.render();
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
$(".jp-next").click(function() {
|
|
|
|
PlayList.next();
|
|
|
|
$(this).blur();
|
|
|
|
PlayList.render();
|
|
|
|
return false;
|
|
|
|
});
|
2011-08-11 09:27:14 +00:00
|
|
|
PlayList.player=$('#controls div.player');
|
2011-07-26 14:04:57 +00:00
|
|
|
}
|
|
|
|
$(PlayList.player).jPlayer({
|
|
|
|
ended:PlayList.next,
|
2011-08-01 14:19:51 +00:00
|
|
|
pause:function(){
|
|
|
|
localStorage.setItem(oc_current_user+'oc_playlist_playing','false');
|
|
|
|
},
|
|
|
|
play:function(){
|
|
|
|
localStorage.setItem(oc_current_user+'oc_playlist_playing','true');
|
|
|
|
},
|
2011-07-26 14:04:57 +00:00
|
|
|
supplied:type,
|
|
|
|
ready:function(){
|
2011-07-31 23:12:28 +00:00
|
|
|
PlayList.load();
|
2011-07-26 14:04:57 +00:00
|
|
|
if(ready){
|
|
|
|
ready();
|
|
|
|
}
|
|
|
|
},
|
2011-08-01 14:43:02 +00:00
|
|
|
volume:PlayList.volume,
|
2011-08-11 09:27:14 +00:00
|
|
|
cssSelectorAncestor:'#controls',
|
2011-07-27 14:38:23 +00:00
|
|
|
swfPath:OC.linkTo('media','js'),
|
2011-07-26 14:04:57 +00:00
|
|
|
});
|
|
|
|
},
|
2011-08-25 18:37:51 +00:00
|
|
|
add:function(song,dontReset){
|
2011-08-12 10:34:02 +00:00
|
|
|
if(!dontReset){
|
2011-08-25 18:37:51 +00:00
|
|
|
PlayList.items=[];//clear the playlist
|
2011-08-12 10:34:02 +00:00
|
|
|
}
|
2011-07-29 21:53:22 +00:00
|
|
|
if(!song){
|
|
|
|
return;
|
|
|
|
}
|
2011-07-26 14:04:57 +00:00
|
|
|
if(song.substr){//we are passed a string, asume it's a url to a song
|
2011-08-25 18:37:51 +00:00
|
|
|
PlayList.addFile(song,true);
|
2011-07-26 14:04:57 +00:00
|
|
|
}
|
|
|
|
if(song.albums){//a artist object was passed, add all albums inside it
|
|
|
|
$.each(song.albums,function(index,album){
|
2011-08-25 18:37:51 +00:00
|
|
|
PlayList.add(album,true);
|
2011-07-26 14:04:57 +00:00
|
|
|
});
|
2011-08-25 18:37:51 +00:00
|
|
|
} else if(song.songs){//a album object was passed, add all songs inside it
|
2011-07-26 14:04:57 +00:00
|
|
|
$.each(song.songs,function(index,song){
|
2011-08-25 18:37:51 +00:00
|
|
|
PlayList.add(song,true);
|
2011-07-26 14:04:57 +00:00
|
|
|
});
|
|
|
|
}
|
2011-08-21 13:28:20 +00:00
|
|
|
if(song.path){
|
|
|
|
var type=musicTypeFromFile(song.path);
|
|
|
|
var item={name:song.name,type:type,artist:song.artist,album:song.album,length:song.length,playcount:song.playCount};
|
|
|
|
item[type]=PlayList.urlBase+encodeURIComponent(song.path);
|
2011-08-25 18:37:51 +00:00
|
|
|
PlayList.items.push(item);
|
2011-07-26 14:04:57 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
addFile:function(path){
|
|
|
|
var type=musicTypeFromFile(path);
|
2011-07-31 22:32:44 +00:00
|
|
|
var item={name:'unknown',artist:'unknown',album:'unknwon',type:type};
|
|
|
|
$.getJSON(OC.filePath('media','ajax','api.php')+'?action=get_path_info&path='+encodeURIComponent(path),function(song){
|
|
|
|
item.name=song.song_name;
|
|
|
|
item.artist=song.artist;
|
|
|
|
item.album=song.album;
|
|
|
|
});
|
2011-07-26 14:04:57 +00:00
|
|
|
item[type]=PlayList.urlBase+encodeURIComponent(path);
|
|
|
|
PlayList.items.push(item);
|
|
|
|
},
|
2011-07-29 21:53:22 +00:00
|
|
|
remove:function(index){
|
|
|
|
PlayList.items.splice(index,1);
|
|
|
|
PlayList.render();
|
|
|
|
},
|
2011-07-30 23:25:33 +00:00
|
|
|
render:function(){},
|
|
|
|
playing:function(){
|
|
|
|
if(!PlayList.player){
|
|
|
|
return false;
|
|
|
|
}else{
|
|
|
|
return !PlayList.player.data("jPlayer").status.paused;
|
|
|
|
}
|
2011-07-31 23:12:28 +00:00
|
|
|
},
|
|
|
|
save:function(){
|
2011-08-05 14:05:10 +00:00
|
|
|
if(typeof localStorage !== 'undefined' && localStorage){
|
2011-07-31 23:56:45 +00:00
|
|
|
localStorage.setItem(oc_current_user+'oc_playlist_items',JSON.stringify(PlayList.items));
|
2011-08-03 23:19:21 +00:00
|
|
|
localStorage.setItem(oc_current_user+'oc_playlist_current',PlayList.current);
|
2011-08-25 18:37:51 +00:00
|
|
|
if(PlayList.player) {
|
|
|
|
if(PlayList.player.data('jPlayer')) {
|
|
|
|
var time=Math.round(PlayList.player.data('jPlayer').status.currentTime);
|
|
|
|
localStorage.setItem(oc_current_user+'oc_playlist_time',time);
|
|
|
|
var volume=PlayList.player.data('jPlayer').options.volume*100;
|
|
|
|
localStorage.setItem(oc_current_user+'oc_playlist_volume',volume);
|
|
|
|
}
|
|
|
|
}
|
2011-08-03 23:19:21 +00:00
|
|
|
if(PlayList.active){
|
|
|
|
localStorage.setItem(oc_current_user+'oc_playlist_active','false');
|
|
|
|
}
|
2011-07-31 23:12:28 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
load:function(){
|
2011-08-05 14:05:10 +00:00
|
|
|
if(typeof localStorage !== 'undefined' && localStorage){
|
2011-08-03 23:19:21 +00:00
|
|
|
PlayList.active=true;
|
|
|
|
localStorage.setItem(oc_current_user+'oc_playlist_active','true');
|
2011-07-31 23:56:45 +00:00
|
|
|
if(localStorage.hasOwnProperty(oc_current_user+'oc_playlist_items')){
|
|
|
|
PlayList.items=JSON.parse(localStorage.getItem(oc_current_user+'oc_playlist_items'));
|
2011-08-03 12:23:35 +00:00
|
|
|
if(PlayList.items.length>0){
|
|
|
|
PlayList.current=parseInt(localStorage.getItem(oc_current_user+'oc_playlist_current'));
|
|
|
|
var time=parseInt(localStorage.getItem(oc_current_user+'oc_playlist_time'));
|
|
|
|
if(localStorage.hasOwnProperty(oc_current_user+'oc_playlist_volume')){
|
|
|
|
var volume=localStorage.getItem(oc_current_user+'oc_playlist_volume');
|
|
|
|
PlayList.volume=volume/100;
|
|
|
|
$('.jp-volume-bar-value').css('width',volume+'%');
|
|
|
|
if(PlayList.player.data('jPlayer')){
|
|
|
|
PlayList.player.jPlayer("option",'volume',volume/100);
|
|
|
|
}
|
2011-08-01 14:43:02 +00:00
|
|
|
}
|
2011-08-03 12:23:35 +00:00
|
|
|
if(JSON.parse(localStorage.getItem(oc_current_user+'oc_playlist_playing'))){
|
|
|
|
PlayList.play(null,time);
|
|
|
|
}else{
|
|
|
|
PlayList.play(null,time,function(){
|
|
|
|
PlayList.player.jPlayer("pause");
|
|
|
|
});
|
|
|
|
}
|
|
|
|
PlayList.render();
|
2011-08-01 14:43:02 +00:00
|
|
|
}
|
2011-07-31 23:12:28 +00:00
|
|
|
}
|
|
|
|
}
|
2011-07-30 23:25:33 +00:00
|
|
|
}
|
2011-07-26 14:04:57 +00:00
|
|
|
}
|
2011-08-03 23:19:21 +00:00
|
|
|
|
|
|
|
$(document).ready(function(){
|
|
|
|
$(window).bind('beforeunload', function (){
|
|
|
|
PlayList.save();
|
|
|
|
});
|
2011-08-13 14:34:40 +00:00
|
|
|
|
|
|
|
$('jp-previous').tipsy({gravity:'n', fade:true, live:true});
|
|
|
|
$('jp-next').tipsy({gravity:'n', fade:true, live:true});
|
2011-08-03 23:19:21 +00:00
|
|
|
})
|