logo

mastofe

My custom branche(s) on git.pleroma.social/pleroma/mastofe
commit: 292f3cd7e0db0d71cb3202e65185f06fd04c475f
parent: a3d4f1bd9361c5e7fbf18e7d905cf8f44cf0224d
Author: Eugen Rochko <eugen@zeonfederated.com>
Date:   Sun,  8 Oct 2017 02:33:08 +0200

Show buffering in video player (#5261)


Diffstat:

Mapp/javascript/mastodon/features/video/index.js10++++++++--
Mapp/javascript/styles/components.scss7++++++-
2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/app/javascript/mastodon/features/video/index.js b/app/javascript/mastodon/features/video/index.js @@ -209,6 +209,10 @@ export default class Video extends React.PureComponent { } } + handleProgress = () => { + this.setState({ buffer: this.video.buffered.end(0) / this.video.duration * 100 }); + } + handleOpenVideo = () => { this.video.pause(); this.props.onOpenVideo(this.video.currentTime); @@ -221,7 +225,7 @@ export default class Video extends React.PureComponent { render () { const { preview, src, width, height, startTime, onOpenVideo, onCloseVideo, intl, alt } = this.props; - const { progress, dragging, paused, fullscreen, hovered, muted, revealed } = this.state; + const { progress, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state; return ( <div className={classNames('video-player', { inactive: !revealed, inline: width && height && !fullscreen, fullscreen })} style={{ width, height }} ref={this.setPlayerRef} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}> @@ -229,7 +233,7 @@ export default class Video extends React.PureComponent { ref={this.setVideoRef} src={src} poster={preview} - preload={!!startTime} + preload={startTime ? true : null} loop role='button' tabIndex='0' @@ -241,6 +245,7 @@ export default class Video extends React.PureComponent { onPause={this.handlePause} onTimeUpdate={this.handleTimeUpdate} onLoadedData={this.handleLoadedData} + onProgress={this.handleProgress} /> <button className={classNames('video-player__spoiler', { active: !revealed })} onClick={this.toggleReveal}> @@ -250,6 +255,7 @@ export default class Video extends React.PureComponent { <div className={classNames('video-player__controls', { active: paused || hovered })}> <div className='video-player__seek' onMouseDown={this.handleMouseDown} ref={this.setSeekRef}> + <div className='video-player__seek__buffer' style={{ width: `${buffer}%` }} /> <div className='video-player__seek__progress' style={{ width: `${progress}%` }} /> <span diff --git a/app/javascript/styles/components.scss b/app/javascript/styles/components.scss @@ -4028,7 +4028,8 @@ button.icon-button.active i.fa-retweet { top: 10px; } - &__progress { + &__progress, + &__buffer { display: block; position: absolute; height: 4px; @@ -4036,6 +4037,10 @@ button.icon-button.active i.fa-retweet { background: $ui-highlight-color; } + &__buffer { + background: rgba($white, 0.2); + } + &__handle { position: absolute; z-index: 3;