]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - shared/server-commands/videos/streaming-playlists-command.ts
Increase request retry interval
[github/Chocobozzz/PeerTube.git] / shared / server-commands / videos / streaming-playlists-command.ts
index 25e446e729b2c55c3a65c0d5536114286454d6de..87aacc5f69ff2969d67c656ea644b9a4186a9e94 100644 (file)
@@ -7,25 +7,33 @@ export class StreamingPlaylistsCommand extends AbstractCommand {
 
   async get (options: OverrideCommandOptions & {
     url: string
+
+    videoFileToken?: string
+    reinjectVideoFileToken?: boolean
+
     withRetry?: boolean // default false
     currentRetry?: number
-  }) {
-    const { withRetry, currentRetry = 1 } = options
+  }): Promise<string> {
+    const { videoFileToken, reinjectVideoFileToken, withRetry = false, 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
+      if (!withRetry || currentRetry > 10) throw err
 
-      await wait(100)
+      await wait(250)
 
       return this.get({
         ...options,
@@ -36,29 +44,71 @@ export class StreamingPlaylistsCommand extends AbstractCommand {
     }
   }
 
-  getFragmentedSegment (options: OverrideCommandOptions & {
+  async getFragmentedSegment (options: OverrideCommandOptions & {
     url: string
     range?: string
+
+    withRetry?: boolean // default false
+    currentRetry?: number
   }) {
-    return unwrapBody<Buffer>(this.getRawRequest({
-      ...options,
-
-      url: options.url,
-      range: options.range,
-      implicitToken: false,
-      defaultExpectedStatus: HttpStatusCode.OK_200
-    }))
+    const { withRetry = false, currentRetry = 1 } = options
+
+    try {
+      const result = await unwrapBody<Buffer>(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 > 10) throw err
+
+      await wait(250)
+
+      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 = false, currentRetry = 1 } = options
+
+    try {
+      const result = await unwrapBodyOrDecodeToJSON<{ [ id: string ]: string }>(this.getRawRequest({
+        ...options,
 
-      url: options.url,
-      implicitToken: false,
-      defaultExpectedStatus: HttpStatusCode.OK_200
-    }))
+        url: options.url,
+        contentType: 'application/json',
+        implicitToken: false,
+        defaultExpectedStatus: HttpStatusCode.OK_200
+      }))
+
+      return result
+    } catch (err) {
+      if (!withRetry || currentRetry > 10) throw err
+
+      await wait(250)
+
+      return this.getSegmentSha256({
+        ...options,
+
+        withRetry,
+        currentRetry: currentRetry + 1
+      })
+    }
   }
 }