gestione visualizzazione dopo 15 secondi

This commit is contained in:
matteo
2018-12-01 02:44:31 +01:00
parent f2b9bd1bfb
commit a55cc2d414
4 changed files with 92 additions and 39 deletions
+2 -6
View File
@@ -17,16 +17,12 @@ class App extends React.Component {
</Row> </Row>
<Row className="justify-content-center bg-black"> <Row className="justify-content-center bg-black">
<Col xs="12" sm="6"> <Col xs="12" sm="6">
<Switch> <Route path={["/video/:id", "/*"]} component={VideoPlayer} />
<Route path={["/video/:id",'']} component={VideoPlayer} />
{/* <Route component={VideoPlayer} /> */}
{/* <Route path='/search/:q/:token?' component={Search} /> */}
</Switch>
</Col> </Col>
</Row> </Row>
<Row className='scrollable'> <Row className='scrollable'>
<Switch> <Switch>
<Route path={["/video/:id","/search/:query"]} component={VideoInfo} /> <Route path={["/video/:id", "/search/:query"]} component={VideoInfo} />
<Route exact path='/' component={VideoList} /> <Route exact path='/' component={VideoList} />
<Route render={() => <div>URL not found</div>}/> <Route render={() => <div>URL not found</div>}/>
</Switch> </Switch>
+3 -4
View File
@@ -57,15 +57,14 @@
// console.info('nextProps',nextProps); // console.info('nextProps',nextProps);
// console.info('nextState',nextState); // console.info('nextState',nextState);
if(nextProps.match.params.id === this.state.videoId){} if(nextProps.match.params.id === this.state.videoId){}
else{ else if( nextProps.match.params.id){
this.setState({videoId: nextProps.match.params.id}); this.setState({videoId: nextProps.match.params.id});
} }
} }
componentDidUpdate(prevProps, prevState) { componentDidUpdate(prevProps, prevState) {
console.info('prevProps',prevProps); // console.info('prevProps',prevProps);
console.info('prevState',prevState); // console.info('prevState',prevState);
} }
// componentWillUnmount() { // componentWillUnmount() {
+84 -26
View File
@@ -1,7 +1,6 @@
import React, { Component } from 'react'; // eslint-disable-line no-unused-vars import React, { Component } from 'react'; // eslint-disable-line no-unused-vars
import YouTube from 'react-youtube'; // eslint-disable-line no-unused-vars import YouTube from 'react-youtube'; // eslint-disable-line no-unused-vars
import { stringify } from 'querystring'; /* eslint no-console: ["error", { allow: ["info", "error", "warn"] }] */
/* eslint no-console: ["error", { allow: ["info", "error"] }] */
class VideoPlayer extends Component { class VideoPlayer extends Component {
constructor(props) { constructor(props) {
@@ -16,29 +15,43 @@ class VideoPlayer extends Component {
modestbranding: 1 modestbranding: 1
} }
}, },
videoId: '0J2QdDbelmY' videoId: '0J2QdDbelmY',
promise1: null,
promise2: null,
outsideReject1: null,
outsideReject2: null
}; };
this._onPlay = this._onPlay.bind(this);
this._onStateChange = this._onStateChange.bind(this);
this._onReady = this._onReady.bind(this);
}
componentWillUpdate(nextProps, nextState) {
if (nextProps.match.params.id === this.props.match.params.id) {
} else if (nextProps.match.params.id) {
this.setState((state, props) => {
return { videoId: props.match.params.id };
});
} }
componentWillUpdate(nextProps, nextState){
if(nextProps.match.params.id === this.props.match.params.id){}
else{
this.setState((state, props) => { return { videoId: props.match.params.id }});
} }
componentWillReceiveProps(nextProps) {
// if (nextProps.location !== this.props.location) {}
} }
componentWillMount(){ componentWillMount() {
if(this.props.match.params.id) if (this.props.match.params.id)
this.setState((state, props) => { return { videoId: props.match.params.id }}); this.setState((state, props) => {
return { videoId: props.match.params.id };
});
} }
componentWillUnmount() {}
render() { render() {
return ( return (
<React.Fragment> <React.Fragment>
<YouTube <YouTube
opts={this.state.opt} opts={this.state.opt}
// this.props.match.params.id
videoId={this.state.videoId} videoId={this.state.videoId}
onReady={this._onReady} onReady={this._onReady}
onPlay={this._onPlay} onPlay={this._onPlay}
@@ -50,27 +63,72 @@ class VideoPlayer extends Component {
</React.Fragment> </React.Fragment>
); );
} }
_onError(event) { _onError(event) {
console.error('on error', event); console.error('on error', event);
// console.error(event);
}
_onPlay(event) {
// console.info('on play',event.target.getCurrentTime(), event);
// console.info(event.target.getApiInterface());
// console.warn(event.target.getDuration());
// console.info('go');
// while(event.target.getCurrentTime() < 15){}
// console.info(event.target.getCurrentTime());
} }
_onPlay(event) {}
_onReady(event) { _onReady(event) {
// access to player in all event handlers via event.target // access to player in all event handlers via event.target
// event.target.pauseVideo();
// console.info('on ready', event);
// console.warn(event);
// console.warn(event.target.getDuration());
} }
_onStateChange(event) { _onStateChange(event) {
// console.info('statechange: ', event.data) let timerId1, timerId2;
if (parseInt(event.data) === -1) {
this.setState({
promise2: new Promise((resolve, reject) => {
timerId2 = window.setInterval(() => {
switch (parseInt(event.target.getPlayerState())) {
case 1:
resolve(1);
break;
case 5:
resolve(5);
break;
default:
break;
}
}, 500);
this.setState({outsideReject2: reject });
})
});
this.state.promise2.then(msg => {
window.clearInterval(timerId2);
switch (parseInt(msg)) {
case 1:
this.setState({
promise1: new Promise((resolve, reject) => {
timerId1 = window.setInterval(() => {
if (event.target.getCurrentTime() > 15)
resolve(event.target.j.videoData.video_id);
}, 1000);
this.setState({ outsideReject1: reject });
})
});
this.state.promise1
.then(
risultato => {
console.info(risultato);
// post request to local db
// local storage logic for recent reccomender
clearInterval(timerId1);
},
error => console.info(error)
)
.finally(() => this.setState({ promise1: null }));
break;
case 5:
if (this.state.promise1)
this.state.outsideReject1('Video changed');
break;
default:
break;
}
});
}
} }
} }
+1 -1
View File
@@ -4,7 +4,7 @@ import React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import App from './App'; import App from './App';
import registerServiceWorker from './registerServiceWorker'; import registerServiceWorker from './registerServiceWorker';
import { HashRouter } from 'react-router-dom'; import { HashRouter, BrowserRouter } from 'react-router-dom';
ReactDOM.render(<HashRouter><App /></HashRouter>, document.getElementById('root')); ReactDOM.render(<HashRouter><App /></HashRouter>, document.getElementById('root'));
registerServiceWorker(); registerServiceWorker();