]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/+videos/video-list/video-user-subscriptions.component.ts
Add video filters to common video pages
[github/Chocobozzz/PeerTube.git] / client / src / app / +videos / video-list / video-user-subscriptions.component.ts
CommitLineData
18490b07 1
dd24f1bb
C
2import { firstValueFrom } from 'rxjs'
3import { switchMap, tap } from 'rxjs/operators'
4import { Component } from '@angular/core'
5import { AuthService, ComponentPaginationLight, DisableForReuseHook, ScopedTokensService } from '@app/core'
93cae479 6import { HooksService } from '@app/core/plugins/hooks.service'
afff310e 7import { VideoService } from '@app/shared/shared-main'
67ed6552 8import { UserSubscriptionService } from '@app/shared/shared-user-subscription'
dd24f1bb
C
9import { VideoFilters } from '@app/shared/shared-video-miniature'
10import { VideoSortField } from '@shared/models'
22a16e36
C
11
12@Component({
13 selector: 'my-videos-user-subscriptions',
dd24f1bb 14 templateUrl: './video-user-subscriptions.component.html'
22a16e36 15})
dd24f1bb
C
16export class VideoUserSubscriptionsComponent implements DisableForReuseHook {
17 getVideosObservableFunction = this.getVideosObservable.bind(this)
18 getSyndicationItemsFunction = this.getSyndicationItems.bind(this)
19
20 defaultSort = '-publishedAt' as VideoSortField
21
22 actions = [
23 {
24 routerLink: '/my-library/subscriptions',
25 label: $localize`Subscriptions`,
26 iconName: 'cog'
27 }
28 ]
29
30 titlePage = $localize`Videos from your subscriptions`
31
32 disabled = false
33
34 private feedToken: string
22a16e36
C
35
36 constructor (
dd24f1bb 37 private authService: AuthService,
67ed6552 38 private userSubscription: UserSubscriptionService,
afff310e 39 private hooks: HooksService,
5beb89f2
RK
40 private videoService: VideoService,
41 private scopedTokensService: ScopedTokensService
22a16e36 42 ) {
22a16e36 43
22a16e36
C
44 }
45
dd24f1bb 46 getVideosObservable (pagination: ComponentPaginationLight, filters: VideoFilters) {
93cae479 47 const params = {
dd24f1bb
C
48 ...filters.toVideosAPIObject(),
49
50 videoPagination: pagination,
440d39c5 51 skipCount: true
93cae479 52 }
22a16e36 53
93cae479 54 return this.hooks.wrapObsFun(
67ed6552 55 this.userSubscription.getUserSubscriptionVideos.bind(this.userSubscription),
93cae479
C
56 params,
57 'common',
7663e55a
C
58 'filter:api.user-subscriptions-videos.videos.list.params',
59 'filter:api.user-subscriptions-videos.videos.list.result'
93cae479 60 )
22a16e36
C
61 }
62
dd24f1bb
C
63 getSyndicationItems () {
64 return this.loadFeedToken()
65 .then(() => {
66 const user = this.authService.getUser()
67
68 return this.videoService.getVideoSubscriptionFeedUrls(user.account.id, this.feedToken)
69 })
22a16e36 70 }
afff310e 71
dd24f1bb
C
72 disableForReuse () {
73 this.disabled = true
74 }
75
76 enabledForReuse () {
77 this.disabled = false
78 }
79
80 private loadFeedToken () {
81 if (this.feedToken) return Promise.resolve(this.feedToken)
82
83 const obs = this.authService.userInformationLoaded
84 .pipe(
85 switchMap(() => this.scopedTokensService.getScopedTokens()),
86 tap(tokens => this.feedToken = tokens.feedToken)
87 )
88
89 return firstValueFrom(obs)
afff310e 90 }
22a16e36 91}