Skip to content

Commit 17fbef8

Browse files
committed
Move progress logic from players to top level component
* Now we're rendering all players at once, we don't want multiple progress loops going at once * Renamed `update` to `progress` – makes a bit more sense
1 parent 31b7d3d commit 17fbef8

2 files changed

Lines changed: 25 additions & 19 deletions

File tree

src/ReactPlayer.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,20 @@ import 'array.prototype.find'
44
import { propTypes, defaultProps } from './props'
55
import players from './players'
66

7+
const PROGRESS_FREQUENCY = 500
8+
79
export default class ReactPlayer extends Component {
810
static propTypes = propTypes
911
static defaultProps = defaultProps
1012
static canPlay (url) {
1113
return players.some(player => player.canPlay(url))
1214
}
15+
componentDidMount () {
16+
this.progress()
17+
}
18+
componentWillUnmount () {
19+
clearTimeout(this.progressTimeout)
20+
}
1321
shouldComponentUpdate (nextProps) {
1422
return (
1523
this.props.url !== nextProps.url ||
@@ -23,6 +31,23 @@ export default class ReactPlayer extends Component {
2331
player.seekTo(fraction)
2432
}
2533
}
34+
progress = () => {
35+
if (this.props.url && this.refs.player) {
36+
let progress = {}
37+
const loaded = this.refs.player.getFractionLoaded()
38+
const played = this.refs.player.getFractionPlayed()
39+
if (!this.prevLoaded || loaded !== this.prevLoaded) {
40+
progress.loaded = this.prevLoaded = loaded
41+
}
42+
if (!this.prevPlayed || played !== this.prevPlayed) {
43+
progress.played = this.prevPlayed = played
44+
}
45+
if (progress.loaded || progress.played) {
46+
this.props.onProgress(progress)
47+
}
48+
}
49+
this.progressTimeout = setTimeout(this.progress, PROGRESS_FREQUENCY)
50+
}
2651
renderPlayer = Player => {
2752
const active = Player.canPlay(this.props.url)
2853
const { youtubeConfig, soundcloudConfig, vimeoConfig, ...activeProps } = this.props

src/players/Base.js

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,16 @@ import { Component } from 'react'
22

33
import { propTypes, defaultProps } from '../props'
44

5-
const UPDATE_FREQUENCY = 500
6-
75
export default class Base extends Component {
86
static propTypes = propTypes
97
static defaultProps = defaultProps
108
componentDidMount () {
11-
this.update()
129
if (this.props.url) {
1310
this.load(this.props.url)
1411
}
1512
}
1613
componentWillUnmount () {
1714
this.stop()
18-
clearTimeout(this.updateTimeout)
1915
}
2016
componentWillReceiveProps (nextProps) {
2117
// Invoke player methods based on incoming props
@@ -36,21 +32,6 @@ export default class Base extends Component {
3632
shouldComponentUpdate (nextProps) {
3733
return this.props.url !== nextProps.url
3834
}
39-
update = () => {
40-
let progress = {}
41-
const loaded = this.getFractionLoaded()
42-
const played = this.getFractionPlayed()
43-
if (!this.prevLoaded || loaded !== this.prevLoaded) {
44-
progress.loaded = this.prevLoaded = loaded
45-
}
46-
if (!this.prevPlayed || played !== this.prevPlayed) {
47-
progress.played = this.prevPlayed = played
48-
}
49-
if (progress.loaded || progress.played) {
50-
this.props.onProgress(progress)
51-
}
52-
this.updateTimeout = setTimeout(this.update, UPDATE_FREQUENCY)
53-
}
5435
onReady = () => {
5536
this.setVolume(this.props.volume)
5637
if (this.props.playing || this.preloading) {

0 commit comments

Comments
 (0)