Load all playlist elements
This commit is contained in:
parent
1a8c2d74d1
commit
fb13852d30
|
@ -143,8 +143,11 @@ export class PeerTubeEmbed {
|
||||||
return fetch(this.getPlaylistUrl(playlistId))
|
return fetch(this.getPlaylistUrl(playlistId))
|
||||||
}
|
}
|
||||||
|
|
||||||
loadPlaylistElements (playlistId: string): Promise<Response> {
|
loadPlaylistElements (playlistId: string, start = 0): Promise<Response> {
|
||||||
return fetch(this.getPlaylistUrl(playlistId) + '/videos')
|
const url = new URL(this.getPlaylistUrl(playlistId) + '/videos')
|
||||||
|
url.search = new URLSearchParams({ start: '' + start, count: '100' }).toString()
|
||||||
|
|
||||||
|
return fetch(url.toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
loadConfig (): Promise<ServerConfig> {
|
loadConfig (): Promise<ServerConfig> {
|
||||||
|
@ -257,6 +260,28 @@ export class PeerTubeEmbed {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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) {
|
private async loadPlaylist (playlistId: string) {
|
||||||
const playlistPromise = this.loadPlaylistInfo(playlistId)
|
const playlistPromise = this.loadPlaylistInfo(playlistId)
|
||||||
const playlistElementsPromise = this.loadPlaylistElements(playlistId)
|
const playlistElementsPromise = this.loadPlaylistElements(playlistId)
|
||||||
|
@ -534,7 +559,7 @@ export class PeerTubeEmbed {
|
||||||
this.playlist = await res.playlistResponse.json()
|
this.playlist = await res.playlistResponse.json()
|
||||||
|
|
||||||
const playlistElementResult = await res.videosResponse.json()
|
const playlistElementResult = await res.videosResponse.json()
|
||||||
this.playlistElements = playlistElementResult.data
|
this.playlistElements = await this.loadAllPlaylistVideos(playlistId, playlistElementResult)
|
||||||
|
|
||||||
this.currentPlaylistElement = this.playlistElements[0]
|
this.currentPlaylistElement = this.playlistElements[0]
|
||||||
videoId = this.currentPlaylistElement.video.uuid
|
videoId = this.currentPlaylistElement.video.uuid
|
||||||
|
|
Loading…
Reference in New Issue