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) {
this.onPlaylistVideosNearOfBottom(position)
}
- 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
- }
- }
+ navigateToPreviousPlaylistVideo () {
+ const previous = this.findPlaylistVideo(this.currentPlaylistPosition - 1, 'previous')
+ if (!previous) return
- const next = this.playlistElements.find(e => e.position === position)
+ const start = previous.startTimestamp
+ const stop = previous.stopTimestamp
+ this.router.navigate([],{ queryParams: { playlistPosition: previous.position, start, stop } })
+ }
+
+ 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
- if (!next || !next.video) {
- return this.findNextPlaylistVideo(position + 1)
+ // Loop mode
+ position = type === 'previous'
+ ? this.playlistPagination.totalItems
+ : 1
}
- return next
+ const found = this.playlistElements.find(e => e.position === position)
+ if (found && found.video) return found
+
+ const newPosition = type === 'previous'
+ ? position - 1
+ : position + 1
+
+ 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