]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/account/account-videos/account-videos.component.ts
Fix lint
[github/Chocobozzz/PeerTube.git] / client / src / app / account / account-videos / account-videos.component.ts
index 5f12cfce0c270cfa51d5a21ca72c856b6de4ae5f..2664d59d8fe2e3d3989cec74211cad2d038d262e 100644 (file)
@@ -1,9 +1,12 @@
-import { Component, OnInit } from '@angular/core'
+import { Component, OnInit, OnDestroy } from '@angular/core'
 import { ActivatedRoute, Router } from '@angular/router'
+import { immutableAssign } from '@app/shared/misc/utils'
+import { ComponentPagination } from '@app/shared/rest/component-pagination.model'
 import { NotificationsService } from 'angular2-notifications'
 import 'rxjs/add/observable/from'
 import 'rxjs/add/operator/concatAll'
 import { Observable } from 'rxjs/Observable'
+import { AuthService } from '../../core/auth'
 import { ConfirmService } from '../../core/confirm'
 import { AbstractVideoList } from '../../shared/video/abstract-video-list'
 import { Video } from '../../shared/video/video.model'
@@ -14,13 +17,22 @@ import { VideoService } from '../../shared/video/video.service'
   templateUrl: './account-videos.component.html',
   styleUrls: [ './account-videos.component.scss' ]
 })
-export class AccountVideosComponent extends AbstractVideoList implements OnInit {
+export class AccountVideosComponent extends AbstractVideoList implements OnInit, OnDestroy {
   titlePage = 'My videos'
   currentRoute = '/account/videos'
   checkedVideos: { [ id: number ]: boolean } = {}
+  pagination: ComponentPagination = {
+    currentPage: 1,
+    itemsPerPage: 5,
+    totalItems: null
+  }
+
+  protected baseVideoWidth = -1
+  protected baseVideoHeight = 155
 
   constructor (protected router: Router,
                protected route: ActivatedRoute,
+               protected authService: AuthService,
                protected notificationsService: NotificationsService,
                protected confirmService: ConfirmService,
                private videoService: VideoService) {
@@ -31,6 +43,10 @@ export class AccountVideosComponent extends AbstractVideoList implements OnInit
     super.ngOnInit()
   }
 
+  ngOnDestroy () {
+    super.ngOnDestroy()
+  }
+
   abortSelectionMode () {
     this.checkedVideos = {}
   }
@@ -39,59 +55,71 @@ export class AccountVideosComponent extends AbstractVideoList implements OnInit
     return Object.keys(this.checkedVideos).some(k => this.checkedVideos[k] === true)
   }
 
-  getVideosObservable () {
-    return this.videoService.getMyVideos(this.pagination, this.sort)
+  getVideosObservable (page: number) {
+    const newPagination = immutableAssign(this.pagination, { currentPage: page })
+
+    return this.videoService.getMyVideos(newPagination, this.sort)
   }
 
-  deleteSelectedVideos () {
+  async deleteSelectedVideos () {
     const toDeleteVideosIds = Object.keys(this.checkedVideos)
       .filter(k => this.checkedVideos[k] === true)
       .map(k => parseInt(k, 10))
 
-    this.confirmService.confirm(`Do you really want to delete ${toDeleteVideosIds.length} videos?`, 'Delete').subscribe(
-      res => {
-        if (res === false) return
+    const res = await this.confirmService.confirm(`Do you really want to delete ${toDeleteVideosIds.length} videos?`, 'Delete')
+    if (res === false) return
 
-        const observables: Observable<any>[] = []
-        for (const videoId of toDeleteVideosIds) {
-          const o = this.videoService
-            .removeVideo(videoId)
-            .do(() => this.spliceVideosById(videoId))
+    const observables: Observable<any>[] = []
+    for (const videoId of toDeleteVideosIds) {
+      const o = this.videoService
+        .removeVideo(videoId)
+        .do(() => this.spliceVideosById(videoId))
 
-          observables.push(o)
-        }
+      observables.push(o)
+    }
 
-        Observable.from(observables)
-          .concatAll()
-          .subscribe(
-            res => this.notificationsService.success('Success', `${toDeleteVideosIds.length} videos deleted.`),
+    Observable.from(observables)
+      .concatAll()
+      .subscribe(
+        res => {
+          this.notificationsService.success('Success', `${toDeleteVideosIds.length} videos deleted.`)
+          this.buildVideoPages()
+        },
 
-          err => this.notificationsService.error('Error', err.text)
-          )
-      }
-    )
+        err => this.notificationsService.error('Error', err.message)
+      )
   }
 
-  deleteVideo (video: Video) {
-    this.confirmService.confirm(`Do you really want to delete ${video.name}?`, 'Delete').subscribe(
-      res => {
-        if (res === false) return
+  async deleteVideo (video: Video) {
+    const res = await this.confirmService.confirm(`Do you really want to delete ${video.name}?`, 'Delete')
+    if (res === false) return
 
-        this.videoService.removeVideo(video.id)
-          .subscribe(
-            status => {
-              this.notificationsService.success('Success', `Video ${video.name} deleted.`)
-              this.spliceVideosById(video.id)
-            },
+    this.videoService.removeVideo(video.id)
+      .subscribe(
+        status => {
+          this.notificationsService.success('Success', `Video ${video.name} deleted.`)
+          this.spliceVideosById(video.id)
+          this.buildVideoPages()
+        },
 
-            error => this.notificationsService.error('Error', error.text)
-          )
-      }
-    )
+        error => this.notificationsService.error('Error', error.message)
+      )
+  }
+
+  protected buildVideoHeight () {
+    // In account videos, the video height is fixed
+    return this.baseVideoHeight
   }
 
   private spliceVideosById (id: number) {
-    const index = this.videos.findIndex(v => v.id === id)
-    this.videos.splice(index, 1)
+    for (const key of Object.keys(this.loadedPages)) {
+      const videos = this.loadedPages[key]
+      const index = videos.findIndex(v => v.id === id)
+
+      if (index !== -1) {
+        videos.splice(index, 1)
+        return
+      }
+    }
   }
 }