From a224abfb61096a259c507f186a6569aeedf92d4a Mon Sep 17 00:00:00 2001 From: Andrew Pazniak Date: Wed, 3 Apr 2019 14:03:41 +0300 Subject: [PATCH 1/9] FilePlayer calls onBuffer when "waiting" is fired --- src/players/FilePlayer.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/players/FilePlayer.js b/src/players/FilePlayer.js index eb47a4c2..31797112 100644 --- a/src/players/FilePlayer.js +++ b/src/players/FilePlayer.js @@ -66,9 +66,10 @@ export class FilePlayer extends Component { this.removeListeners() } addListeners () { - const { onReady, onPlay, onPause, onEnded, onError, playsinline, onEnablePIP } = this.props + const { onReady, onPlay, onBuffer, onPause, onEnded, onError, playsinline, onEnablePIP } = this.props this.player.addEventListener('canplay', onReady) this.player.addEventListener('play', onPlay) + this.player.addEventListener('waiting', onBuffer) this.player.addEventListener('pause', onPause) this.player.addEventListener('seeked', this.onSeek) this.player.addEventListener('ended', onEnded) @@ -82,9 +83,10 @@ export class FilePlayer extends Component { } } removeListeners () { - const { onReady, onPlay, onPause, onEnded, onError, onEnablePIP } = this.props + const { onReady, onPlay, onBuffer, onPause, onEnded, onError, onEnablePIP } = this.props this.player.removeEventListener('canplay', onReady) this.player.removeEventListener('play', onPlay) + this.player.removeEventListener('waiting', onBuffer) this.player.removeEventListener('pause', onPause) this.player.removeEventListener('seeked', this.onSeek) this.player.removeEventListener('ended', onEnded) From 4204c6969108a5e6ab590e4bdc073ab09a731b62 Mon Sep 17 00:00:00 2001 From: Andrew Pazniak Date: Thu, 4 Apr 2019 12:29:56 +0300 Subject: [PATCH 2/9] FilePlayer onBufferEnd --- src/players/FilePlayer.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/players/FilePlayer.js b/src/players/FilePlayer.js index 31797112..1ae1df97 100644 --- a/src/players/FilePlayer.js +++ b/src/players/FilePlayer.js @@ -66,10 +66,11 @@ export class FilePlayer extends Component { this.removeListeners() } addListeners () { - const { onReady, onPlay, onBuffer, onPause, onEnded, onError, playsinline, onEnablePIP } = this.props + const { onReady, onPlay, onBuffer, onBufferEnd, onPause, onEnded, onError, playsinline, onEnablePIP } = this.props this.player.addEventListener('canplay', onReady) this.player.addEventListener('play', onPlay) this.player.addEventListener('waiting', onBuffer) + this.player.addEventListener('playing', onBufferEnd) this.player.addEventListener('pause', onPause) this.player.addEventListener('seeked', this.onSeek) this.player.addEventListener('ended', onEnded) @@ -83,10 +84,11 @@ export class FilePlayer extends Component { } } removeListeners () { - const { onReady, onPlay, onBuffer, onPause, onEnded, onError, onEnablePIP } = this.props + const { onReady, onPlay, onBuffer, onBufferEnd, onPause, onEnded, onError, onEnablePIP } = this.props this.player.removeEventListener('canplay', onReady) this.player.removeEventListener('play', onPlay) this.player.removeEventListener('waiting', onBuffer) + this.player.removeEventListener('playing', onBufferEnd) this.player.removeEventListener('pause', onPause) this.player.removeEventListener('seeked', this.onSeek) this.player.removeEventListener('ended', onEnded) From ad3911acd84b838fc2dfe619c8bba6c9215d78eb Mon Sep 17 00:00:00 2001 From: Andrew Pazniak Date: Thu, 4 Apr 2019 12:31:01 +0300 Subject: [PATCH 3/9] Facebook player onBufferEnd --- src/players/Facebook.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/players/Facebook.js b/src/players/Facebook.js index c4c18521..ffeecc23 100644 --- a/src/players/Facebook.js +++ b/src/players/Facebook.js @@ -39,6 +39,7 @@ export class Facebook extends Component { this.player.subscribe('paused', this.props.onPause) this.player.subscribe('finishedPlaying', this.props.onEnded) this.player.subscribe('startedBuffering', this.props.onBuffer) + this.player.subscribe('finishedBuffering', this.props.onBufferEnd) this.player.subscribe('error', this.props.onError) if (!this.props.muted) { // Player is muted by default From 2a439d90d4f9430816a45bce6fe9a921c7dfe980 Mon Sep 17 00:00:00 2001 From: Andrew Pazniak Date: Thu, 4 Apr 2019 12:32:10 +0300 Subject: [PATCH 4/9] YouTube player onBufferEnd --- src/players/YouTube.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/players/YouTube.js b/src/players/YouTube.js index 8545a02e..fa03dd96 100644 --- a/src/players/YouTube.js +++ b/src/players/YouTube.js @@ -71,9 +71,12 @@ export class YouTube extends Component { }, onError) } onStateChange = ({ data }) => { - const { onPlay, onPause, onBuffer, onEnded, onReady, loop } = this.props + const { onPlay, onPause, onBuffer, onBufferEnd, onEnded, onReady, loop } = this.props const { PLAYING, PAUSED, BUFFERING, ENDED, CUED } = window[SDK_GLOBAL].PlayerState - if (data === PLAYING) onPlay() + if (data === PLAYING) { + onPlay() + onBufferEnd() + } if (data === PAUSED) onPause() if (data === BUFFERING) onBuffer() if (data === ENDED) { From 9a9fe5155a6e47552adeee9da074ded1ceac86c3 Mon Sep 17 00:00:00 2001 From: Andrew Pazniak Date: Thu, 4 Apr 2019 12:34:57 +0300 Subject: [PATCH 5/9] README: onBufferEnd callback documented --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index aca3c66d..1c745fe7 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,7 @@ Prop | Description `onDuration` | Callback containing duration of the media, in seconds `onPause` | Called when media is paused `onBuffer` | Called when media starts buffering +`onBufferEnd` | Called when media has finished buffering (works for file paths, YouTube and Facebook players) `onSeek` | Called when media seeks with `seconds` parameter `onEnded` | Called when media finishes playing
  ◦  Does not fire when `loop` is set to `true` `onError` | Called when an error occurs whilst attempting to play media From 31462e5d4fa960989aff44e21aa4fd9fb14b6edb Mon Sep 17 00:00:00 2001 From: Andrew Pazniak Date: Thu, 4 Apr 2019 12:35:25 +0300 Subject: [PATCH 6/9] proptypes: added onBufferEnd --- src/props.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/props.js b/src/props.js index 3ac95c63..9b47b6eb 100644 --- a/src/props.js +++ b/src/props.js @@ -69,6 +69,7 @@ export const propTypes = { onPlay: func, onPause: func, onBuffer: func, + onBufferEnd: func, onEnded: func, onError: func, onDuration: func, @@ -163,6 +164,7 @@ export const defaultProps = { onPlay: function () {}, onPause: function () {}, onBuffer: function () {}, + onBufferEnd: function () {}, onEnded: function () {}, onError: function () {}, onDuration: function () {}, From 6904b1e50fd2e64b6c1dccddae410a9671aec496 Mon Sep 17 00:00:00 2001 From: Andrew Pazniak Date: Thu, 4 Apr 2019 12:47:00 +0300 Subject: [PATCH 7/9] YouTube player testcase fixed --- test/players/YouTube.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/test/players/YouTube.js b/test/players/YouTube.js index 316c2dd5..311c6ff6 100644 --- a/test/players/YouTube.js +++ b/test/players/YouTube.js @@ -83,10 +83,13 @@ test('load() when ready', t => { getSDK.restore() }) -test('onStateChange() - play', async t => { - const onPlay = () => t.pass() - const instance = shallow().instance() +test('onStateChange() - play', t => { + const called = {} + const onPlay = () => { called.onPlay = true } + const onBufferEnd = () => { called.onBufferEnd = true } + const instance = shallow().instance() instance.onStateChange({ data: 'PLAYING' }) + t.true(called.onPlay && called.onBufferEnd) }) test('onStateChange() - pause', async t => { From 9391a116c874478b78ccdc7ad17d877e8e2f28d8 Mon Sep 17 00:00:00 2001 From: Pete Cook Date: Wed, 10 Apr 2019 10:46:50 +0300 Subject: [PATCH 8/9] Fixed wording in README.md Co-Authored-By: me-andre --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c745fe7..20f74d89 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ Prop | Description `onDuration` | Callback containing duration of the media, in seconds `onPause` | Called when media is paused `onBuffer` | Called when media starts buffering -`onBufferEnd` | Called when media has finished buffering (works for file paths, YouTube and Facebook players) +`onBufferEnd` | Called when media has finished buffering
  ◦  Works for files, YouTube and Facebook `onSeek` | Called when media seeks with `seconds` parameter `onEnded` | Called when media finishes playing
  ◦  Does not fire when `loop` is set to `true` `onError` | Called when an error occurs whilst attempting to play media From f859fe206423a6a6e687d1de3ffbab028b7231b4 Mon Sep 17 00:00:00 2001 From: Andrew Pazniak Date: Wed, 10 Apr 2019 10:55:44 +0300 Subject: [PATCH 9/9] Added onBufferEnd cb to ReactPlayerProps in index.d.ts --- index.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/index.d.ts b/index.d.ts index 40436919..a806a96c 100644 --- a/index.d.ts +++ b/index.d.ts @@ -98,6 +98,7 @@ export interface ReactPlayerProps { onPlay?(): void; onPause?(): void; onBuffer?(): void; + onBufferEnd?(): void; onEnded?(): void; onEnablePIP?(): void; onDisablePIP?(): void;