]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/standalone/videos/embed.ts
Add ability to set a start time
[github/Chocobozzz/PeerTube.git] / client / src / standalone / videos / embed.ts
index 3193ae6ef560df29a8e4674d41fd194039a45ca4..a99bc586fd71de6dd4251684d05e31f82822b46d 100644 (file)
@@ -1,13 +1,16 @@
 import './embed.scss'
 
 import * as videojs from 'video.js'
-import 'videojs-hotkeys'
-import '../../assets/player/peertube-videojs-plugin'
-import 'videojs-dock/dist/videojs-dock.es.js'
+
 import { VideoDetails } from '../../../../shared'
+import { getVideojsOptions } from '../../assets/player/peertube-player'
+
+function getVideoUrl (id: string) {
+  return window.location.origin + '/api/v1/videos/' + id
+}
 
 async function loadVideoInfo (videoId: string): Promise<VideoDetails> {
-  const response = await fetch(window.location.origin + '/api/v1/videos/' + videoId)
+  const response = await fetch(getVideoUrl(videoId))
   return response.json()
 }
 
@@ -16,29 +19,41 @@ const videoId = urlParts[urlParts.length - 1]
 
 loadVideoInfo(videoId)
   .then(videoInfo => {
-    const videoElement = document.getElementById('video-container') as HTMLVideoElement
-    const previewUrl = window.location.origin + videoInfo.previewPath
-    videoElement.poster = previewUrl
-
-    const videojsOptions = {
-      controls: true,
-      autoplay: false,
-      plugins: {
-        peertube: {
-          videoFiles: videoInfo.files,
-          playerElement: videoElement,
-          peerTubeLink: true
-        },
-        hotkeys: {
-          enableVolumeScroll: false
-        }
-      }
+    const videoContainerId = 'video-container'
+
+    const videoElement = document.getElementById(videoContainerId) as HTMLVideoElement
+    let autoplay = false
+    let startTime = 0
+
+    try {
+      let params = new URL(window.location.toString()).searchParams
+      autoplay = params.has('autoplay') && (params.get('autoplay') === '1' || params.get('autoplay') === 'true')
+
+      const startTimeParamString = params.get('start')
+      const startTimeParamNumber = parseInt(startTimeParamString, 10)
+      if (isNaN(startTimeParamNumber) === false) startTime = startTimeParamNumber
+    } catch (err) {
+      console.error('Cannot get params from URL.', err)
     }
-    videojs('video-container', videojsOptions, function () {
+
+    const videojsOptions = getVideojsOptions({
+      autoplay,
+      inactivityTimeout: 1500,
+      videoViewUrl: getVideoUrl(videoId) + '/views',
+      playerElement: videoElement,
+      videoFiles: videoInfo.files,
+      videoDuration: videoInfo.duration,
+      enableHotkeys: true,
+      peertubeLink: true,
+      poster: window.location.origin + videoInfo.previewPath,
+      startTime
+    })
+    videojs(videoContainerId, videojsOptions, function () {
       const player = this
 
       player.dock({
-        title: videoInfo.name
+        title: videoInfo.name,
+        description: 'Uses P2P, others may know you are watching this video.'
       })
     })
   })