import { RestExtractor, RestPagination, RestService } from '@app/core'
import { AdvancedInputFilter } from '@app/shared/shared-forms'
import { CommonVideoParams, Video, VideoService } from '@app/shared/shared-main'
-import { ResultList, VideoInclude } from '@shared/models'
+import { ResultList, VideoInclude, VideoPrivacy } from '@shared/models'
+import { getAllPrivacies } from '@shared/core-utils'
@Injectable()
export class VideoAdminService {
buildAdminInputFilter (): AdvancedInputFilter[] {
return [
+ {
+ title: $localize`Video type`,
+ children: [
+ {
+ value: 'isLive:false',
+ label: $localize`VOD`
+ },
+ {
+ value: 'isLive:true',
+ label: $localize`Live`
+ }
+ ]
+ },
+
+ {
+ title: $localize`Video files`,
+ children: [
+ {
+ value: 'webtorrent:true',
+ label: $localize`With WebTorrent`
+ },
+ {
+ value: 'webtorrent:false',
+ label: $localize`Without WebTorrent`
+ },
+ {
+ value: 'hls:true',
+ label: $localize`With HLS`
+ },
+ {
+ value: 'hls:false',
+ label: $localize`Without HLS`
+ }
+ ]
+ },
+
{
title: $localize`Videos scope`,
children: [
{
- queryParams: { search: 'isLocal:false' },
+ value: 'isLocal:false',
label: $localize`Remote videos`
},
{
- queryParams: { search: 'isLocal:true' },
+ value: 'isLocal:true',
label: $localize`Local videos`
}
]
},
{
- title: $localize`Include/Exclude`,
+ title: $localize`Exclude`,
children: [
{
- queryParams: { search: 'excludeMuted' },
+ value: 'excludeMuted',
label: $localize`Exclude muted accounts`
+ },
+ {
+ value: 'excludePublic',
+ label: $localize`Exclude public videos`
}
]
}
private buildAdminParamsFromSearch (search: string, params: HttpParams) {
let include = VideoInclude.BLACKLISTED |
VideoInclude.BLOCKED_OWNER |
- VideoInclude.HIDDEN_PRIVACY |
VideoInclude.NOT_PUBLISHED_STATE |
VideoInclude.FILES
- if (!search) return this.restService.addObjectParams(params, { include })
+ let privacyOneOf = getAllPrivacies()
+
+ if (!search) return this.restService.addObjectParams(params, { include, privacyOneOf })
const filters = this.restService.parseQueryStringFilter(search, {
isLocal: {
prefix: 'isLocal:',
isBoolean: true
},
+ hasHLSFiles: {
+ prefix: 'hls:',
+ isBoolean: true
+ },
+ hasWebtorrentFiles: {
+ prefix: 'webtorrent:',
+ isBoolean: true
+ },
+ isLive: {
+ prefix: 'isLive:',
+ isBoolean: true
+ },
excludeMuted: {
prefix: 'excludeMuted',
handler: () => true
+ },
+ excludePublic: {
+ prefix: 'excludePublic',
+ handler: () => true
}
})
filters.excludeMuted = undefined
}
- return this.restService.addObjectParams(params, { ...filters, include })
+ if (filters.excludePublic) {
+ privacyOneOf = [ VideoPrivacy.PRIVATE, VideoPrivacy.UNLISTED, VideoPrivacy.INTERNAL ]
+
+ filters.excludePublic = undefined
+ }
+
+ return this.restService.addObjectParams(params, { ...filters, include, privacyOneOf })
}
}