X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2F%2Bvideos%2F%2Bvideo-watch%2Fvideo-watch-playlist.component.ts;h=0a4d6bfd11c66d2dd6a9e0852a28a182b332e167;hb=b1ed448e948211a59ab110c9d4c7c2e82819645e;hp=cc908b924ecacfa4e5cd3a57ffa04fe19410d58f;hpb=33d21a9b47b983ee7a5c5ba6d8a416c35fe66cf9;p=github%2FChocobozzz%2FPeerTube.git 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 cc908b924..0a4d6bfd1 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 @@ -118,6 +118,9 @@ export class VideoWatchPlaylistComponent { updatePlaylistIndex (position: number) { if (this.playlistElements.length === 0 || !position) return + // Handle the reverse index + if (position < 0) position = this.playlist.videosLength + position + 1 + for (const playlistElement of this.playlistElements) { // >= if the previous videos were not valid if (playlistElement.video && playlistElement.position >= position) { @@ -137,26 +140,8 @@ export class VideoWatchPlaylistComponent { this.onPlaylistVideosNearOfBottom(position) } - findPreviousPlaylistVideo (position = this.currentPlaylistPosition): VideoPlaylistElement { - if (this.currentPlaylistPosition <= 1) { - // we have reached the top of the playlist: either loop or stop - if (this.loopPlaylist) { - this.currentPlaylistPosition = position = this.playlistPagination.totalItems - } else { - return - } - } - const previous = this.playlistElements.find(e => e.position === position) - - if (!previous || !previous.video) { - return this.findPreviousPlaylistVideo(position - 1) - } - - return previous - } - navigateToPreviousPlaylistVideo () { - const previous = this.findPreviousPlaylistVideo(this.currentPlaylistPosition - 1) + const previous = this.findPlaylistVideo(this.currentPlaylistPosition - 1, 'previous') if (!previous) return const start = previous.startTimestamp @@ -164,27 +149,32 @@ export class VideoWatchPlaylistComponent { this.router.navigate([],{ queryParams: { playlistPosition: previous.position, start, stop } }) } - findNextPlaylistVideo (position = this.currentPlaylistPosition): VideoPlaylistElement { - if (this.currentPlaylistPosition >= this.playlistPagination.totalItems) { - // we have reached the end of the playlist: either loop or stop - if (this.loopPlaylist) { - this.currentPlaylistPosition = position = 0 - } else { - return - } + findPlaylistVideo (position: number, type: 'previous' | 'next'): VideoPlaylistElement { + if ( + (type === 'next' && position > this.playlistPagination.totalItems) || + (type === 'previous' && position < 1) + ) { + // End of the playlist: end the recursion if we're not in the loop mode + if (!this.loopPlaylist) return + + // Loop mode + position = type === 'previous' + ? this.playlistPagination.totalItems + : 1 } - const next = this.playlistElements.find(e => e.position === position) + const found = this.playlistElements.find(e => e.position === position) + if (found && found.video) return found - if (!next || !next.video) { - return this.findNextPlaylistVideo(position + 1) - } + const newPosition = type === 'previous' + ? position - 1 + : position + 1 - return next + return this.findPlaylistVideo(newPosition, type) } navigateToNextPlaylistVideo () { - const next = this.findNextPlaylistVideo(this.currentPlaylistPosition + 1) + const next = this.findPlaylistVideo(this.currentPlaylistPosition + 1, 'next') if (!next) return const start = next.startTimestamp