} from '../../../../../shared/models/videos'
import { FeedFormat } from '../../../../../shared/models/feeds/feed-format.enum'
import { environment } from '../../../environments/environment'
-import { ComponentPagination } from '../rest/component-pagination.model'
+import { ComponentPaginationLight } from '../rest/component-pagination.model'
import { RestExtractor } from '../rest/rest-extractor.service'
import { RestService } from '../rest/rest.service'
import { UserService } from '../users/user.service'
import { Account } from '@app/shared/account/account.model'
import { AccountService } from '@app/shared/account/account.service'
import { VideoChannelService } from '@app/shared/video-channel/video-channel.service'
-import { ServerService } from '@app/core'
+import { ServerService, AuthService } from '@app/core'
import { UserSubscriptionService } from '@app/shared/user-subscription/user-subscription.service'
import { VideoChannel } from '@app/shared/video-channel/video-channel.model'
import { I18n } from '@ngx-translate/i18n-polyfill'
+import { NSFWPolicyType } from '@shared/models/videos/nsfw-policy.type'
+import { FfprobeData } from 'fluent-ffmpeg'
export interface VideosProvider {
getVideos (parameters: {
- videoPagination: ComponentPagination,
+ videoPagination: ComponentPaginationLight,
sort: VideoSortField,
filter?: VideoFilter,
categoryOneOf?: number,
constructor (
private authHttp: HttpClient,
+ private authService: AuthService,
+ private userService: UserService,
private restExtractor: RestExtractor,
private restService: RestService,
private serverService: ServerService,
.pipe(catchError(err => this.restExtractor.handleError(err)))
}
- getMyVideos (videoPagination: ComponentPagination, sort: VideoSortField, search?: string): Observable<ResultList<Video>> {
+ getMyVideos (videoPagination: ComponentPaginationLight, sort: VideoSortField, search?: string): Observable<ResultList<Video>> {
const pagination = this.restService.componentPaginationToRestPagination(videoPagination)
let params = new HttpParams()
getAccountVideos (
account: Account,
- videoPagination: ComponentPagination,
+ videoPagination: ComponentPaginationLight,
sort: VideoSortField
): Observable<ResultList<Video>> {
const pagination = this.restService.componentPaginationToRestPagination(videoPagination)
getVideoChannelVideos (
videoChannel: VideoChannel,
- videoPagination: ComponentPagination,
+ videoPagination: ComponentPaginationLight,
sort: VideoSortField
): Observable<ResultList<Video>> {
const pagination = this.restService.componentPaginationToRestPagination(videoPagination)
}
getUserSubscriptionVideos (parameters: {
- videoPagination: ComponentPagination,
- sort: VideoSortField
+ videoPagination: ComponentPaginationLight,
+ sort: VideoSortField,
+ skipCount?: boolean
}): Observable<ResultList<Video>> {
- const { videoPagination, sort } = parameters
+ const { videoPagination, sort, skipCount } = parameters
const pagination = this.restService.componentPaginationToRestPagination(videoPagination)
let params = new HttpParams()
params = this.restService.addRestGetParams(params, pagination, sort)
+ if (skipCount) params = params.set('skipCount', skipCount + '')
+
return this.authHttp
.get<ResultList<Video>>(UserSubscriptionService.BASE_USER_SUBSCRIPTIONS_URL + '/videos', { params })
.pipe(
}
getVideos (parameters: {
- videoPagination: ComponentPagination,
+ videoPagination: ComponentPaginationLight,
sort: VideoSortField,
filter?: VideoFilter,
categoryOneOf?: number,
- languageOneOf?: string[]
+ languageOneOf?: string[],
+ skipCount?: boolean,
+ nsfw?: boolean
}): Observable<ResultList<Video>> {
- const { videoPagination, sort, filter, categoryOneOf, languageOneOf } = parameters
+ const { videoPagination, sort, filter, categoryOneOf, languageOneOf, skipCount, nsfw } = parameters
const pagination = this.restService.componentPaginationToRestPagination(videoPagination)
let params = new HttpParams()
params = this.restService.addRestGetParams(params, pagination, sort)
- if (filter) {
- params = params.set('filter', filter)
- }
-
- if (categoryOneOf) {
- params = params.set('categoryOneOf', categoryOneOf + '')
+ if (filter) params = params.set('filter', filter)
+ if (categoryOneOf) params = params.set('categoryOneOf', categoryOneOf + '')
+ if (skipCount) params = params.set('skipCount', skipCount + '')
+
+ if (nsfw) {
+ params = params.set('nsfw', nsfw + '')
+ } else {
+ const nsfwPolicy = this.authService.isLoggedIn()
+ ? this.authService.getUser().nsfwPolicy
+ : this.userService.getAnonymousUser().nsfwPolicy
+ if (this.nsfwPolicyToFilter(nsfwPolicy)) params.set('nsfw', 'false')
}
if (languageOneOf) {
return this.buildBaseFeedUrls(params)
}
+ getVideoFileMetadata (metadataUrl: string) {
+ return this.authHttp
+ .get<FfprobeData>(metadataUrl)
+ .pipe(
+ catchError(err => this.restExtractor.handleError(err))
+ )
+ }
+
removeVideo (id: number) {
return this.authHttp
.delete(VideoService.BASE_VIDEO_URL + id)
catchError(err => this.restExtractor.handleError(err))
)
}
+
+ private nsfwPolicyToFilter (policy: NSFWPolicyType) {
+ return policy === 'do_not_list'
+ }
}