From 29239d66383ec0544cefca2e1c6de95d81b48376 Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind1991@gmail.com>
Date: Mon, 1 Aug 2011 16:43:02 +0200
Subject: [PATCH] remember volume and playback time in the media player

---
 apps/media/ajax/api.php |  1 +
 apps/media/js/player.js | 31 +++++++++++++++++++++++++------
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/apps/media/ajax/api.php b/apps/media/ajax/api.php
index e0183ff05d..bf1ebd8e4d 100644
--- a/apps/media/ajax/api.php
+++ b/apps/media/ajax/api.php
@@ -132,6 +132,7 @@ if($arguments['action']){
 			header('Expires: 0');
 			header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
 			header('Pragma: public');
+			header('Accept-Ranges: bytes');
 			header('Content-Length: '.OC_Filesystem::filesize($arguments['path']));
 			
 			OC_Filesystem::readfile($arguments['path']);
diff --git a/apps/media/js/player.js b/apps/media/js/player.js
index 369d3e389c..b6d3bc01dd 100644
--- a/apps/media/js/player.js
+++ b/apps/media/js/player.js
@@ -3,6 +3,7 @@ var PlayList={
 	current:-1,
 	items:[],
 	player:null,
+	volume:0.8,
 	next:function(){
 		var next=PlayList.current+1;
 		if(next>=PlayList.items.length){
@@ -19,7 +20,7 @@ var PlayList={
 		PlayList.play(next);
 		PlayList.render();
 	},
-	play:function(index,ready){
+	play:function(index,time,ready){
 		if(index==null){
 			index=PlayList.current;
 		}
@@ -28,11 +29,11 @@ var PlayList={
 			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,function(){PlayList.play(null,ready)});
+					PlayList.init(PlayList.items[index].type,function(){PlayList.play(null,time,eady)});
 				}else{
 					PlayList.player.jPlayer("setMedia", PlayList.items[PlayList.current]);
 					PlayList.items[index].playcount++;
-					PlayList.player.jPlayer("play");
+					PlayList.player.jPlayer("play",time);
 					localStorage.setItem(oc_current_user+'oc_playlist_current',index);
 					if(index>0){
 						var previous=index-1;
@@ -82,6 +83,14 @@ var PlayList={
 			play:function(){
 				localStorage.setItem(oc_current_user+'oc_playlist_playing','true');
 			},
+			timeupdate:function(){
+				var time=Math.round(PlayList.player.data('jPlayer').status.currentTime);
+				localStorage.setItem(oc_current_user+'oc_playlist_time',time);
+			},
+			volumechange:function(){
+				var volume=PlayList.player.data('jPlayer').options.volume*100;
+				localStorage.setItem(oc_current_user+'oc_playlist_volume',volume);
+			},
 			supplied:type,
 			ready:function(){
 				PlayList.load();
@@ -89,6 +98,7 @@ var PlayList={
 					ready();
 				}
 			},
+			volume:PlayList.volume,
 			cssSelectorAncestor:'#jp-interface',
 			swfPath:OC.linkTo('media','js'),
 		});
@@ -150,11 +160,20 @@ var PlayList={
 		if(typeof localStorage !== 'undefined'){
 			if(localStorage.hasOwnProperty(oc_current_user+'oc_playlist_items')){
 				PlayList.items=JSON.parse(localStorage.getItem(oc_current_user+'oc_playlist_items'));
-				PlayList.current=parseInt((localStorage.getItem(oc_current_user+'oc_playlist_current')));
+				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);
+					}
+				}
 				if(JSON.parse(localStorage.getItem(oc_current_user+'oc_playlist_playing'))){
-					PlayList.play();
+					PlayList.play(null,time);
 				}else{
-					PlayList.play(null,function(){
+					PlayList.play(null,time,function(){
 						PlayList.player.jPlayer("pause");
 					});
 				}
-- 
GitLab