- console.error('Cannot get params from URL.', err)
- }
- }
-
- private async loadAllPlaylistVideos (playlistId: string, baseResult: ResultList<VideoPlaylistElement>) {
- let elements = baseResult.data
- let total = baseResult.total
- let i = 0
-
- while (total > elements.length && i < 10) {
- const result = await this.loadPlaylistElements(playlistId, elements.length)
-
- const json = await result.json() as ResultList<VideoPlaylistElement>
- total = json.total
-
- elements = elements.concat(json.data)
- i++
- }
-
- if (i === 10) {
- console.error('Cannot fetch all playlists elements, there are too many!')
- }
-
- return elements
- }
-
- private async loadPlaylist (playlistId: string) {
- const playlistPromise = this.loadPlaylistInfo(playlistId)
- const playlistElementsPromise = this.loadPlaylistElements(playlistId)
-
- let playlistResponse: Response
- let isResponseOk: boolean
-
- try {
- playlistResponse = await playlistPromise
- isResponseOk = playlistResponse.status === HttpStatusCode.OK_200
- } catch (err) {
- console.error(err)
- isResponseOk = false
- }
-
- if (!isResponseOk) {
- const serverTranslations = await this.translationsPromise
-
- if (playlistResponse?.status === HttpStatusCode.NOT_FOUND_404) {
- this.playlistNotFound(serverTranslations)
- return undefined
- }
-
- this.playlistFetchError(serverTranslations)
- return undefined
- }
-
- return { playlistResponse, videosResponse: await playlistElementsPromise }
- }
-
- private async loadVideo (videoId: string) {
- const videoPromise = this.loadVideoInfo(videoId)
-
- let videoResponse: Response
- let isResponseOk: boolean
-
- try {
- videoResponse = await videoPromise
- isResponseOk = videoResponse.status === HttpStatusCode.OK_200
- } catch (err) {
- console.error(err)
-
- isResponseOk = false
- }
-
- if (!isResponseOk) {
- const serverTranslations = await this.translationsPromise
-
- if (videoResponse?.status === HttpStatusCode.NOT_FOUND_404) {
- this.videoNotFound(serverTranslations)
- return undefined
- }
-
- this.videoFetchError(serverTranslations)
- return undefined
- }
-
- const captionsPromise = this.loadVideoCaptions(videoId)
-
- return { captionsPromise, videoResponse }
- }
-
- private async buildPlaylistManager () {
- const translations = await this.translationsPromise
-
- this.player.upnext({
- timeout: 10000, // 10s
- headText: peertubeTranslate('Up Next', translations),
- cancelText: peertubeTranslate('Cancel', translations),
- suspendedText: peertubeTranslate('Autoplay is suspended', translations),
- getTitle: () => this.nextVideoTitle(),
- next: () => this.playNextVideo(),
- condition: () => !!this.getNextPlaylistElement(),
- suspended: () => false
- })
- }
-
- private async loadVideoAndBuildPlayer (uuid: string) {
- const res = await this.loadVideo(uuid)
- if (res === undefined) return
-
- return this.buildVideoPlayer(res.videoResponse, res.captionsPromise)
- }
-
- private nextVideoTitle () {
- const next = this.getNextPlaylistElement()
- if (!next) return ''
-
- return next.video.name
- }
-
- private getNextPlaylistElement (position?: number): VideoPlaylistElement {
- if (!position) position = this.currentPlaylistElement.position + 1
-
- if (position > this.playlist.videosLength) {
- return undefined