]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Fix no other videos displayed on some videos
authorChocobozzz <me@florianbigard.com>
Fri, 28 Sep 2018 12:51:30 +0000 (14:51 +0200)
committerChocobozzz <me@florianbigard.com>
Fri, 28 Sep 2018 12:51:30 +0000 (14:51 +0200)
client/src/app/videos/recommendations/recent-videos-recommendation.service.ts
client/src/app/videos/recommendations/recommendations.service.ts
client/src/app/videos/recommendations/recommended-videos.component.html

index 59acf17bcc99c5620427a5610eccf2692fd4ff8d..6d7b159dad90e1cc13952a65f2979f690cbe2a4a 100644 (file)
@@ -3,8 +3,8 @@ import { RecommendationService } from '@app/videos/recommendations/recommendatio
 import { Video } from '@app/shared/video/video.model'
 import { RecommendationInfo } from '@app/shared/video/recommendation-info.model'
 import { VideoService } from '@app/shared/video/video.service'
-import { map } from 'rxjs/operators'
-import { Observable } from 'rxjs'
+import { map, switchMap } from 'rxjs/operators'
+import { Observable, of } from 'rxjs'
 import { SearchService } from '@app/search/search.service'
 import { AdvancedSearch } from '@app/search/advanced-search.model'
 
@@ -13,7 +13,6 @@ import { AdvancedSearch } from '@app/search/advanced-search.model'
  */
 @Injectable()
 export class RecentVideosRecommendationService implements RecommendationService {
-
   readonly pageSize = 5
 
   constructor (
@@ -32,24 +31,22 @@ export class RecentVideosRecommendationService implements RecommendationService
   }
 
   private fetchPage (page: number, recommendation: RecommendationInfo): Observable<Video[]> {
-    let pagination = { currentPage: page, itemsPerPage: this.pageSize + 1 }
-    if (!recommendation.tags) {
-      return this.videos.getVideos(pagination, '-createdAt')
-        .pipe(
-          map(v => v.videos)
-        )
-    }
-    if (recommendation.tags.length === 0) {
-      return this.videos.getVideos(pagination, '-createdAt')
-        .pipe(
-          map(v => v.videos)
-        )
-    }
+    const pagination = { currentPage: page, itemsPerPage: this.pageSize + 1 }
+    const defaultSubscription = this.videos.getVideos(pagination, '-createdAt')
+                                    .pipe(map(v => v.videos))
+
+    if (!recommendation.tags || recommendation.tags.length === 0) return defaultSubscription
+
     return this.searchService.searchVideos('',
       pagination,
       new AdvancedSearch({ tagsOneOf: recommendation.tags.join(','), sort: '-createdAt' })
     ).pipe(
-      map(v => v.videos)
+      map(v => v.videos),
+      switchMap(videos => {
+        if (videos.length <= 1) return defaultSubscription
+
+        return of(videos)
+      })
     )
   }
 }
index 114a808b5197c193a70b00d4b0534fcc650c9396..a547e289d6aace7c14f2d9f4235047aa8974364e 100644 (file)
@@ -2,8 +2,6 @@ import { Video } from '@app/shared/video/video.model'
 import { RecommendationInfo } from '@app/shared/video/recommendation-info.model'
 import { Observable } from 'rxjs'
 
-export type UUID = string
-
 export interface RecommendationService {
   getRecommendations (recommendation: RecommendationInfo): Observable<Video[]>
 }
index 7cfaffec23d0cb90bae02f00296b37b173f4b0d7..73f9f0fe113d0097ea6d3ff456893ce5f6017f51 100644 (file)
@@ -1,11 +1,9 @@
-<div class="other-videos">
+<div *ngIf="hasVideos$ | async" class="other-videos">
     <div i18n class="title-page title-page-single">
         Other videos
     </div>
 
-    <ng-container *ngIf="hasVideos$ | async">
-        <div *ngFor="let video of (videos$ | async)">
-            <my-video-miniature [video]="video" [user]="user"></my-video-miniature>
-        </div>
-    </ng-container>
+    <div *ngFor="let video of (videos$ | async)">
+        <my-video-miniature [video]="video" [user]="user"></my-video-miniature>
+    </div>
 </div>