X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=client%2Fsrc%2Fapp%2F%2Bvideos%2Fvideo-list%2Fvideo-user-subscriptions.component.ts;h=04f02c138fee263661e6cc069b299ed10d949d7a;hb=22c777863088f90c7f3f9df613b42952abab856d;hp=03881c295745d9aab8675656e300c18aa672dc21;hpb=5beb89f223539f1e415a976ff104f772526b4d20;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/+videos/video-list/video-user-subscriptions.component.ts b/client/src/app/+videos/video-list/video-user-subscriptions.component.ts index 03881c295..04f02c138 100644 --- a/client/src/app/+videos/video-list/video-user-subscriptions.component.ts +++ b/client/src/app/+videos/video-list/video-user-subscriptions.component.ts @@ -1,89 +1,53 @@ -import { Component, OnDestroy, OnInit } from '@angular/core' -import { ActivatedRoute, Router } from '@angular/router' -import { AuthService, LocalStorageService, Notifier, ScopedTokensService, ScreenService, ServerService, UserService } from '@app/core' + +import { firstValueFrom } from 'rxjs' +import { switchMap, tap } from 'rxjs/operators' +import { Component } from '@angular/core' +import { AuthService, ComponentPaginationLight, DisableForReuseHook, ScopedTokensService } from '@app/core' import { HooksService } from '@app/core/plugins/hooks.service' -import { immutableAssign } from '@app/helpers' import { VideoService } from '@app/shared/shared-main' import { UserSubscriptionService } from '@app/shared/shared-user-subscription' -import { AbstractVideoList, OwnerDisplayType } from '@app/shared/shared-video-miniature' -import { VideoSortField, FeedFormat } from '@shared/models' -import { copyToClipboard } from '../../../root-helpers/utils' -import { environment } from '../../../environments/environment' -import { forkJoin } from 'rxjs' +import { VideoFilters } from '@app/shared/shared-video-miniature' +import { VideoSortField } from '@shared/models' @Component({ selector: 'my-videos-user-subscriptions', - styleUrls: [ '../../shared/shared-video-miniature/abstract-video-list.scss' ], - templateUrl: '../../shared/shared-video-miniature/abstract-video-list.html' + templateUrl: './video-user-subscriptions.component.html' }) -export class VideoUserSubscriptionsComponent extends AbstractVideoList implements OnInit, OnDestroy { - titlePage: string - sort = '-publishedAt' as VideoSortField - ownerDisplayType: OwnerDisplayType = 'auto' - groupByDate = true - - constructor ( - protected router: Router, - protected serverService: ServerService, - protected route: ActivatedRoute, - protected notifier: Notifier, - protected authService: AuthService, - protected userService: UserService, - protected screenService: ScreenService, - protected storageService: LocalStorageService, - private userSubscription: UserSubscriptionService, - private hooks: HooksService, - private videoService: VideoService, - private scopedTokensService: ScopedTokensService - ) { - super() +export class VideoUserSubscriptionsComponent implements DisableForReuseHook { + getVideosObservableFunction = this.getVideosObservable.bind(this) + getSyndicationItemsFunction = this.getSyndicationItems.bind(this) - this.titlePage = $localize`Videos from your subscriptions` + defaultSort = '-publishedAt' as VideoSortField - this.actions.push({ + actions = [ + { routerLink: '/my-library/subscriptions', label: $localize`Subscriptions`, - iconName: 'cog' - }) - } + iconName: 'cog' as 'cog' + } + ] - ngOnInit () { - super.ngOnInit() + titlePage = $localize`Videos from your subscriptions` - const user = this.authService.getUser() - let feedUrl = environment.originServerUrl + disabled = false - this.scopedTokensService.getScopedTokens().subscribe( - tokens => { - const feeds = this.videoService.getVideoSubscriptionFeedUrls(user.account.id, tokens.feedToken) - feedUrl = feedUrl + feeds.find((f: any) => f.format === FeedFormat.RSS).url - }, + private feedToken: string - err => { - this.notifier.error(err.message) - } - ) - - this.actions.unshift({ - label: $localize`Feed`, - iconName: 'syndication', - justIcon: true, - click: () => { - copyToClipboard(feedUrl) - this.activateCopiedMessage() - } - }) - } + constructor ( + private authService: AuthService, + private userSubscription: UserSubscriptionService, + private hooks: HooksService, + private videoService: VideoService, + private scopedTokensService: ScopedTokensService + ) { - ngOnDestroy () { - super.ngOnDestroy() } - getVideosObservable (page: number) { - const newPagination = immutableAssign(this.pagination, { currentPage: page }) + getVideosObservable (pagination: ComponentPaginationLight, filters: VideoFilters) { const params = { - videoPagination: newPagination, - sort: this.sort, + ...filters.toVideosAPIObject(), + + videoPagination: pagination, skipCount: true } @@ -96,11 +60,32 @@ export class VideoUserSubscriptionsComponent extends AbstractVideoList implement ) } - generateSyndicationList () { - // not implemented yet + getSyndicationItems () { + return this.loadFeedToken() + .then(() => { + const user = this.authService.getUser() + + return this.videoService.getVideoSubscriptionFeedUrls(user.account.id, this.feedToken) + }) } - activateCopiedMessage () { - this.notifier.success($localize`Feed URL copied`) + disableForReuse () { + this.disabled = true + } + + enabledForReuse () { + this.disabled = false + } + + private loadFeedToken () { + if (this.feedToken) return Promise.resolve(this.feedToken) + + const obs = this.authService.userInformationLoaded + .pipe( + switchMap(() => this.scopedTokensService.getScopedTokens()), + tap(tokens => this.feedToken = tokens.feedToken) + ) + + return firstValueFrom(obs) } }