]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Fix find in bulk
authorChocobozzz <me@florianbigard.com>
Mon, 18 Oct 2021 09:44:54 +0000 (11:44 +0200)
committerChocobozzz <me@florianbigard.com>
Mon, 18 Oct 2021 09:44:54 +0000 (11:44 +0200)
client/src/app/helpers/rxjs.ts
client/src/app/shared/shared-search/find-in-bulk.service.ts
client/src/app/shared/shared-user-subscription/user-subscription.service.ts
client/src/app/shared/shared-video-playlist/video-playlist.service.ts

index 625bca0f7d6231daf75e312670af3c5de14655cd..2eaf0a055436be938ae2cffee67276401f1dfdd8 100644 (file)
@@ -2,10 +2,10 @@ import { uniq } from 'lodash-es'
 import { Observable } from 'rxjs'
 import { bufferTime, distinctUntilChanged, filter, map, share, switchMap } from 'rxjs/operators'
 
-function buildBulkObservable <T extends number | string, R> (options: {
-  notifierObservable: Observable<T>
+function buildBulkObservable <P extends number | string, R> (options: {
+  notifierObservable: Observable<P>
   time: number
-  bulkGet: (params: T[]) => Observable<R>
+  bulkGet: (params: P[]) => Observable<R>
 }) {
   const { notifierObservable, time, bulkGet } = options
 
@@ -14,7 +14,10 @@ function buildBulkObservable <T extends number | string, R> (options: {
     bufferTime(time),
     filter(params => params.length !== 0),
     map(params => uniq(params)),
-    switchMap(params => bulkGet(params)),
+    switchMap(params => {
+      return bulkGet(params)
+        .pipe(map(response => ({ params, response })))
+    }),
     share()
   )
 }
index 6d77941d3cccd19feb6cd11b767b440d6b1b539c..30cddc1544deee75cc7919c9ae9132625e3a2dc2 100644 (file)
@@ -1,6 +1,6 @@
 import * as debug from 'debug'
 import { Observable, Subject } from 'rxjs'
-import { first, map } from 'rxjs/operators'
+import { filter, first, map } from 'rxjs/operators'
 import { Injectable } from '@angular/core'
 import { buildBulkObservable } from '@app/helpers'
 import { ResultList } from '@shared/models/common'
@@ -12,7 +12,7 @@ const logger = debug('peertube:search:FindInBulkService')
 
 type BulkObservables <P extends number | string, R> = {
   notifier: Subject<P>
-  result: Observable<R>
+  result: Observable<{ params: P[], response: R }>
 }
 
 @Injectable()
@@ -70,8 +70,9 @@ export class FindInBulkService {
     return new Observable<R>(obs => {
       observableObject.result
         .pipe(
+          filter(result => result.params.includes(param)),
           first(),
-          map(({ data }) => data),
+          map(result => result.response.data),
           map(data => data.find(finder))
         )
         .subscribe(result => {
@@ -105,8 +106,8 @@ export class FindInBulkService {
     return this.searchService.searchVideoPlaylists({ uuids })
   }
 
-  private buildBulkObservableObject <T extends number | string, R> (bulkGet: (params: T[]) => Observable<R>) {
-    const notifier = new Subject<T>()
+  private buildBulkObservableObject <P extends number | string, R> (bulkGet: (params: P[]) => Observable<R>) {
+    const notifier = new Subject<P>()
 
     return {
       notifier,
index 8d2de81739056c558752a10d301db87dd435fdb9..f289fb6cff240726374e5f473d79c3f6c2811fa4 100644 (file)
@@ -37,7 +37,7 @@ export class UserSubscriptionService {
         time: 500,
         notifierObservable: this.existsSubject,
         bulkGet: this.doSubscriptionsExist.bind(this)
-      }),
+      }).pipe(map(r => r.response)),
 
       this.myAccountSubscriptionCacheSubject
     )
index 02632c9eb9aee60873c429b9d206b4bcbc5d7d63..fc291329ad5ecb8a72879a54ed506eb1fd289644 100644 (file)
@@ -54,7 +54,7 @@ export class VideoPlaylistService {
         time: 500,
         bulkGet: this.doVideosExistInPlaylist.bind(this),
         notifierObservable: this.videoExistsInPlaylistNotifier
-      }),
+      }).pipe(map(({ response }) => response)),
 
       this.videoExistsInPlaylistCacheSubject
     )