aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/app/videos
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/app/videos')
-rw-r--r--client/src/app/videos/+video-watch/video-watch-playlist.component.ts36
-rw-r--r--client/src/app/videos/+video-watch/video-watch.component.ts43
2 files changed, 53 insertions, 26 deletions
diff --git a/client/src/app/videos/+video-watch/video-watch-playlist.component.ts b/client/src/app/videos/+video-watch/video-watch-playlist.component.ts
index c6b04fd4b..c5ed36000 100644
--- a/client/src/app/videos/+video-watch/video-watch-playlist.component.ts
+++ b/client/src/app/videos/+video-watch/video-watch-playlist.component.ts
@@ -44,11 +44,13 @@ export class VideoWatchPlaylistComponent {
44 private videoPlaylist: VideoPlaylistService, 44 private videoPlaylist: VideoPlaylistService,
45 private router: Router 45 private router: Router
46 ) { 46 ) {
47 // defaults to true
47 this.autoPlayNextVideoPlaylist = this.auth.isLoggedIn() 48 this.autoPlayNextVideoPlaylist = this.auth.isLoggedIn()
48 ? this.auth.getUser().autoPlayNextVideoPlaylist 49 ? this.auth.getUser().autoPlayNextVideoPlaylist
49 : peertubeLocalStorage.getItem(VideoWatchPlaylistComponent.LOCAL_STORAGE_AUTO_PLAY_NEXT_VIDEO_PLAYLIST) !== 'false' 50 : peertubeLocalStorage.getItem(VideoWatchPlaylistComponent.LOCAL_STORAGE_AUTO_PLAY_NEXT_VIDEO_PLAYLIST) !== 'false'
50 this.setAutoPlayNextVideoPlaylistSwitchText() 51 this.setAutoPlayNextVideoPlaylistSwitchText()
51 52
53 // defaults to false
52 this.loopPlaylist = peertubeSessionStorage.getItem(VideoWatchPlaylistComponent.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO_PLAYLIST) === 'true' 54 this.loopPlaylist = peertubeSessionStorage.getItem(VideoWatchPlaylistComponent.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO_PLAYLIST) === 'true'
53 this.setLoopPlaylistSwitchText() 55 this.setLoopPlaylistSwitchText()
54 } 56 }
@@ -127,23 +129,31 @@ export class VideoWatchPlaylistComponent {
127 this.onPlaylistVideosNearOfBottom() 129 this.onPlaylistVideosNearOfBottom()
128 } 130 }
129 131
130 navigateToNextPlaylistVideo (_next: VideoPlaylistElement = null) { 132 findNextPlaylistVideo (position = this.currentPlaylistPosition): VideoPlaylistElement {
131 if (this.currentPlaylistPosition < this.playlistPagination.totalItems) { 133 if (this.currentPlaylistPosition >= this.playlistPagination.totalItems) {
132 const next = _next || this.playlistElements.find(e => e.position === this.currentPlaylistPosition + 1) 134 // we have reached the end of the playlist: either loop or stop
133 135 if (this.loopPlaylist) {
134 if (!next || !next.video) { 136 this.currentPlaylistPosition = position = 0
135 this.currentPlaylistPosition++ 137 } else {
136 this.navigateToNextPlaylistVideo()
137 return 138 return
138 } 139 }
140 }
141
142 const next = this.playlistElements.find(e => e.position === position)
139 143
140 const start = next.startTimestamp 144 if (!next || !next.video) {
141 const stop = next.stopTimestamp 145 return this.findNextPlaylistVideo(position + 1)
142 this.router.navigate([],{ queryParams: { videoId: next.video.uuid, start, stop } })
143 } else if (this.loopPlaylist) {
144 this.currentPlaylistPosition = 0
145 this.navigateToNextPlaylistVideo(this.playlistElements.find(e => e.position === this.currentPlaylistPosition))
146 } 146 }
147
148 return next
149 }
150
151 navigateToNextPlaylistVideo () {
152 const next = this.findNextPlaylistVideo(this.currentPlaylistPosition + 1)
153 if (!next) return
154 const start = next.startTimestamp
155 const stop = next.stopTimestamp
156 this.router.navigate([],{ queryParams: { videoId: next.video.uuid, start, stop } })
147 } 157 }
148 158
149 switchAutoPlayNextVideoPlaylist () { 159 switchAutoPlayNextVideoPlaylist () {
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 aaaa63d4d..890b7996f 100644
--- a/client/src/app/videos/+video-watch/video-watch.component.ts
+++ b/client/src/app/videos/+video-watch/video-watch.component.ts
@@ -267,6 +267,20 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
267 return video.isVideoNSFWForUser(this.user, this.serverService.getConfig()) 267 return video.isVideoNSFWForUser(this.user, this.serverService.getConfig())
268 } 268 }
269 269
270 isAutoPlayEnabled () {
271 return (
272 this.user && this.user.autoPlayNextVideo ||
273 peertubeSessionStorage.getItem(RecommendedVideosComponent.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO) === 'true'
274 )
275 }
276
277 isPlaylistAutoPlayEnabled () {
278 return (
279 this.user && this.user.autoPlayNextVideoPlaylist ||
280 peertubeSessionStorage.getItem(VideoWatchPlaylistComponent.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO_PLAYLIST) === 'true'
281 )
282 }
283
270 private loadVideo (videoId: string) { 284 private loadVideo (videoId: string) {
271 // Video did not change 285 // Video did not change
272 if (this.video && this.video.uuid === videoId) return 286 if (this.video && this.video.uuid === videoId) return
@@ -436,24 +450,15 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
436 450
437 this.player.one('ended', () => { 451 this.player.one('ended', () => {
438 if (this.playlist) { 452 if (this.playlist) {
439 if ( 453 if (this.isPlaylistAutoPlayEnabled()) this.zone.run(() => this.videoWatchPlaylist.navigateToNextPlaylistVideo())
440 this.user && this.user.autoPlayNextVideoPlaylist || 454 } else if (this.isAutoPlayEnabled()) {
441 peertubeSessionStorage.getItem(VideoWatchPlaylistComponent.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO_PLAYLIST) === 'true'
442 ) this.zone.run(() => this.videoWatchPlaylist.navigateToNextPlaylistVideo())
443 } else if (
444 this.user && this.user.autoPlayNextVideo ||
445 peertubeSessionStorage.getItem(RecommendedVideosComponent.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO) === 'true'
446 ) {
447 this.zone.run(() => this.autoplayNext()) 455 this.zone.run(() => this.autoplayNext())
448 } 456 }
449 }) 457 })
450 458
451 this.player.one('stopped', () => { 459 this.player.one('stopped', () => {
452 if (this.playlist) { 460 if (this.playlist) {
453 if ( 461 if (this.isPlaylistAutoPlayEnabled()) this.zone.run(() => this.videoWatchPlaylist.navigateToNextPlaylistVideo())
454 this.user && this.user.autoPlayNextVideoPlaylist ||
455 peertubeSessionStorage.getItem(VideoWatchPlaylistComponent.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO_PLAYLIST) === 'true'
456 ) this.zone.run(() => this.videoWatchPlaylist.navigateToNextPlaylistVideo())
457 } 462 }
458 }) 463 })
459 464
@@ -568,8 +573,20 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
568 user?: AuthUser 573 user?: AuthUser
569 }) { 574 }) {
570 const { video, videoCaptions, urlOptions, user } = params 575 const { video, videoCaptions, urlOptions, user } = params
576 const getStartTime = () => {
577 const byUrl = urlOptions.startTime !== undefined
578 const byHistory = video.userHistory && !this.playlist
579
580 if (byUrl) {
581 return timeToInt(urlOptions.startTime)
582 } else if (byHistory) {
583 return video.userHistory.currentTime
584 } else {
585 return 0
586 }
587 }
571 588
572 let startTime = timeToInt(urlOptions.startTime) || (video.userHistory && !this.playlist ? video.userHistory.currentTime : 0) 589 let startTime = getStartTime()
573 // If we are at the end of the video, reset the timer 590 // If we are at the end of the video, reset the timer
574 if (video.duration - startTime <= 1) startTime = 0 591 if (video.duration - startTime <= 1) startTime = 0
575 592