X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=shared%2Fserver-commands%2Fvideos%2Fstreaming-playlists-command.ts;h=950808b6009912b6e0516ef07c9abe493b174105;hb=5170f492b95dc81b75230312411c5fdb0019eed2;hp=5d40d35cb9e06b1d0d90cb0ba0c14a39edaf177d;hpb=bf54587a3e2ad9c2c186828f2a5682b91ee2cc00;p=github%2FChocobozzz%2FPeerTube.git diff --git a/shared/server-commands/videos/streaming-playlists-command.ts b/shared/server-commands/videos/streaming-playlists-command.ts index 5d40d35cb..950808b60 100644 --- a/shared/server-commands/videos/streaming-playlists-command.ts +++ b/shared/server-commands/videos/streaming-playlists-command.ts @@ -1,44 +1,114 @@ +import { wait } from '@shared/core-utils' import { HttpStatusCode } from '@shared/models' -import { unwrapBody, unwrapTextOrDecode, unwrapBodyOrDecodeToJSON } from '../requests' +import { unwrapBody, unwrapBodyOrDecodeToJSON, unwrapTextOrDecode } from '../requests' import { AbstractCommand, OverrideCommandOptions } from '../shared' export class StreamingPlaylistsCommand extends AbstractCommand { - get (options: OverrideCommandOptions & { + async get (options: OverrideCommandOptions & { url: string - }) { - return unwrapTextOrDecode(this.getRawRequest({ - ...options, - url: options.url, - implicitToken: false, - defaultExpectedStatus: HttpStatusCode.OK_200 - })) + videoFileToken?: string + reinjectVideoFileToken?: boolean + + withRetry?: boolean // default false + currentRetry?: number + }): Promise { + const { videoFileToken, reinjectVideoFileToken, withRetry, currentRetry = 1 } = options + + try { + const result = await unwrapTextOrDecode(this.getRawRequest({ + ...options, + + url: options.url, + query: { + videoFileToken, + reinjectVideoFileToken + }, + implicitToken: false, + defaultExpectedStatus: HttpStatusCode.OK_200 + })) + + return result + } catch (err) { + if (!withRetry || currentRetry > 5) throw err + + await wait(100) + + return this.get({ + ...options, + + withRetry, + currentRetry: currentRetry + 1 + }) + } } - getSegment (options: OverrideCommandOptions & { + async getFragmentedSegment (options: OverrideCommandOptions & { url: string range?: string + + withRetry?: boolean // default false + currentRetry?: number }) { - return unwrapBody(this.getRawRequest({ - ...options, - - url: options.url, - range: options.range, - implicitToken: false, - defaultExpectedStatus: HttpStatusCode.OK_200 - })) + const { withRetry, currentRetry = 1 } = options + + try { + const result = await unwrapBody(this.getRawRequest({ + ...options, + + url: options.url, + range: options.range, + implicitToken: false, + responseType: 'application/octet-stream', + defaultExpectedStatus: HttpStatusCode.OK_200 + })) + + return result + } catch (err) { + if (!withRetry || currentRetry > 5) throw err + + await wait(100) + + return this.getFragmentedSegment({ + ...options, + + withRetry, + currentRetry: currentRetry + 1 + }) + } } - getSegmentSha256 (options: OverrideCommandOptions & { + async getSegmentSha256 (options: OverrideCommandOptions & { url: string + + withRetry?: boolean // default false + currentRetry?: number }) { - return unwrapBodyOrDecodeToJSON<{ [ id: string ]: string }>(this.getRawRequest({ - ...options, + const { withRetry, currentRetry = 1 } = options + + try { + const result = await unwrapBodyOrDecodeToJSON<{ [ id: string ]: string }>(this.getRawRequest({ + ...options, + + url: options.url, + contentType: 'application/json', + implicitToken: false, + defaultExpectedStatus: HttpStatusCode.OK_200 + })) + + return result + } catch (err) { + if (!withRetry || currentRetry > 5) throw err + + await wait(100) + + return this.getSegmentSha256({ + ...options, - url: options.url, - implicitToken: false, - defaultExpectedStatus: HttpStatusCode.OK_200 - })) + withRetry, + currentRetry: currentRetry + 1 + }) + } } }