import { Injectable } from '@angular/core'
import { AuthService, ComponentPaginationLight, RestExtractor, RestService, ServerService, UserService } from '@app/core'
import { objectToFormData } from '@app/helpers'
+import { arrayify } from '@shared/core-utils'
import {
BooleanBothQuery,
FeedFormat,
export class VideoService {
static BASE_VIDEO_URL = environment.apiUrl + '/api/v1/videos'
static BASE_FEEDS_URL = environment.apiUrl + '/feeds/videos.'
+ static PODCAST_FEEDS_URL = environment.apiUrl + '/feeds/podcast/videos.xml'
static BASE_SUBSCRIPTION_FEEDS_URL = environment.apiUrl + '/feeds/subscriptions.'
constructor (
let params = this.restService.addRestGetParams(new HttpParams())
params = params.set('videoChannelId', videoChannelId.toString())
- return this.buildBaseFeedUrls(params)
+ const feedUrls = this.buildBaseFeedUrls(params)
+
+ feedUrls.push({
+ format: FeedFormat.RSS,
+ label: 'podcast rss 2.0',
+ url: VideoService.PODCAST_FEEDS_URL + `?videoChannelId=${videoChannelId}`
+ })
+
+ return feedUrls
}
getVideoSubscriptionFeedUrls (accountId: number, feedToken: string) {
}
removeVideo (idArg: number | number[]) {
- const ids = Array.isArray(idArg) ? idArg : [ idArg ]
+ const ids = arrayify(idArg)
return from(ids)
.pipe(
)
}
+ removeFile (videoId: number | string, fileId: number, type: 'hls' | 'webtorrent') {
+ return this.authHttp.delete(VideoService.BASE_VIDEO_URL + '/' + videoId + '/' + type + '/' + fileId)
+ .pipe(catchError(err => this.restExtractor.handleError(err)))
+ }
+
runTranscoding (videoIds: (number | string)[], type: 'hls' | 'webtorrent') {
const body: VideoTranscodingCreate = { transcodingType: type }
: 'both'
}
+ // Choose if we display by default the account or the channel
+ buildDefaultOwnerDisplayType (video: Video) {
+ const accountName = video.account.name
+
+ // If the video channel name is an UUID (not really displayable, we changed this behaviour in v1.0.0-beta.12)
+ // Or has not been customized (default created channel display name)
+ // -> Use the account name
+ if (
+ video.channel.displayName === `Default ${accountName} channel` ||
+ video.channel.displayName === `Main ${accountName} channel` ||
+ video.channel.name.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/)
+ ) {
+ return 'account' as 'account'
+ }
+
+ return 'videoChannel' as 'videoChannel'
+ }
+
buildCommonVideosParams (options: CommonVideoParams & { params: HttpParams }) {
const {
params,
if (skipCount) newParams = newParams.set('skipCount', skipCount + '')
- if (isLocal) newParams = newParams.set('isLocal', isLocal)
- if (include) newParams = newParams.set('include', include)
- if (isLive) newParams = newParams.set('isLive', isLive)
- if (nsfw) newParams = newParams.set('nsfw', nsfw)
- if (nsfwPolicy) newParams = newParams.set('nsfw', this.nsfwPolicyToParam(nsfwPolicy))
- if (languageOneOf) newParams = this.restService.addArrayParams(newParams, 'languageOneOf', languageOneOf)
- if (categoryOneOf) newParams = this.restService.addArrayParams(newParams, 'categoryOneOf', categoryOneOf)
- if (privacyOneOf) newParams = this.restService.addArrayParams(newParams, 'privacyOneOf', privacyOneOf)
+ if (isLocal !== undefined) newParams = newParams.set('isLocal', isLocal)
+ if (include !== undefined) newParams = newParams.set('include', include)
+ if (isLive !== undefined) newParams = newParams.set('isLive', isLive)
+ if (nsfw !== undefined) newParams = newParams.set('nsfw', nsfw)
+ if (nsfwPolicy !== undefined) newParams = newParams.set('nsfw', this.nsfwPolicyToParam(nsfwPolicy))
+ if (languageOneOf !== undefined) newParams = this.restService.addArrayParams(newParams, 'languageOneOf', languageOneOf)
+ if (categoryOneOf !== undefined) newParams = this.restService.addArrayParams(newParams, 'categoryOneOf', categoryOneOf)
+ if (privacyOneOf !== undefined) newParams = this.restService.addArrayParams(newParams, 'privacyOneOf', privacyOneOf)
return newParams
}