]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Prevent multiple sha requests
authorChocobozzz <me@florianbigard.com>
Thu, 13 Jul 2023 08:06:28 +0000 (10:06 +0200)
committerChocobozzz <me@florianbigard.com>
Mon, 17 Jul 2023 09:31:46 +0000 (11:31 +0200)
client/src/assets/player/shared/p2p-media-loader/segment-validator.ts
client/src/assets/player/shared/player-options-builder/hls-options-builder.ts

index a2f7e676d1b7d4c5962c2c2196ed98925566fc0c..9cb6344a9c70be935a1c8e4f21cdbdc93ceacf50 100644 (file)
@@ -15,6 +15,8 @@ export class SegmentValidator {
 
   private destroyed = false
 
+  private segmentJSONPromise: Promise<SegmentsJSON>
+
   constructor (private readonly options: {
     serverUrl: string
     segmentsSha256Url: string
@@ -23,15 +25,16 @@ export class SegmentValidator {
     requiresPassword: boolean
     videoPassword: () => string
   }) {
-
   }
 
   async validate (segment: Segment, _method: string, _peerId: string, retry = 1) {
     if (this.destroyed) return
 
+    this.loadSha256SegmentsPromiseIfNeeded()
+
     const filename = basename(removeQueryParams(segment.url))
 
-    const segmentValue = (await this.fetchSha256Segments())[filename]
+    const segmentValue = (await this.segmentJSONPromise)[filename]
 
     if (!segmentValue && retry > maxRetries) {
       throw new Error(`Unknown segment name ${filename} in segment validator`)
@@ -42,6 +45,8 @@ export class SegmentValidator {
 
       await wait(500)
 
+      this.loadSha256SegmentsPromise()
+
       await this.validate(segment, _method, _peerId, retry + 1)
 
       return
@@ -76,6 +81,16 @@ export class SegmentValidator {
     this.destroyed = true
   }
 
+  private loadSha256SegmentsPromiseIfNeeded () {
+    if (this.segmentJSONPromise) return
+
+    this.loadSha256SegmentsPromise()
+  }
+
+  private loadSha256SegmentsPromise () {
+    this.segmentJSONPromise = this.fetchSha256Segments()
+  }
+
   private fetchSha256Segments (): Promise<SegmentsJSON> {
     let headers: { [ id: string ]: string } = {}
 
index 10df2db5d0d4214fb9f527f79f8ffa1925df6a2a..1658f776cc8b5120bcd52c03e3d11a9613bb1db2 100644 (file)
@@ -108,7 +108,6 @@ export class HLSOptionsBuilder {
           if (!isSameOrigin(this.options.serverUrl, url)) return
 
           if (requiresPassword) xhr.setRequestHeader('x-peertube-video-password', this.options.videoPassword())
-
           else xhr.setRequestHeader('Authorization', this.options.authorizationHeader())
         },