Skip to content

Commit 9a7859a

Browse files
committed
WiP on handling Videos
1 parent 09aeafc commit 9a7859a

File tree

3 files changed

+57
-5
lines changed

3 files changed

+57
-5
lines changed

client/components/editor/Video.tsx

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,65 @@
1-
import React, {useContext, useEffect, useRef, useState} from 'react';
1+
import React, {useContext, useRef, useState} from 'react';
2+
import ReactPlayer from 'react-player/file';
23
import {FinderSettings} from 'finder/FinderSettings';
3-
import FileDetails from './FileDetails';
4+
import {FileDetails} from 'finder/FileDetails';
5+
import PauseIcon from 'icons/pause.svg';
6+
import PlayIcon from 'icons/play.svg';
7+
import CameraIcon from 'icons/camera.svg';
48

59

610
export default function Video(props) {
11+
const sampleFields = {
12+
posterFrame: document.getElementById('id_poster_frame') as HTMLInputElement,
13+
};
714
const settings = useContext(FinderSettings);
15+
const style = {
16+
width: '960px',
17+
maxWidth: '100%',
18+
height: 'auto',
19+
};
20+
const videoRef = useRef(null);
21+
const [isPlaying, setIsPlaying] = useState(false);
822

23+
const onReady = () => {
24+
}
25+
26+
const onPlayPause = () => {
27+
const player = videoRef.current.getInternalPlayer();
28+
if (isPlaying) {
29+
player.pause();
30+
setIsPlaying(false);
31+
} else {
32+
player.play();
33+
setIsPlaying(true);
34+
}
35+
}
36+
37+
const createPosterFrame = () => {
38+
const currentTime = videoRef.current.getCurrentTime();
39+
sampleFields.posterFrame.value = currentTime;
40+
}
41+
42+
const controlButtons = [(isPlaying ?
43+
<button onClick={onPlayPause}><PauseIcon/>{gettext("Pause")}</button> :
44+
<button onClick={onPlayPause}><PlayIcon/>{gettext("Play")}</button>
45+
),
46+
<button onClick={createPosterFrame}><CameraIcon/>{gettext("Create Poster Frame")}</button>
47+
];
948
return (
10-
<FileDetails>
11-
<video src={settings.download_url}></video>
49+
<FileDetails controlButtons={controlButtons} style={style}>
50+
<ReactPlayer
51+
url={settings.download_url}
52+
controls={true}
53+
controlsList="nofullscreen nodownload"
54+
disablePictureInPicture={true}
55+
onReady={onReady}
56+
onPlay={() => setIsPlaying(true)}
57+
onPause={() => setIsPlaying(false)}
58+
pip={false}
59+
ref={videoRef}
60+
width="100%"
61+
height="100%"
62+
/>
1263
</FileDetails>
1364
);
1465
}

client/esbuild.cjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { build } = require('esbuild');
1+
const {build} = require('esbuild');
22
const svgr = require('esbuild-plugin-svgr');
33
const buildOptions = require('yargs-parser')(process.argv.slice(2), {
44
boolean: ['debug'],

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"esbuild-plugin-svgr": "^2.1.0",
1818
"react-h5-audio-player": "^3.9.1",
1919
"react-image-crop": "^11.0.5",
20+
"react-player": "^2.16.0",
2021
"react-tooltip": "^5.26.4",
2122
"request": "^2.88.2",
2223
"sass": "^1.77.2",

0 commit comments

Comments
 (0)