]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Don't not autoplay live without autoplay setting
authorChocobozzz <me@florianbigard.com>
Wed, 14 Dec 2022 13:06:12 +0000 (14:06 +0100)
committerChocobozzz <me@florianbigard.com>
Wed, 14 Dec 2022 13:06:12 +0000 (14:06 +0100)
client/src/standalone/videos/embed.ts
client/src/standalone/videos/shared/player-manager-options.ts
support/doc/api/openapi.yaml

index 5bb3b43c2f1608add04ea3d87bb156a38302b54b..d268f4762ad8d82076e5236dbc820537e5bf2476 100644 (file)
@@ -90,7 +90,7 @@ export class PeerTubeEmbed {
 
     if (!videoId) return
 
-    return this.loadVideoAndBuildPlayer({ uuid: videoId, forceAutoplay: false })
+    return this.loadVideoAndBuildPlayer({ uuid: videoId, autoplayFromPreviousVideo: false, forceAutoplay: false })
   }
 
   private async initPlaylist () {
@@ -147,7 +147,7 @@ export class PeerTubeEmbed {
 
     this.playlistTracker.setCurrentElement(next)
 
-    return this.loadVideoAndBuildPlayer({ uuid: next.video.uuid, forceAutoplay: false })
+    return this.loadVideoAndBuildPlayer({ uuid: next.video.uuid, autoplayFromPreviousVideo: true, forceAutoplay: false })
   }
 
   async playPreviousPlaylistVideo () {
@@ -159,7 +159,7 @@ export class PeerTubeEmbed {
 
     this.playlistTracker.setCurrentElement(previous)
 
-    await this.loadVideoAndBuildPlayer({ uuid: previous.video.uuid, forceAutoplay: false })
+    await this.loadVideoAndBuildPlayer({ uuid: previous.video.uuid, autoplayFromPreviousVideo: true, forceAutoplay: false })
   }
 
   getCurrentPlaylistPosition () {
@@ -170,14 +170,15 @@ export class PeerTubeEmbed {
 
   private async loadVideoAndBuildPlayer (options: {
     uuid: string
+    autoplayFromPreviousVideo: boolean
     forceAutoplay: boolean
   }) {
-    const { uuid, forceAutoplay } = options
+    const { uuid, autoplayFromPreviousVideo, forceAutoplay } = options
 
     try {
       const { videoResponse, captionsPromise } = await this.videoFetcher.loadVideo(uuid)
 
-      return this.buildVideoPlayer({ videoResponse, captionsPromise, forceAutoplay })
+      return this.buildVideoPlayer({ videoResponse, captionsPromise, autoplayFromPreviousVideo, forceAutoplay })
     } catch (err) {
       this.playerHTML.displayError(err.message, await this.translationsPromise)
     }
@@ -186,17 +187,18 @@ export class PeerTubeEmbed {
   private async buildVideoPlayer (options: {
     videoResponse: Response
     captionsPromise: Promise<Response>
+    autoplayFromPreviousVideo: boolean
     forceAutoplay: boolean
   }) {
-    const { videoResponse, captionsPromise, forceAutoplay } = options
+    const { videoResponse, captionsPromise, autoplayFromPreviousVideo, forceAutoplay } = options
 
-    const alreadyHadPlayer = this.resetPlayerElement()
+    this.resetPlayerElement()
 
     const videoInfoPromise = videoResponse.json()
       .then(async (videoInfo: VideoDetails) => {
         this.playerManagerOptions.loadParams(this.config, videoInfo)
 
-        if (!alreadyHadPlayer && !this.playerManagerOptions.hasAutoplay()) {
+        if (!autoplayFromPreviousVideo && !this.playerManagerOptions.hasAutoplay()) {
           this.playerHTML.buildPlaceholder(videoInfo)
         }
         const live = videoInfo.isLive
@@ -224,14 +226,14 @@ export class PeerTubeEmbed {
     const playerOptions = await this.playerManagerOptions.getPlayerOptions({
       video,
       captionsResponse,
-      alreadyHadPlayer,
+      autoplayFromPreviousVideo,
       translations,
       serverConfig: this.config,
 
       authorizationHeader: () => this.http.getHeaderTokenValue(),
       videoFileToken: () => videoFileToken,
 
-      onVideoUpdate: (uuid: string) => this.loadVideoAndBuildPlayer({ uuid, forceAutoplay: false }),
+      onVideoUpdate: (uuid: string) => this.loadVideoAndBuildPlayer({ uuid, autoplayFromPreviousVideo: true, forceAutoplay: false }),
 
       playlistTracker: this.playlistTracker,
       playNextPlaylistVideo: () => this.playNextPlaylistVideo(),
@@ -277,7 +279,7 @@ export class PeerTubeEmbed {
         video,
         onPublishedVideo: () => {
           this.liveManager.stopListeningForChanges(video)
-          this.loadVideoAndBuildPlayer({ uuid: video.uuid, forceAutoplay: true })
+          this.loadVideoAndBuildPlayer({ uuid: video.uuid, autoplayFromPreviousVideo: false, forceAutoplay: true })
         }
       })
 
@@ -294,12 +296,9 @@ export class PeerTubeEmbed {
   }
 
   private resetPlayerElement () {
-    let alreadyHadPlayer = false
-
     if (this.player) {
       this.player.dispose()
       this.player = undefined
-      alreadyHadPlayer = true
     }
 
     const playerElement = document.createElement('video')
@@ -308,8 +307,6 @@ export class PeerTubeEmbed {
 
     this.playerHTML.setPlayerElement(playerElement)
     this.playerHTML.addPlayerElementToDOM()
-
-    return alreadyHadPlayer
   }
 
   private async buildPlayerPlaylistUpnext () {
index 9ec012369f70e905ac11af23c28595d6b4f8ba9b..b0bdb2dd92b3c5a6f7fc118807079659ef8b2381 100644 (file)
@@ -162,7 +162,7 @@ export class PlayerManagerOptions {
 
     serverConfig: HTMLServerConfig
 
-    alreadyHadPlayer: boolean
+    autoplayFromPreviousVideo: boolean
 
     translations: Translations
 
@@ -174,7 +174,7 @@ export class PlayerManagerOptions {
     const {
       video,
       captionsResponse,
-      alreadyHadPlayer,
+      autoplayFromPreviousVideo,
       videoFileToken,
       translations,
       forceAutoplay,
@@ -189,7 +189,7 @@ export class PlayerManagerOptions {
     const playerOptions: PeertubePlayerManagerOptions = {
       common: {
         // Autoplay in playlist mode
-        autoplay: alreadyHadPlayer ? true : this.autoplay,
+        autoplay: autoplayFromPreviousVideo ? true : this.autoplay,
         forceAutoplay,
 
         controls: this.controls,
index c2f9d424e1156240b9a34c8f9d3689ae4a1bc43a..bfa7235a2a91ad6d040f95697d885b1da7efc1d6 100644 (file)
@@ -8128,17 +8128,13 @@ components:
     NotificationSettingValue:
       type: integer
       description: >
-        Notification type
+        Notification type. One of the following values, or a sum of multiple values:
 
         - `0` NONE
 
         - `1` WEB
 
         - `2` EMAIL
-      enum:
-        - 0
-        - 1
-        - 2
     Notification:
       properties:
         id: