]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - shared/server-commands/videos/streaming-playlists-command.ts
Merge branch 'release/4.3.0' into develop
[github/Chocobozzz/PeerTube.git] / shared / server-commands / videos / streaming-playlists-command.ts
index 5d40d35cb9e06b1d0d90cb0ba0c14a39edaf177d..25e446e729b2c55c3a65c0d5536114286454d6de 100644 (file)
@@ -1,22 +1,42 @@
+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
+    withRetry?: boolean // default false
+    currentRetry?: number
   }) {
-    return unwrapTextOrDecode(this.getRawRequest({
-      ...options,
+    const { withRetry, currentRetry = 1 } = options
 
-      url: options.url,
-      implicitToken: false,
-      defaultExpectedStatus: HttpStatusCode.OK_200
-    }))
+    try {
+      const result = await unwrapTextOrDecode(this.getRawRequest({
+        ...options,
+
+        url: options.url,
+        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 & {
+  getFragmentedSegment (options: OverrideCommandOptions & {
     url: string
     range?: string
   }) {