From 0aa52e170727ac6bdf441bcaa2353ae0b8a354ed Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 18 Nov 2020 15:29:38 +0100 Subject: Add ability to display all channel/account videos --- .../app/shared/shared-main/video/video.service.ts | 27 +++++++++++++++--- .../abstract-video-list.html | 2 +- .../abstract-video-list.scss | 12 ++++++-- .../shared-video-miniature/abstract-video-list.ts | 32 ++++++++++++++++++---- 4 files changed, 61 insertions(+), 12 deletions(-) (limited to 'client/src/app/shared') diff --git a/client/src/app/shared/shared-main/video/video.service.ts b/client/src/app/shared/shared-main/video/video.service.ts index 0e2d36081..c8a3ec043 100644 --- a/client/src/app/shared/shared-main/video/video.service.ts +++ b/client/src/app/shared/shared-main/video/video.service.ts @@ -134,16 +134,28 @@ export class VideoService implements VideosProvider { ) } - getAccountVideos ( + getAccountVideos (parameters: { account: Account, videoPagination: ComponentPaginationLight, sort: VideoSortField - ): Observable> { + nsfwPolicy?: NSFWPolicyType + videoFilter?: VideoFilter + }): Observable> { + const { account, videoPagination, sort, videoFilter, nsfwPolicy } = parameters + const pagination = this.restService.componentPaginationToRestPagination(videoPagination) let params = new HttpParams() params = this.restService.addRestGetParams(params, pagination, sort) + if (nsfwPolicy) { + params = params.set('nsfw', this.nsfwPolicyToParam(nsfwPolicy)) + } + + if (videoFilter) { + params = params.set('filter', videoFilter) + } + return this.authHttp .get>(AccountService.BASE_ACCOUNT_URL + account.nameWithHost + '/videos', { params }) .pipe( @@ -152,12 +164,15 @@ export class VideoService implements VideosProvider { ) } - getVideoChannelVideos ( + getVideoChannelVideos (parameters: { videoChannel: VideoChannel, videoPagination: ComponentPaginationLight, sort: VideoSortField, nsfwPolicy?: NSFWPolicyType - ): Observable> { + videoFilter?: VideoFilter + }): Observable> { + const { videoChannel, videoPagination, sort, nsfwPolicy, videoFilter } = parameters + const pagination = this.restService.componentPaginationToRestPagination(videoPagination) let params = new HttpParams() @@ -167,6 +182,10 @@ export class VideoService implements VideosProvider { params = params.set('nsfw', this.nsfwPolicyToParam(nsfwPolicy)) } + if (videoFilter) { + params = params.set('filter', videoFilter) + } + return this.authHttp .get>(VideoChannelService.BASE_VIDEO_CHANNEL_URL + videoChannel.nameWithHost + '/videos', { params }) .pipe( diff --git a/client/src/app/shared/shared-video-miniature/abstract-video-list.html b/client/src/app/shared/shared-video-miniature/abstract-video-list.html index 08962dff8..b1ac757db 100644 --- a/client/src/app/shared/shared-video-miniature/abstract-video-list.html +++ b/client/src/app/shared/shared-video-miniature/abstract-video-list.html @@ -21,7 +21,7 @@ diff --git a/client/src/app/shared/shared-video-miniature/abstract-video-list.scss b/client/src/app/shared/shared-video-miniature/abstract-video-list.scss index 7841b60f7..9077e2f75 100644 --- a/client/src/app/shared/shared-video-miniature/abstract-video-list.scss +++ b/client/src/app/shared/shared-video-miniature/abstract-video-list.scss @@ -31,13 +31,21 @@ $iconSize: 16px; .moderation-block { div { - @include button-with-icon($iconSize, 3px, -1px); + @include button-with-icon($iconSize, 3px, -2px); } - margin-left: .2rem; + margin-left: .4rem; display: flex; justify-content: flex-end; align-items: center; + + .dropdown-item { + padding: 0; + + ::ng-deep my-peertube-checkbox label { + padding: 3px 15px; + } + } } } diff --git a/client/src/app/shared/shared-video-miniature/abstract-video-list.ts b/client/src/app/shared/shared-video-miniature/abstract-video-list.ts index da05e15fb..2219ced30 100644 --- a/client/src/app/shared/shared-video-miniature/abstract-video-list.ts +++ b/client/src/app/shared/shared-video-miniature/abstract-video-list.ts @@ -15,7 +15,7 @@ import { import { DisableForReuseHook } from '@app/core/routing/disable-for-reuse-hook' import { GlobalIconName } from '@app/shared/shared-icons' import { isLastMonth, isLastWeek, isThisMonth, isToday, isYesterday } from '@shared/core-utils/miscs/date' -import { ServerConfig, VideoSortField } from '@shared/models' +import { ServerConfig, UserRight, VideoFilter, VideoSortField } from '@shared/models' import { NSFWPolicyType } from '@shared/models/videos/nsfw-policy.type' import { Syndication, Video } from '../shared-main' import { MiniatureDisplayOptions, OwnerDisplayType } from './video-miniature.component' @@ -205,10 +205,6 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, DisableFor this.loadMoreVideos(true) } - toggleModerationDisplay () { - throw new Error('toggleModerationDisplay is not implemented') - } - removeVideoFromArray (video: Video) { this.videos = this.videos.filter(v => v.id !== video.id) } @@ -268,6 +264,10 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, DisableFor return this.groupedDateLabels[this.groupedDates[video.id]] } + toggleModerationDisplay () { + throw new Error('toggleModerationDisplay is not implemented') + } + // On videos hook for children that want to do something protected onMoreVideos () { /* empty */ } @@ -277,6 +277,28 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, DisableFor this.angularState = routeParams[ 'a-state' ] } + protected buildLocalFilter (existing: VideoFilter, base: VideoFilter) { + if (base === 'local') { + return existing === 'local' + ? 'all-local' as 'all-local' + : 'local' as 'local' + } + + return existing === 'all' + ? null + : 'all' + } + + protected enableAllFilterIfPossible () { + if (!this.authService.isLoggedIn()) return + + this.authService.userInformationLoaded + .subscribe(() => { + const user = this.authService.getUser() + this.displayModerationBlock = user.hasRight(UserRight.SEE_ALL_VIDEOS) + }) + } + private calcPageSizes () { if (this.screenService.isInMobileView()) { this.pagination.itemsPerPage = 5 -- cgit v1.2.3