From 4c96121b10cdd593ce38dc5e25272eb778cf8b49 Mon Sep 17 00:00:00 2001 From: scottdowne Date: Mon, 20 Jan 2014 13:51:43 -0500 Subject: [PATCH 1/3] [#961778] Get YouTube passing all tests again. --- .../popcorn.HTMLYouTubeVideoElement.js | 64 +++++++++---------- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js b/wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js index c6dc5282d..9e2c959d7 100644 --- a/wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js +++ b/wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js @@ -173,11 +173,17 @@ } function onReady() { + + addYouTubeEvent( "play", onPlay ); + addYouTubeEvent( "pause", onPause ); // Set initial paused state if( impl.autoplay || !impl.paused ) { + removeYouTubeEvent( "play", onReady ); impl.paused = false; addMediaReadyCallback(function() { - onPlay(); + if ( !impl.paused ) { + onPlay(); + } }); } @@ -197,12 +203,12 @@ self.dispatchEvent( "canplay" ); mediaReady = true; + bufferedInterval = setInterval( monitorBuffered, 50 ); while( mediaReadyCallbacks.length ) { mediaReadyCallbacks[ 0 ](); mediaReadyCallbacks.shift(); } - bufferedInterval = setInterval( monitorBuffered, 50 ); // We can't easily determine canplaythrough, but will send anyway. impl.readyState = self.HAVE_ENOUGH_DATA; @@ -214,11 +220,14 @@ setTimeout( onFirstPause, 0 ); return; } - addYouTubeEvent( "play", onPlay ); - addYouTubeEvent( "pause", onPause ); removeYouTubeEvent( "pause", onFirstPause ); - onReady(); + if( impl.autoplay || !impl.paused ) { + addYouTubeEvent( "play", onReady ); + player.playVideo(); + } else { + onReady(); + } } // This function needs duration and first play to be ready. @@ -268,7 +277,11 @@ // paused case YT.PlayerState.PAUSED: - dispatchYouTubeEvent( "pause" ); + // Youtube fires a paused event before an ended event. + // We have no need for this. + if ( player.getDuration() !== player.getCurrentTime() ) { + dispatchYouTubeEvent( "pause" ); + } break; // buffering @@ -477,7 +490,6 @@ } function onPlay() { - if( impl.ended ) { changeCurrentTime( 0 ); impl.ended = false; @@ -485,7 +497,6 @@ timeUpdateInterval = setInterval( onTimeUpdate, self._util.TIMEUPDATE_MS ); impl.paused = false; - if( playerPaused ) { playerPaused = false; @@ -514,11 +525,6 @@ }; function onPause() { - // Youtube fires a paused event before an ended event. - // We have no need for this. - if ( player.getDuration() === player.getCurrentTime() ) { - return; - } impl.paused = true; if ( !playerPaused ) { playerPaused = true; @@ -557,23 +563,6 @@ } } - function setVolume( aValue ) { - impl.volume = aValue; - if( !mediaReady ) { - addMediaReadyCallback( function() { - setVolume( impl.volume ); - }); - return; - } - player.setVolume( impl.volume * 100 ); - self.dispatchEvent( "volumechange" ); - } - - function getVolume() { - // YouTube has getVolume(), but for sync access we use impl.volume - return impl.volume; - } - function setMuted( aValue ) { impl.muted = aValue; if( !mediaReady ) { @@ -681,16 +670,21 @@ volume: { get: function() { - // Remap from HTML5's 0-1 to YouTube's 0-100 range - var volume = getVolume(); - return volume / 100; + return impl.volume }, set: function( aValue ) { if( aValue < 0 || aValue > 1 ) { throw "Volume value must be between 0.0 and 1.0"; } - - setVolume( aValue ); + impl.volume = aValue; + if( !mediaReady ) { + addMediaReadyCallback( function() { + self.volume = aValue; + }); + return; + } + player.setVolume( impl.volume * 100 ); + self.dispatchEvent( "volumechange" ); } }, From 9ae955ba05a55cca9f2d4a3b67fb8c206efea4d6 Mon Sep 17 00:00:00 2001 From: scottdowne Date: Tue, 21 Jan 2014 17:07:07 -0500 Subject: [PATCH 2/3] fixed last test --- wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js b/wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js index 9e2c959d7..9c54f5ca9 100644 --- a/wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js +++ b/wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js @@ -216,11 +216,11 @@ } function onFirstPause() { + removeYouTubeEvent( "pause", onFirstPause ); if ( player.getCurrentTime() > 0 ) { setTimeout( onFirstPause, 0 ); return; } - removeYouTubeEvent( "pause", onFirstPause ); if( impl.autoplay || !impl.paused ) { addYouTubeEvent( "play", onReady ); @@ -232,13 +232,12 @@ // This function needs duration and first play to be ready. function onFirstPlay() { + removeYouTubeEvent( "play", onFirstPlay ); if ( player.getCurrentTime() === 0 ) { setTimeout( onFirstPlay, 0 ); return; } - removeYouTubeEvent( "play", onFirstPlay ); addYouTubeEvent( "pause", onFirstPause ); - player.seekTo( 0 ); player.pauseVideo(); } @@ -307,6 +306,11 @@ if( !( playerReady && player ) ) { return; } + + removeYouTubeEvent( "buffering", onBuffering ); + removeYouTubeEvent( "ended", onEnded ); + removeYouTubeEvent( "play", onPlay ); + removeYouTubeEvent( "pause", onPause ); onPause(); mediaReady = false; loopedPlay = false; From 6dfe7182c3a249c393c2dcf4e81c3912846a6319 Mon Sep 17 00:00:00 2001 From: scottdowne Date: Tue, 21 Jan 2014 17:09:15 -0500 Subject: [PATCH 3/3] lint --- wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js b/wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js index 9c54f5ca9..5e3fc8133 100644 --- a/wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js +++ b/wrappers/youtube/popcorn.HTMLYouTubeVideoElement.js @@ -674,7 +674,7 @@ volume: { get: function() { - return impl.volume + return impl.volume; }, set: function( aValue ) { if( aValue < 0 || aValue > 1 ) {