From ed4c3c091009f85dd5e2775087b33ebd7f22ffd2 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 1 Oct 2018 08:51:26 +0200 Subject: [PATCH] Update captions in sequence to avoid concurrence issues --- .../video-caption/video-caption.service.ts | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/client/src/app/shared/video-caption/video-caption.service.ts b/client/src/app/shared/video-caption/video-caption.service.ts index a1838ab16..977f6253a 100644 --- a/client/src/app/shared/video-caption/video-caption.service.ts +++ b/client/src/app/shared/video-caption/video-caption.service.ts @@ -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[] = [] + 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 } } -- 2.25.1