]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/videos/video-list/video-overview.component.ts
Fix anonymous nsfw policy
[github/Chocobozzz/PeerTube.git] / client / src / app / videos / video-list / video-overview.component.ts
CommitLineData
5c20a455 1import { Subject } from 'rxjs'
2d3741d6 2import { Component, OnInit } from '@angular/core'
5c20a455
C
3import { Notifier } from '@app/core'
4import { User, UserService } from '@app/shared'
5import { ScreenService } from '@app/shared/misc/screen.service'
2d3741d6 6import { OverviewService } from '@app/shared/overview'
5c20a455 7import { VideosOverview } from '@app/shared/overview/videos-overview.model'
2d3741d6
C
8import { Video } from '@app/shared/video/video.model'
9
10@Component({
11 selector: 'my-video-overview',
12 templateUrl: './video-overview.component.html',
13 styleUrls: [ './video-overview.component.scss' ]
14})
15export class VideoOverviewComponent implements OnInit {
111fdc26
C
16 onDataSubject = new Subject<any>()
17
18 overviews: VideosOverview[] = []
2d3741d6
C
19 notResults = false
20
5c20a455
C
21 userMiniature: User
22
111fdc26
C
23 private loaded = false
24 private currentPage = 1
25 private maxPage = 20
26 private lastWasEmpty = false
27 private isLoading = false
28
2d3741d6 29 constructor (
f8b2c1b4 30 private notifier: Notifier,
5c20a455 31 private userService: UserService,
6eb62c33
C
32 private overviewService: OverviewService,
33 private screenService: ScreenService
2d3741d6
C
34 ) { }
35
2d3741d6 36 ngOnInit () {
111fdc26 37 this.loadMoreResults()
5c20a455
C
38
39 this.userService.getAnonymousOrLoggedUser()
40 .subscribe(user => this.userMiniature = user)
41
42 this.userService.listenAnonymousUpdate()
43 .subscribe(user => this.userMiniature = user)
2d3741d6
C
44 }
45
46 buildVideoChannelBy (object: { videos: Video[] }) {
47 return object.videos[0].byVideoChannel
48 }
1a471091
C
49
50 buildVideoChannelAvatarUrl (object: { videos: Video[] }) {
51 return object.videos[0].videoChannelAvatarUrl
52 }
6eb62c33
C
53
54 buildVideos (videos: Video[]) {
55 const numberOfVideos = this.screenService.getNumberOfAvailableMiniatures()
56
57 return videos.slice(0, numberOfVideos * 2)
58 }
111fdc26
C
59
60 onNearOfBottom () {
61 if (this.currentPage >= this.maxPage) return
62 if (this.lastWasEmpty) return
63 if (this.isLoading) return
64
65 this.currentPage++
66 this.loadMoreResults()
67 }
68
69 private loadMoreResults () {
70 this.isLoading = true
71
72 this.overviewService.getVideosOverview(this.currentPage)
73 .subscribe(
74 overview => {
75 this.isLoading = false
76
77 if (overview.tags.length === 0 && overview.channels.length === 0 && overview.categories.length === 0) {
78 this.lastWasEmpty = true
79 if (this.loaded === false) this.notResults = true
80
81 return
82 }
83
84 this.loaded = true
85 this.onDataSubject.next(overview)
86
87 this.overviews.push(overview)
88 },
89
90 err => {
91 this.notifier.error(err.message)
92 this.isLoading = false
93 }
94 )
95 }
2d3741d6 96}