-import { Observable, of, throwError } from 'rxjs'
-import { catchError, map, mergeMap, switchMap } from 'rxjs/operators'
-import { HttpClient, HttpErrorResponse, HttpParams, HttpRequest } from '@angular/common/http'
+import { Observable } from 'rxjs'
+import { catchError, map, switchMap } from 'rxjs/operators'
+import { HttpClient, HttpParams, HttpRequest } from '@angular/common/http'
import { Injectable } from '@angular/core'
-import { ComponentPaginationLight, RestExtractor, RestService, ServerService, UserService, AuthService } from '@app/core'
+import { ComponentPaginationLight, RestExtractor, RestService, ServerService, UserService } from '@app/core'
import { objectToFormData } from '@app/helpers'
import {
FeedFormat,
let params = new HttpParams()
params = this.restService.addRestGetParams(params, pagination, sort)
- params = this.restService.addObjectParams(params, { search })
+
+ if (search) {
+ const filters = this.restService.parseQueryStringFilter(search, {
+ isLive: {
+ prefix: 'isLive:',
+ isBoolean: true
+ }
+ })
+
+ params = this.restService.addObjectParams(params, filters)
+ }
return this.authHttp
.get<ResultList<Video>>(UserService.BASE_USERS_URL + 'me/videos', { params })
}
getAccountVideos (parameters: {
- account: Account,
+ account: Pick<Account, 'nameWithHost'>,
videoPagination: ComponentPaginationLight,
sort: VideoSortField
nsfwPolicy?: NSFWPolicyType
videoFilter?: VideoFilter
+ search?: string
}): Observable<ResultList<Video>> {
- const { account, videoPagination, sort, videoFilter, nsfwPolicy } = parameters
+ const { account, videoPagination, sort, videoFilter, nsfwPolicy, search } = parameters
const pagination = this.restService.componentPaginationToRestPagination(videoPagination)
params = params.set('filter', videoFilter)
}
+ if (search) {
+ params = params.set('search', search)
+ }
+
return this.authHttp
.get<ResultList<Video>>(AccountService.BASE_ACCOUNT_URL + account.nameWithHost + '/videos', { params })
.pipe(
}
getVideoChannelVideos (parameters: {
- videoChannel: VideoChannel,
+ videoChannel: Pick<VideoChannel, 'nameWithHost'>,
videoPagination: ComponentPaginationLight,
sort: VideoSortField,
nsfwPolicy?: NSFWPolicyType
)
}
- explainedPrivacyLabels (privacies: VideoConstant<VideoPrivacy>[]) {
- const base = [
+ explainedPrivacyLabels (serverPrivacies: VideoConstant<VideoPrivacy>[], defaultPrivacyId = VideoPrivacy.PUBLIC) {
+ const descriptions = [
{
id: VideoPrivacy.PRIVATE,
description: $localize`Only I can see this video`
}
]
- return base
- .filter(o => !!privacies.find(p => p.id === o.id)) // filter down to privacies that where in the input
- .map(o => ({ ...privacies[o.id - 1], ...o })) // merge the input privacies that contain a label, and extend them with a description
+ return {
+ defaultPrivacyId: serverPrivacies.find(p => p.id === defaultPrivacyId)?.id || serverPrivacies[0].id,
+ videoPrivacies: serverPrivacies.map(p => ({ ...p, description: descriptions.find(p => p.id).description }))
+ }
+ }
+
+ getHighestAvailablePrivacy (serverPrivacies: VideoConstant<VideoPrivacy>[]) {
+ const order = [ VideoPrivacy.PRIVATE, VideoPrivacy.INTERNAL, VideoPrivacy.UNLISTED, VideoPrivacy.PUBLIC ]
+
+ for (const privacy of order) {
+ if (serverPrivacies.find(p => p.id === privacy)) {
+ return privacy
+ }
+ }
+
+ throw new Error('No highest privacy available')
}
nsfwPolicyToParam (nsfwPolicy: NSFWPolicyType) {