diff --git a/src/components/themes/provider-theme-page.component.ts b/src/components/themes/provider-theme-page.component.ts index 0ea53a6..08d0c54 100644 --- a/src/components/themes/provider-theme-page.component.ts +++ b/src/components/themes/provider-theme-page.component.ts @@ -14,6 +14,7 @@ import { ChannelIdentityComponent } from '../../app/shared/components/channel-id import { InfiniteAnchorComponent } from '../shared/infinite-anchor/infinite-anchor.component'; import { classifyVideo, isLiveVideo, isShortVideo } from '../../app/shared/utils/video-kind'; import { map, of, switchMap, catchError, forkJoin, Observable } from 'rxjs'; +import { timeout } from 'rxjs/operators'; import { PagedResult } from '../../services/youtube-api.service'; const TWITCH_THEME_KEYWORDS: Record = { @@ -316,17 +317,27 @@ export class ProviderThemePageComponent implements OnDestroy { this.cdr.markForCheck(); }; + // Une section lente ne doit jamais bloquer les autres (forkJoin + // échoue dès qu'un appel erreur : chaque section est bornée à 25 s + // et retombe sur une page vide, le filet top-streams suit). + const bounded = (call: Observable>): Observable> => + call.pipe( + timeout(25000), + catchError(() => of({ items: [], nextCursor: null } as PagedResult