]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Add ability to disable p2p in embed with URL
authorChocobozzz <me@florianbigard.com>
Thu, 16 Dec 2021 08:54:45 +0000 (09:54 +0100)
committerChocobozzz <me@florianbigard.com>
Thu, 16 Dec 2021 09:08:55 +0000 (10:08 +0100)
client/src/app/shared/shared-share-modal/video-share.component.html
client/src/app/shared/shared-share-modal/video-share.component.ts
client/src/assets/player/stats/stats-card.ts
client/src/standalone/videos/embed.ts
shared/core-utils/common/url.ts

index e5cee1b2f9d1c99a6b1be8d8dd81db5d758c2d11..a0a593a246e6d4a68d51b343e38eee8015c7f940 100644 (file)
               ></my-peertube-checkbox>
             </div>
 
+            <div class="form-group">
+              <my-peertube-checkbox
+                inputName="embedP2P" [(ngModel)]="customizations.embedP2P"
+                i18n-labelText labelText="P2P"
+              ></my-peertube-checkbox>
+            </div>
+
             <div class="form-group">
               <my-peertube-checkbox
                 inputName="warningTitle" [(ngModel)]="customizations.warningTitle"
-                i18n-labelText labelText="Display privacy warning"
+                i18n-labelText labelText="Display privacy warning" [disabled]="!customizations.embedP2P"
               ></my-peertube-checkbox>
             </div>
 
 
             <div class="form-group">
               <my-peertube-checkbox
-                inputName="controls" [(ngModel)]="customizations.peertubeLink"
+                inputName="peertubeLink" [(ngModel)]="customizations.peertubeLink"
                 i18n-labelText labelText="Display PeerTube button link"
               ></my-peertube-checkbox>
             </div>
index d59f338c7a2c5c4c368fa4e52c30f31681d1819e..36a4d75209d99e1a7ba9dd8c38da100dab0e9ea8 100644 (file)
@@ -1,5 +1,6 @@
 import { Component, ElementRef, Input, ViewChild } from '@angular/core'
 import { DomSanitizer, SafeHtml } from '@angular/platform-browser'
+import { ServerService } from '@app/core'
 import { VideoDetails } from '@app/shared/shared-main'
 import { VideoPlaylist } from '@app/shared/shared-video-playlist'
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
@@ -21,6 +22,8 @@ type Customizations = {
   originUrl: boolean
   autoplay: boolean
   muted: boolean
+
+  embedP2P: boolean
   title: boolean
   warningTitle: boolean
   controls: boolean
@@ -54,7 +57,8 @@ export class VideoShareComponent {
 
   constructor (
     private modalService: NgbModal,
-    private sanitizer: DomSanitizer
+    private sanitizer: DomSanitizer,
+    private server: ServerService
   ) { }
 
   show (currentVideoTimestamp?: number, currentPlaylistPosition?: number) {
@@ -78,6 +82,8 @@ export class VideoShareComponent {
       autoplay: false,
       muted: false,
 
+      embedP2P: this.server.getHTMLConfig().defaults.p2p.embed.enabled,
+
       // Embed options
       title: true,
       warningTitle: true,
@@ -87,6 +93,11 @@ export class VideoShareComponent {
       set: (target, prop, value) => {
         target[prop] = value
 
+        if (prop === 'embedP2P') {
+          // Auto enabled warning title if P2P is enabled
+          this.customizations.warningTitle = value
+        }
+
         this.updateEmbedCode()
 
         return true
@@ -101,7 +112,7 @@ export class VideoShareComponent {
   }
 
   getVideoIframeCode () {
-    const embedUrl = decorateVideoLink({ url: this.video.embedUrl, ...this.getVideoOptions() })
+    const embedUrl = decorateVideoLink({ url: this.video.embedUrl, ...this.getVideoOptions(true) })
 
     return buildVideoOrPlaylistEmbed(embedUrl, this.video.name)
   }
@@ -120,7 +131,7 @@ export class VideoShareComponent {
     return decorateVideoLink({
       url,
 
-      ...this.getVideoOptions()
+      ...this.getVideoOptions(false)
     })
   }
 
@@ -165,7 +176,21 @@ export class VideoShareComponent {
     }
   }
 
-  private getVideoOptions () {
+  private getVideoOptions (forEmbed: boolean) {
+    const embedOptions = forEmbed
+      ? {
+        title: this.customizations.title,
+        warningTitle: this.customizations.warningTitle,
+        controls: this.customizations.controls,
+        peertubeLink: this.customizations.peertubeLink,
+
+        // If using default value, we don't need to specify it
+        p2p: this.customizations.embedP2P === this.server.getHTMLConfig().defaults.p2p.embed.enabled
+          ? undefined
+          : this.customizations.embedP2P
+      }
+      : {}
+
     return {
       startTime: this.customizations.startAtCheckbox ? this.customizations.startAt : undefined,
       stopTime: this.customizations.stopAtCheckbox ? this.customizations.stopAt : undefined,
@@ -176,10 +201,7 @@ export class VideoShareComponent {
       autoplay: this.customizations.autoplay,
       muted: this.customizations.muted,
 
-      title: this.customizations.title,
-      warningTitle: this.customizations.warningTitle,
-      controls: this.customizations.controls,
-      peertubeLink: this.customizations.peertubeLink
+      ...embedOptions
     }
   }
 }
index 55d850edaa403ffd6f00c91d4a6bc8a186878f82..e76a81a74e6bedac7cd287fbd5e4f3fa71260af4 100644 (file)
@@ -34,7 +34,6 @@ class StatsCard extends Component {
   updateInterval: any
 
   mode: 'webtorrent' | 'p2p-media-loader'
-  p2pEnabled: boolean
 
   metadataStore: any = {}
 
@@ -211,7 +210,7 @@ class StatsCard extends Component {
 
     return `
       ${this.buildElement(player.localize('Player mode'), this.mode || 'HTTP')}
-      ${this.buildElement(player.localize('P2P'), player.localize(this.p2pEnabled ? 'enabled' : 'disabled'))}
+      ${this.buildElement(player.localize('P2P'), player.localize(this.options_.p2pEnabled ? 'enabled' : 'disabled'))}
 
       ${this.buildElement(player.localize('Video UUID'), this.options_.videoUUID)}
 
index c04f94d202119cfeda13e0e55d5e3b60c7aac592..eb8076b98b766d1c45cd3f384b2deacd99a25a48 100644 (file)
@@ -45,6 +45,7 @@ export class PeerTubeEmbed {
   title: boolean
   warningTitle: boolean
   peertubeLink: boolean
+  p2pEnabled: boolean
   bigPlayBackgroundColor: string
   foregroundColor: string
 
@@ -284,6 +285,7 @@ export class PeerTubeEmbed {
       this.enableApi = this.getParamToggle(params, 'api', this.enableApi)
       this.warningTitle = this.getParamToggle(params, 'warningTitle', true)
       this.peertubeLink = this.getParamToggle(params, 'peertubeLink', true)
+      this.p2pEnabled = this.getParamToggle(params, 'p2p', this.isP2PEnabled(video))
 
       this.scope = this.getParamString(params, 'scope', this.scope)
       this.subtitle = this.getParamString(params, 'subtitle')
@@ -518,7 +520,7 @@ export class PeerTubeEmbed {
         muted: this.muted,
         loop: this.loop,
 
-        p2pEnabled: this.isP2PEnabled(videoInfo),
+        p2pEnabled: this.p2pEnabled,
 
         captions: videoCaptions.length !== 0,
         subtitle: this.subtitle,
@@ -674,7 +676,7 @@ export class PeerTubeEmbed {
 
     const title = this.title ? videoInfo.name : undefined
 
-    const description = this.warningTitle && this.isP2PEnabled(videoInfo)
+    const description = this.warningTitle && this.p2pEnabled
       ? '<span class="text">' + peertubeTranslate('Watching this video may reveal your IP address to others.') + '</span>'
       : undefined
 
index 9c111cbcc32fee117f675922932ed720d7721824..8020d9b28e7f984e8d56ea74d3f4b4da99c85a44 100644 (file)
@@ -50,6 +50,7 @@ function decorateVideoLink (options: {
   warningTitle?: boolean
   controls?: boolean
   peertubeLink?: boolean
+  p2p?: boolean
 }) {
   const { url } = options
 
@@ -74,6 +75,7 @@ function decorateVideoLink (options: {
   if (options.warningTitle === false) params.set('warningTitle', '0')
   if (options.controls === false) params.set('controls', '0')
   if (options.peertubeLink === false) params.set('peertubeLink', '0')
+  if (options.p2p !== undefined) params.set('p2p', options.p2p ? '1' : '0')
 
   return buildUrl(url, params)
 }