aboutsummaryrefslogtreecommitdiffstats
path: root/apps/media/js/player.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/media/js/player.js')
-rw-r--r--apps/media/js/player.js120
1 files changed, 120 insertions, 0 deletions
diff --git a/apps/media/js/player.js b/apps/media/js/player.js
new file mode 100644
index 00000000000..f638b86e192
--- /dev/null
+++ b/apps/media/js/player.js
@@ -0,0 +1,120 @@
+var PlayList={
+ urlBase:OC.linkTo('media','ajax/api.php')+'?action=play&path=',
+ current:-1,
+ items:[],
+ player:null,
+ parent:null,
+ next:function(){
+ var next=PlayList.current+1;
+ if(next>=PlayList.items.length){
+ next=0;
+ }
+ PlayList.play(next);
+ },
+ previous:function(){
+ var next=PlayList.current-1;
+ if(next<0){
+ next=PlayList.items.length-1;
+ }
+ PlayList.play(next);
+ },
+ play:function(index){
+ if(index==null){
+ index=PlayList.current;
+ }
+ if(index>-1 && index<PlayList.items.length){
+ PlayList.current=index;
+ if(PlayList.player){
+ if(PlayList.player.data('jPlayer').options.supplied!=PlayList.items[index].type){//the the audio type changes we need to reinitialize jplayer
+ PlayList.player.jPlayer("destroy");
+ PlayList.init(PlayList.items[index].type,PlayList.play);
+ }else{
+ PlayList.player.jPlayer("setMedia", PlayList.items[PlayList.current]);
+ PlayList.player.jPlayer("play");
+ }
+ }else{
+ PlayList.init(PlayList.items[index].type,PlayList.play);
+ }
+ }
+ },
+ 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;
+ });
+ PlayList.player=$('#jp-interface div.player');
+ }
+ $(PlayList.player).jPlayer({
+ ended:PlayList.next,
+ supplied:type,
+ ready:function(){
+ if(ready){
+ ready();
+ }
+ },
+ cssSelectorAncestor:'#jp-interface',
+ });
+ },
+ add:function(song){
+ if(song.substr){//we are passed a string, asume it's a url to a song
+ PlayList.addFile(song);
+ }
+ if(song.albums){//a artist object was passed, add all albums inside it
+ $.each(song.albums,function(index,album){
+ PlayList.add(album);
+ });
+ }
+ if(song.songs){//a album object was passed, add all songs inside it
+ $.each(song.songs,function(index,song){
+ PlayList.add(song);
+ });
+ }
+ if(song.song_name){
+ var type=musicTypeFromFile(song.song_path);
+ var item={name:song.song_name,type:type,artist:song.artist_name,album:song.album_name};
+ item[type]=PlayList.urlBase+encodeURIComponent(song.song_path);
+ PlayList.items.push(item);
+ }
+ },
+ addFile:function(path){
+ var type=musicTypeFromFile(path);
+ var item={name:'unknown',artist:'unknown',album:'unknwon',type:type};//todo get song data
+ item[type]=PlayList.urlBase+encodeURIComponent(path);
+ PlayList.items.push(item);
+ },
+ render:function(parent){//parent should be an ul element
+ if(parent){
+ PlayList.parent=parent;
+ }else{
+ parent=PlayList.parent;
+ }
+ if(parent){
+ parent.empty();
+ for(var i=0;i<PlayList.items.length;i++){
+ var song=PlayList.items[i];
+ var item=$('<li>'+song.artist+' - '+song.album+' - '+song.name+'</li>');
+ item.data('artist',song.artist);
+ item.data('album',song.album);
+ item.data('name',song.name);
+ item.data('index',i);
+ item.click(function(){
+ PlayList.play($(this).data('index'));
+ PlayList.render();
+ });
+ if(i==PlayList.current){
+ item.addClass('current');
+ }
+ parent.append(item);
+ }
+ }
+ }
+}