From 85302118227bad232afdebb84a5c245f862366bd Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 16 Dec 2021 09:54:45 +0100 Subject: [PATCH] Add ability to disable p2p in embed with URL --- .../video-share.component.html | 11 +++++- .../video-share.component.ts | 38 +++++++++++++++---- client/src/assets/player/stats/stats-card.ts | 3 +- client/src/standalone/videos/embed.ts | 6 ++- shared/core-utils/common/url.ts | 2 + 5 files changed, 46 insertions(+), 14 deletions(-) diff --git a/client/src/app/shared/shared-share-modal/video-share.component.html b/client/src/app/shared/shared-share-modal/video-share.component.html index e5cee1b2f..a0a593a24 100644 --- a/client/src/app/shared/shared-share-modal/video-share.component.html +++ b/client/src/app/shared/shared-share-modal/video-share.component.html @@ -216,10 +216,17 @@ > +
+ +
+
@@ -232,7 +239,7 @@
diff --git a/client/src/app/shared/shared-share-modal/video-share.component.ts b/client/src/app/shared/shared-share-modal/video-share.component.ts index d59f338c7..36a4d7520 100644 --- a/client/src/app/shared/shared-share-modal/video-share.component.ts +++ b/client/src/app/shared/shared-share-modal/video-share.component.ts @@ -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 } } } diff --git a/client/src/assets/player/stats/stats-card.ts b/client/src/assets/player/stats/stats-card.ts index 55d850eda..e76a81a74 100644 --- a/client/src/assets/player/stats/stats-card.ts +++ b/client/src/assets/player/stats/stats-card.ts @@ -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)} diff --git a/client/src/standalone/videos/embed.ts b/client/src/standalone/videos/embed.ts index c04f94d20..eb8076b98 100644 --- a/client/src/standalone/videos/embed.ts +++ b/client/src/standalone/videos/embed.ts @@ -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 ? '' + peertubeTranslate('Watching this video may reveal your IP address to others.') + '' : undefined diff --git a/shared/core-utils/common/url.ts b/shared/core-utils/common/url.ts index 9c111cbcc..8020d9b28 100644 --- a/shared/core-utils/common/url.ts +++ b/shared/core-utils/common/url.ts @@ -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) }