]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Update captions in sequence to avoid concurrence issues
authorChocobozzz <me@florianbigard.com>
Mon, 1 Oct 2018 06:51:26 +0000 (08:51 +0200)
committerChocobozzz <me@florianbigard.com>
Mon, 1 Oct 2018 06:54:58 +0000 (08:54 +0200)
client/src/app/shared/video-caption/video-caption.service.ts

index a1838ab16219a0311afcac253ffeee6d3977bee6..977f6253ab4e4f4ff78a4456ca41bf408ead5cef 100644 (file)
@@ -1,7 +1,7 @@
 import { catchError, map, switchMap } from 'rxjs/operators'
 import { HttpClient } from '@angular/common/http'
 import { Injectable } from '@angular/core'
-import { forkJoin, Observable, of } from 'rxjs'
+import { Observable, of } from 'rxjs'
 import { peertubeTranslate, ResultList } from '../../../../../shared'
 import { RestExtractor } from '../rest'
 import { VideoService } from '@app/shared/video/video.service'
@@ -61,22 +61,16 @@ export class VideoCaptionService {
   }
 
   updateCaptions (videoId: number | string, videoCaptions: VideoCaptionEdit[]) {
-    const observables: Observable<any>[] = []
+    let obs = of(true)
 
     for (const videoCaption of videoCaptions) {
       if (videoCaption.action === 'CREATE') {
-        observables.push(
-          this.addCaption(videoId, videoCaption.language.id, videoCaption.captionfile)
-        )
+        obs = obs.pipe(switchMap(() => this.addCaption(videoId, videoCaption.language.id, videoCaption.captionfile)))
       } else if (videoCaption.action === 'REMOVE') {
-        observables.push(
-          this.removeCaption(videoId, videoCaption.language.id)
-        )
+        obs = obs.pipe(switchMap(() => this.removeCaption(videoId, videoCaption.language.id)))
       }
     }
 
-    if (observables.length === 0) return of(undefined)
-
-    return forkJoin(observables)
+    return obs
   }
 }