]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/assets/player/p2p-media-loader/segment-validator.ts
Fix console error when watching a video
[github/Chocobozzz/PeerTube.git] / client / src / assets / player / p2p-media-loader / segment-validator.ts
index fa6e6df1db2fd1c898534b9fdf531f465fac65db..4a0caec5e621cbb469978665513e7f513c2d5057 100644 (file)
@@ -1,27 +1,35 @@
+import { wait } from '@root-helpers/utils'
 import { Segment } from 'p2p-media-loader-core'
 import { basename } from 'path'
 
 type SegmentsJSON = { [filename: string]: string | { [byterange: string]: string } }
 
-function segmentValidatorFactory (segmentsSha256Url: string) {
+const maxRetries = 3
+
+function segmentValidatorFactory (segmentsSha256Url: string, isLive: boolean) {
   let segmentsJSON = fetchSha256Segments(segmentsSha256Url)
   const regex = /bytes=(\d+)-(\d+)/
 
-  return async function segmentValidator (segment: Segment, canRefetchSegmentHashes = true) {
+  return async function segmentValidator (segment: Segment, _method: string, _peerId: string, retry = 1) {
+    // Wait for hash generation from the server
+    if (isLive) await wait(1000)
+
     const filename = basename(segment.url)
 
     const segmentValue = (await segmentsJSON)[filename]
 
-    if (!segmentValue && !canRefetchSegmentHashes) {
+    if (!segmentValue && retry > maxRetries) {
       throw new Error(`Unknown segment name ${filename} in segment validator`)
     }
 
     if (!segmentValue) {
-      console.log('Refetching sha segments.')
+      console.log('Refetching sha segments for %s.', filename)
+
+      await wait(1000)
 
-      // Refetch
       segmentsJSON = fetchSha256Segments(segmentsSha256Url)
-      segmentValidator(segment, false)
+      await segmentValidator(segment, _method, _peerId, retry + 1)
+
       return
     }