aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/app/videos/+video-watch
diff options
context:
space:
mode:
authorLoveIsGrief <LoveIsGrief@users.noreply.github.com>2019-09-24 08:48:01 +0200
committerChocobozzz <me@florianbigard.com>2019-09-24 08:48:01 +0200
commit6aa541481390980f9c85d2e66514ba0e6ce77a35 (patch)
tree7b2e934647a732645c69e5d05e4b18152b50a6b8 /client/src/app/videos/+video-watch
parent32d7f2b754b8d20bf44ae2121c79570cbff973c3 (diff)
downloadPeerTube-6aa541481390980f9c85d2e66514ba0e6ce77a35.tar.gz
PeerTube-6aa541481390980f9c85d2e66514ba0e6ce77a35.tar.zst
PeerTube-6aa541481390980f9c85d2e66514ba0e6ce77a35.zip
Autoplay next recommended video (#2137)
* Start working on autoplay of next video * Ignore changes made by gitpod * Apply changes from PR#1370 * Correct the spelling of recommendations * Fix linting errors * Move boolean check to existing onEnded handler * Pick a random video until the recommendations are improved * Add simple tests for autoPlayNextVideo * Fix lint ...again
Diffstat (limited to 'client/src/app/videos/+video-watch')
-rw-r--r--client/src/app/videos/+video-watch/video-watch.component.html6
-rw-r--r--client/src/app/videos/+video-watch/video-watch.component.ts17
2 files changed, 22 insertions, 1 deletions
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 6a02f630a..cd60c407f 100644
--- a/client/src/app/videos/+video-watch/video-watch.component.html
+++ b/client/src/app/videos/+video-watch/video-watch.component.html
@@ -199,7 +199,11 @@
199 <my-video-comments [video]="video" [user]="user"></my-video-comments> 199 <my-video-comments [video]="video" [user]="user"></my-video-comments>
200 </div> 200 </div>
201 201
202 <my-recommended-videos [inputRecommendation]="{ uuid: video.uuid, tags: video.tags }" [user]="user"></my-recommended-videos> 202 <my-recommended-videos
203 [inputRecommendation]="{ uuid: video.uuid, tags: video.tags }"
204 [user]="user"
205 (gotRecommendations)="onRecommendations($event)"
206 ></my-recommended-videos>
203 </div> 207 </div>
204 208
205 <div class="row privacy-concerns" *ngIf="hasAlreadyAcceptedPrivacyConcern === false"> 209 <div class="row privacy-concerns" *ngIf="hasAlreadyAcceptedPrivacyConcern === false">
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 21a24113f..1e7991738 100644
--- a/client/src/app/videos/+video-watch/video-watch.component.ts
+++ b/client/src/app/videos/+video-watch/video-watch.component.ts
@@ -35,6 +35,7 @@ import { getStoredTheater } from '../../../assets/player/peertube-player-local-s
35import { PluginService } from '@app/core/plugins/plugin.service' 35import { PluginService } from '@app/core/plugins/plugin.service'
36import { HooksService } from '@app/core/plugins/hooks.service' 36import { HooksService } from '@app/core/plugins/hooks.service'
37import { PlatformLocation } from '@angular/common' 37import { PlatformLocation } from '@angular/common'
38import { randomInt } from '@shared/core-utils/miscs/miscs'
38 39
39@Component({ 40@Component({
40 selector: 'my-video-watch', 41 selector: 'my-video-watch',
@@ -69,6 +70,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
69 remoteServerDown = false 70 remoteServerDown = false
70 hotkeys: Hotkey[] 71 hotkeys: Hotkey[]
71 72
73 private nextVideoUuid = ''
72 private currentTime: number 74 private currentTime: number
73 private paramsSub: Subscription 75 private paramsSub: Subscription
74 private queryParamsSub: Subscription 76 private queryParamsSub: Subscription
@@ -217,6 +219,13 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
217 return this.video.tags 219 return this.video.tags
218 } 220 }
219 221
222 onRecommendations (videos: Video[]) {
223 if (videos.length > 0) {
224 // Pick a random video until the recommendations are improved
225 this.nextVideoUuid = videos[randomInt(0,videos.length - 1)].uuid
226 }
227 }
228
220 onVideoRemoved () { 229 onVideoRemoved () {
221 this.redirectService.redirectToHomepage() 230 this.redirectService.redirectToHomepage()
222 } 231 }
@@ -477,6 +486,8 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
477 this.player.one('ended', () => { 486 this.player.one('ended', () => {
478 if (this.playlist) { 487 if (this.playlist) {
479 this.zone.run(() => this.videoWatchPlaylist.navigateToNextPlaylistVideo()) 488 this.zone.run(() => this.videoWatchPlaylist.navigateToNextPlaylistVideo())
489 } else if (this.user && this.user.autoPlayNextVideo) {
490 this.zone.run(() => this.autoplayNext())
480 } 491 }
481 }) 492 })
482 493
@@ -500,6 +511,12 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
500 this.hooks.runAction('action:video-watch.video.loaded', 'video-watch') 511 this.hooks.runAction('action:video-watch.video.loaded', 'video-watch')
501 } 512 }
502 513
514 private autoplayNext () {
515 if (this.nextVideoUuid) {
516 this.router.navigate([ '/videos/watch', this.nextVideoUuid ])
517 }
518 }
519
503 private setRating (nextRating: UserVideoRateType) { 520 private setRating (nextRating: UserVideoRateType) {
504 const ratingMethods: { [id in UserVideoRateType]: (id: number) => Observable<any> } = { 521 const ratingMethods: { [id in UserVideoRateType]: (id: number) => Observable<any> } = {
505 like: this.videoService.setVideoLike, 522 like: this.videoService.setVideoLike,