]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/shared/video/abstract-video-list.ts
Search video channel handle/uri
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / video / abstract-video-list.ts
index d47df4da46c813f7f811a759eb4404dc247503b2..b8fd7f8eb21b85b289881c48bda96eb891b30aab 100644 (file)
@@ -2,7 +2,6 @@ import { debounceTime } from 'rxjs/operators'
 import { ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core'
 import { ActivatedRoute, Router } from '@angular/router'
 import { Location } from '@angular/common'
-import { isInMobileView } from '@app/shared/misc/utils'
 import { InfiniteScrollerDirective } from '@app/shared/video/infinite-scroller.directive'
 import { NotificationsService } from 'angular2-notifications'
 import { fromEvent, Observable, Subscription } from 'rxjs'
@@ -10,6 +9,9 @@ import { AuthService } from '../../core/auth'
 import { ComponentPagination } from '../rest/component-pagination.model'
 import { VideoSortField } from './sort-field.type'
 import { Video } from './video.model'
+import { I18n } from '@ngx-translate/i18n-polyfill'
+import { ScreenService } from '@app/shared/misc/screen.service'
+import { OwnerDisplayType } from '@app/shared/video/video-miniature.component'
 
 export abstract class AbstractVideoList implements OnInit, OnDestroy {
   private static LINES_PER_PAGE = 4
@@ -23,6 +25,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy {
     totalItems: null
   }
   sort: VideoSortField = '-publishedAt'
+  categoryOneOf?: number
   defaultSort: VideoSortField = '-publishedAt'
   syndicationItems = []
 
@@ -32,6 +35,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy {
   videoWidth: number
   videoHeight: number
   videoPages: Video[][] = []
+  ownerDisplayType: OwnerDisplayType = 'account'
 
   protected baseVideoWidth = 215
   protected baseVideoHeight = 230
@@ -40,11 +44,14 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy {
   protected abstract authService: AuthService
   protected abstract router: Router
   protected abstract route: ActivatedRoute
+  protected abstract screenService: ScreenService
+  protected abstract i18n: I18n
   protected abstract location: Location
   protected abstract currentRoute: string
   abstract titlePage: string
 
   protected loadedPages: { [ id: number ]: Video[] } = {}
+  protected loadingPage: { [ id: number ]: boolean } = {}
   protected otherRouteParams = {}
 
   private resizeSubscription: Subscription
@@ -95,11 +102,15 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy {
 
   loadMoreVideos (page: number) {
     if (this.loadedPages[page] !== undefined) return
+    if (this.loadingPage[page] === true) return
 
+    this.loadingPage[page] = true
     const observable = this.getVideosObservable(page)
 
     observable.subscribe(
       ({ videos, totalVideos }) => {
+        this.loadingPage[page] = false
+
         // Paging is too high, return to the first one
         if (this.pagination.currentPage > 1 && totalVideos <= ((this.pagination.currentPage - 1) * this.pagination.itemsPerPage)) {
           this.pagination.currentPage = 1
@@ -117,7 +128,10 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy {
           setTimeout(() => this.infiniteScroller.initialize(), 500)
         }
       },
-      error => this.notificationsService.error('Error', error.message)
+      error => {
+        this.loadingPage[page] = false
+        this.notificationsService.error(this.i18n('Error'), error.message)
+      }
     )
   }
 
@@ -156,7 +170,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy {
 
   protected loadRouteParams (routeParams: { [ key: string ]: any }) {
     this.sort = routeParams['sort'] as VideoSortField || this.defaultSort
-
+    this.categoryOneOf = routeParams['categoryOneOf']
     if (routeParams['page'] !== undefined) {
       this.pagination.currentPage = parseInt(routeParams['page'], 10)
     } else {
@@ -189,7 +203,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy {
   }
 
   private calcPageSizes () {
-    if (isInMobileView() || this.baseVideoWidth === -1) {
+    if (this.screenService.isInMobileView() || this.baseVideoWidth === -1) {
       this.pagination.itemsPerPage = 5
 
       // Video takes all the width