From b891f9bc612217b5b6f08a886c7d12eca260b9c8 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 3 Apr 2018 17:33:39 +0200 Subject: [PATCH] Fix watch page video change --- client/package.json | 4 +- .../+video-watch/video-watch.component.html | 2 +- .../+video-watch/video-watch.component.scss | 2 +- .../+video-watch/video-watch.component.ts | 57 ++++++++++--------- .../assets/player/peertube-videojs-plugin.ts | 4 +- .../assets/player/resolution-menu-button.ts | 3 +- .../src/assets/player/resolution-menu-item.ts | 4 +- .../src/assets/player/settings-menu-button.ts | 2 +- client/src/sass/video-js-custom.scss | 2 +- client/yarn.lock | 20 +++---- 10 files changed, 52 insertions(+), 48 deletions(-) diff --git a/client/package.json b/client/package.json index d2d0a68c0..c865486e7 100644 --- a/client/package.json +++ b/client/package.json @@ -78,9 +78,9 @@ "tslint-config-standard": "^7.0.0", "typescript": "2.7.2", "uglifyjs-webpack-plugin": "^1.1.2", - "video.js": "^6.2.0", + "video.js": "^6.7.3", "videojs-dock": "^2.0.2", - "videojs-hotkeys": "^0.2.20", + "videojs-hotkeys": "^0.2.21", "webpack": "^3.3.0", "webpack-bundle-analyzer": "^2.9.1", "webtorrent": "^0.98.0", diff --git a/client/src/app/videos/+video-watch/video-watch.component.html b/client/src/app/videos/+video-watch/video-watch.component.html index 9c6038a5e..0385fab7c 100644 --- a/client/src/app/videos/+video-watch/video-watch.component.html +++ b/client/src/app/videos/+video-watch/video-watch.component.html @@ -1,7 +1,7 @@
- +
Video not found :'(
diff --git a/client/src/app/videos/+video-watch/video-watch.component.scss b/client/src/app/videos/+video-watch/video-watch.component.scss index 10993735b..109357b59 100644 --- a/client/src/app/videos/+video-watch/video-watch.component.scss +++ b/client/src/app/videos/+video-watch/video-watch.component.scss @@ -6,7 +6,7 @@ display: flex; justify-content: center; - #video-element { + /deep/ .video-js { width: 888px; height: 500px; diff --git a/client/src/app/videos/+video-watch/video-watch.component.ts b/client/src/app/videos/+video-watch/video-watch.component.ts index 0f7c76d0b..9563394dc 100644 --- a/client/src/app/videos/+video-watch/video-watch.component.ts +++ b/client/src/app/videos/+video-watch/video-watch.component.ts @@ -56,6 +56,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy { private otherVideos: Video[] = [] private paramsSub: Subscription + private videojsInstance: videojs.Player constructor ( private elementRef: ElementRef, @@ -333,35 +334,39 @@ export class VideoWatchComponent implements OnInit, OnDestroy { if (res === false) return this.redirectService.redirectToHomepage() } - // Player was already loaded - if (this.videoPlayerLoaded !== true) { - this.playerElement = this.elementRef.nativeElement.querySelector('#video-element') - - const videojsOptions = getVideojsOptions({ - autoplay: this.isAutoplay(), - inactivityTimeout: 4000, - videoFiles: this.video.files, - playerElement: this.playerElement, - videoViewUrl: this.videoService.getVideoViewUrl(this.video.uuid), - videoDuration: this.video.duration, - enableHotkeys: true, - peertubeLink: false, - poster: this.video.previewUrl - }) + // Player was already loaded, remove old videojs + if (this.videojsInstance) { + this.videojsInstance.dispose() + this.videojsInstance = undefined + } + + // Build video element, because videojs remove it on dispose + const playerElementWrapper = this.elementRef.nativeElement.querySelector('#video-element-wrapper') + this.playerElement = document.createElement('video') + this.playerElement.className = 'video-js vjs-peertube-skin' + playerElementWrapper.appendChild(this.playerElement) + + const videojsOptions = getVideojsOptions({ + autoplay: this.isAutoplay(), + inactivityTimeout: 4000, + videoFiles: this.video.files, + playerElement: this.playerElement, + videoViewUrl: this.videoService.getVideoViewUrl(this.video.uuid), + videoDuration: this.video.duration, + enableHotkeys: true, + peertubeLink: false, + poster: this.video.previewUrl + }) - this.videoPlayerLoaded = true + this.videoPlayerLoaded = true - const self = this - this.zone.runOutsideAngular(() => { - videojs(this.playerElement, videojsOptions, function () { - self.player = this - this.on('customError', (event, data) => self.handleError(data.err)) - }) + const self = this + this.zone.runOutsideAngular(() => { + self.videojsInstance = videojs(this.playerElement, videojsOptions, function () { + self.player = this + this.on('customError', (event, data) => self.handleError(data.err)) }) - } else { - const videoViewUrl = this.videoService.getVideoViewUrl(this.video.uuid) - this.player.peertube().setVideoFiles(this.video.files, videoViewUrl, this.video.duration) - } + }) this.setVideoDescriptionHTML() this.setVideoLikesBarTooltipText() diff --git a/client/src/assets/player/peertube-videojs-plugin.ts b/client/src/assets/player/peertube-videojs-plugin.ts index 425c8c7a0..10c31cc0f 100644 --- a/client/src/assets/player/peertube-videojs-plugin.ts +++ b/client/src/assets/player/peertube-videojs-plugin.ts @@ -215,7 +215,7 @@ class PeerTubePlugin extends Plugin { this.player.posterImage.hide() this.updateVideoFile(undefined, () => this.player.play()) } else { - // Proxify first play + // Proxy first play const oldPlay = this.player.play.bind(this.player) this.player.play = () => { this.updateVideoFile(undefined, () => oldPlay) @@ -308,7 +308,7 @@ class PeerTubePlugin extends Plugin { this.player.options_.inactivityTimeout = 0 } const enableInactivity = () => { - // this.player.options_.inactivityTimeout = saveInactivityTimeout + this.player.options_.inactivityTimeout = saveInactivityTimeout } const settingsDialog = this.player.children_.find(c => c.name_ === 'SettingsDialog') diff --git a/client/src/assets/player/resolution-menu-button.ts b/client/src/assets/player/resolution-menu-button.ts index c927b084d..712e71192 100644 --- a/client/src/assets/player/resolution-menu-button.ts +++ b/client/src/assets/player/resolution-menu-button.ts @@ -35,8 +35,7 @@ class ResolutionMenuButton extends MenuButton { } createMenu () { - const menu = new Menu(this.player()) - + const menu = new Menu(this.player_) for (const videoFile of this.player_.peertube().videoFiles) { menu.addChild(new ResolutionMenuItem( this.player_, diff --git a/client/src/assets/player/resolution-menu-item.ts b/client/src/assets/player/resolution-menu-item.ts index 95e0ed1f8..8ad834c59 100644 --- a/client/src/assets/player/resolution-menu-item.ts +++ b/client/src/assets/player/resolution-menu-item.ts @@ -13,7 +13,7 @@ class ResolutionMenuItem extends MenuItem { this.label = options.label this.id = options.id - player.peertube().on('videoFileUpdate', () => this.update()) + player.peertube().on('videoFileUpdate', () => this.updateSelection()) } handleClick (event) { @@ -22,7 +22,7 @@ class ResolutionMenuItem extends MenuItem { this.player_.peertube().updateResolution(this.id) } - update () { + updateSelection () { this.selected(this.player_.peertube().getCurrentResolutionId() === this.id) } } diff --git a/client/src/assets/player/settings-menu-button.ts b/client/src/assets/player/settings-menu-button.ts index c48e1382c..bf6ac145a 100644 --- a/client/src/assets/player/settings-menu-button.ts +++ b/client/src/assets/player/settings-menu-button.ts @@ -33,7 +33,7 @@ class SettingsButton extends Button { this.buildMenu() this.bindEvents() - // Prepare dialog + // Prepare the dialog this.player().one('play', () => this.hideDialog()) } diff --git a/client/src/sass/video-js-custom.scss b/client/src/sass/video-js-custom.scss index c533bd116..5fd2f9567 100644 --- a/client/src/sass/video-js-custom.scss +++ b/client/src/sass/video-js-custom.scss @@ -77,7 +77,7 @@ $setting-transition-easing: ease-out; } .vjs-icon-placeholder::before { - transition: font-size 0.5s, opacity 0.5s; + transition: font-size 0.2s, opacity 0.2s; } &:hover { diff --git a/client/yarn.lock b/client/yarn.lock index 003832adf..cdb3c33ec 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -7041,9 +7041,9 @@ video.js@^5.19.2: videojs-vtt.js "0.12.6" xhr "2.2.2" -video.js@^6.2.0: - version "6.6.3" - resolved "https://registry.yarnpkg.com/video.js/-/video.js-6.6.3.tgz#6ebf8ca607c95961bf07f0ecbe15f4b30c232d1e" +video.js@^6.7.3: + version "6.7.3" + resolved "https://registry.yarnpkg.com/video.js/-/video.js-6.7.3.tgz#616ab015a74bb1bc8b092e9b4b8022519756f7c0" dependencies: babel-runtime "^6.9.2" global "4.3.2" @@ -7051,7 +7051,7 @@ video.js@^6.2.0: tsml "1.0.1" videojs-font "2.1.0" videojs-ie8 "1.1.2" - videojs-vtt.js "0.12.4" + videojs-vtt.js "0.12.5" xhr "2.4.0" videojs-dock@^2.0.2: @@ -7069,9 +7069,9 @@ videojs-font@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/videojs-font/-/videojs-font-2.1.0.tgz#a25930a67f6c9cfbf2bb88dacb8c6b451f093379" -videojs-hotkeys@^0.2.20: - version "0.2.20" - resolved "https://registry.yarnpkg.com/videojs-hotkeys/-/videojs-hotkeys-0.2.20.tgz#1dce9d42c29da392cf1742b89ba292c6706c8973" +videojs-hotkeys@^0.2.21: + version "0.2.21" + resolved "https://registry.yarnpkg.com/videojs-hotkeys/-/videojs-hotkeys-0.2.21.tgz#aa0a0a8484e8a8311ff9f4ba82d0934348566bad" videojs-ie8@1.1.2: version "1.1.2" @@ -7083,9 +7083,9 @@ videojs-swf@5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/videojs-swf/-/videojs-swf-5.4.1.tgz#2077ef71c749f2c7823ef49babae4dd2acb08f87" -videojs-vtt.js@0.12.4: - version "0.12.4" - resolved "https://registry.yarnpkg.com/videojs-vtt.js/-/videojs-vtt.js-0.12.4.tgz#38f2499e31efb3fa93590ddad4cb663275a4b161" +videojs-vtt.js@0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/videojs-vtt.js/-/videojs-vtt.js-0.12.5.tgz#32852732741c8b4e7a4314caa2cd93646a9c2d40" dependencies: global "^4.3.1" -- 2.41.0