X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fshared%2Fvideo-playlist%2Fvideo-playlist.service.ts;h=bae6f9e04f24c93f56ebc3eef5eae956962f7c29;hb=44d4ee4fcb7cf8beebac73f85693c09919b91e66;hp=fc5eb5337e518a8278747acfee6a2988cbca9bf2;hpb=89566f77fd938cf8b0a617d5d2df4ca718242372;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/shared/video-playlist/video-playlist.service.ts b/client/src/app/shared/video-playlist/video-playlist.service.ts index fc5eb5337..bae6f9e04 100644 --- a/client/src/app/shared/video-playlist/video-playlist.service.ts +++ b/client/src/app/shared/video-playlist/video-playlist.service.ts @@ -1,6 +1,6 @@ -import { bufferTime, catchError, filter, map, share, switchMap, tap } from 'rxjs/operators' -import { Injectable } from '@angular/core' -import { merge, Observable, of, ReplaySubject, Subject } from 'rxjs' +import { bufferTime, catchError, filter, map, observeOn, share, switchMap, tap } from 'rxjs/operators' +import { Injectable, NgZone } from '@angular/core' +import { asyncScheduler, merge, Observable, of, ReplaySubject, Subject } from 'rxjs' import { RestExtractor } from '../rest/rest-extractor.service' import { HttpClient, HttpParams } from '@angular/common/http' import { ResultList, VideoPlaylistElementCreate, VideoPlaylistElementUpdate } from '../../../../../shared' @@ -23,6 +23,7 @@ import { VideoPlaylistElement as ServerVideoPlaylistElement } from '@shared/mode import { VideoPlaylistElement } from '@app/shared/video-playlist/video-playlist-element.model' import { uniq } from 'lodash-es' import * as debug from 'debug' +import { enterZone, leaveZone } from '@app/shared/rxjs/zone' const logger = debug('peertube:playlists:VideoPlaylistService') @@ -49,13 +50,16 @@ export class VideoPlaylistService { private authHttp: HttpClient, private serverService: ServerService, private restExtractor: RestExtractor, - private restService: RestService + private restService: RestService, + private ngZone: NgZone ) { this.videoExistsInPlaylistObservable = merge( this.videoExistsInPlaylistNotifier.pipe( - bufferTime(500), + // We leave Angular zone so Protractor does not get stuck + bufferTime(500, leaveZone(this.ngZone, asyncScheduler)), filter(videoIds => videoIds.length !== 0), map(videoIds => uniq(videoIds)), + observeOn(enterZone(this.ngZone, asyncScheduler)), switchMap(videoIds => this.doVideosExistInPlaylist(videoIds)), share() ),