]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/standalone/videos/embed.ts
Fix context menu when watching a playlist
[github/Chocobozzz/PeerTube.git] / client / src / standalone / videos / embed.ts
index c79471005f7e3cda4862f561f5c7a0319ffe37c7..9e5b2a655ecae253d39cd074f0565cf777dda302 100644 (file)
@@ -13,6 +13,7 @@ import {
   PluginType,
   ClientHookName
 } from '../../../../shared/models'
+import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
 import { P2PMediaLoaderOptions, PeertubePlayerManagerOptions, PlayerMode } from '../../assets/player/peertube-player-manager'
 import { VideoJSCaption } from '../../assets/player/peertube-videojs-typings'
 import { TranslationsManager } from '../../assets/player/translations-manager'
@@ -85,9 +86,9 @@ export class PeerTubeEmbed {
   refreshFetch (url: string, options?: RequestInit) {
     return fetch(url, options)
       .then((res: Response) => {
-        if (res.status !== 401) return res
+        if (res.status !== HttpStatusCode.UNAUTHORIZED_401) return res
 
-        const refreshingTokenPromise = new Promise((resolve, reject) => {
+        const refreshingTokenPromise = new Promise<void>((resolve, reject) => {
           const clientId: string = peertubeLocalStorage.getItem(this.LOCAL_STORAGE_OAUTH_CLIENT_KEYS.CLIENT_ID)
           const clientSecret: string = peertubeLocalStorage.getItem(this.LOCAL_STORAGE_OAUTH_CLIENT_KEYS.CLIENT_SECRET)
 
@@ -107,7 +108,7 @@ export class PeerTubeEmbed {
             method: 'POST',
             body: objectToUrlEncoded(data)
           }).then(res => {
-            if (res.status === 401) return undefined
+            if (res.status === HttpStatusCode.UNAUTHORIZED_401) return undefined
 
             return res.json()
           }).then((obj: UserRefreshToken & { code: 'invalid_grant'}) => {
@@ -125,10 +126,9 @@ export class PeerTubeEmbed {
             this.setHeadersFromTokens()
 
             resolve()
+          }).catch((refreshTokenError: any) => {
+            reject(refreshTokenError)
           })
-            .catch((refreshTokenError: any) => {
-              reject(refreshTokenError)
-            })
         })
 
         return refreshingTokenPromise
@@ -339,7 +339,7 @@ export class PeerTubeEmbed {
 
     try {
       playlistResponse = await playlistPromise
-      isResponseOk = true
+      isResponseOk = playlistResponse.status === HttpStatusCode.OK_200
     } catch (err) {
       console.error(err)
       isResponseOk = false
@@ -348,7 +348,7 @@ export class PeerTubeEmbed {
     if (!isResponseOk) {
       const serverTranslations = await this.translationsPromise
 
-      if (playlistResponse?.status === 404) {
+      if (playlistResponse?.status === HttpStatusCode.NOT_FOUND_404) {
         this.playlistNotFound(serverTranslations)
         return undefined
       }
@@ -368,7 +368,7 @@ export class PeerTubeEmbed {
 
     try {
       videoResponse = await videoPromise
-      isResponseOk = true
+      isResponseOk = videoResponse.status === HttpStatusCode.OK_200
     } catch (err) {
       console.error(err)
 
@@ -378,7 +378,7 @@ export class PeerTubeEmbed {
     if (!isResponseOk) {
       const serverTranslations = await this.translationsPromise
 
-      if (videoResponse?.status === 404) {
+      if (videoResponse?.status === HttpStatusCode.NOT_FOUND_404) {
         this.videoNotFound(serverTranslations)
         return undefined
       }
@@ -492,6 +492,8 @@ export class PeerTubeEmbed {
 
     const playlistPlugin = this.currentPlaylistElement
       ? {
+        createComponent: true,
+
         elements: this.playlistElements,
         playlist: this.playlist,
 
@@ -502,7 +504,10 @@ export class PeerTubeEmbed {
 
           this.loadVideoAndBuildPlayer(this.currentPlaylistElement.video.uuid)
             .catch(err => console.error(err))
-        }
+        },
+
+        embedTitle: this.playlist.displayName,
+        embedUrl: window.location.origin + this.playlist.embedPath
       }
       : undefined
 
@@ -531,6 +536,9 @@ export class PeerTubeEmbed {
         videoCaptions,
         inactivityTimeout: 2500,
         videoViewUrl: this.getVideoUrl(videoInfo.uuid) + '/views',
+        videoUUID: videoInfo.uuid,
+
+        isLive: videoInfo.isLive,
 
         playerElement: this.playerElement,
         onPlayerElementChange: (element: HTMLVideoElement) => this.playerElement = element,
@@ -543,7 +551,8 @@ export class PeerTubeEmbed {
 
         serverUrl: window.location.origin,
         language: navigator.language,
-        embedUrl: window.location.origin + videoInfo.embedPath
+        embedUrl: window.location.origin + videoInfo.embedPath,
+        embedTitle: videoInfo.name
       },
 
       webtorrent: {
@@ -588,7 +597,7 @@ export class PeerTubeEmbed {
       })
     }
 
-    this.runHook('action:embed.player.loaded', undefined, { player: this.player })
+    this.runHook('action:embed.player.loaded', undefined, { player: this.player, videojs, video: videoInfo })
   }
 
   private async initCore () {
@@ -661,10 +670,12 @@ export class PeerTubeEmbed {
       ? '<span class="text">' + peertubeTranslate('Watching this video may reveal your IP address to others.') + '</span>'
       : undefined
 
-    this.player.dock({
-      title,
-      description
-    })
+    if (title || description) {
+      this.player.dock({
+        title,
+        description
+      })
+    }
   }
 
   private buildCSS () {
@@ -753,6 +764,7 @@ export class PeerTubeEmbed {
         await loadPlugin({
           hooks: this.peertubeHooks,
           pluginInfo,
+          onSettingsScripts: () => undefined,
           peertubeHelpersFactory: _ => this.buildPeerTubeHelpers(translations)
         })
       }
@@ -779,6 +791,8 @@ export class PeerTubeEmbed {
 
       showModal: unimplemented,
 
+      getServerConfig: unimplemented,
+
       markdownRenderer: {
         textMarkdownToHTML: unimplemented,
         enhancedMarkdownToHTML: unimplemented