import { SortMeta } from 'primeng/api'
-import { from, Observable } from 'rxjs'
+import { from, Observable, of } from 'rxjs'
import { catchError, concatMap, map, switchMap, toArray } from 'rxjs/operators'
import { HttpClient, HttpParams, HttpRequest } from '@angular/common/http'
import { Injectable } from '@angular/core'
-import { ComponentPaginationLight, RestExtractor, RestService, ServerService, UserService } from '@app/core'
+import { AuthService, ComponentPaginationLight, RestExtractor, RestService, ServerService, UserService } from '@app/core'
import { objectToFormData } from '@app/helpers'
import {
BooleanBothQuery,
VideoTranscodingCreate,
VideoUpdate
} from '@shared/models'
+import { VideoSource } from '@shared/models/videos/video-source'
import { environment } from '../../../../environments/environment'
import { Account } from '../account/account.model'
import { AccountService } from '../account/account.service'
static BASE_SUBSCRIPTION_FEEDS_URL = environment.apiUrl + '/feeds/subscriptions.'
constructor (
+ private auth: AuthService,
private authHttp: HttpClient,
private restExtractor: RestExtractor,
private restService: RestService,
)
}
+ getSource (videoId: number) {
+ return this.authHttp
+ .get<{ source: VideoSource }>(VideoService.BASE_VIDEO_URL + '/' + videoId + '/source')
+ .pipe(
+ catchError(err => {
+ if (err.status === 404) {
+ return of(undefined)
+ }
+
+ this.restExtractor.handleError(err)
+ })
+ )
+ }
+
setVideoLike (id: number) {
return this.setVideoRate(id, 'like')
}
? this.restService.componentToRestPagination(videoPagination)
: undefined
- let newParams = this.restService.addRestGetParams(params, pagination, sort)
+ let newParams = this.restService.addRestGetParams(params, pagination, this.buildListSort(sort))
if (skipCount) newParams = newParams.set('skipCount', skipCount + '')
return newParams
}
+ private buildListSort (sortArg: VideoSortField | SortMeta) {
+ const sort = this.restService.buildSortString(sortArg)
+
+ if (typeof sort === 'string') {
+ // Silently use the best algorithm for logged in users if they chose the hot algorithm
+ if (
+ this.auth.isLoggedIn() &&
+ (sort === 'hot' || sort === '-hot')
+ ) {
+ return sort.replace('hot', 'best')
+ }
+
+ return sort
+ }
+ }
+
private setVideoRate (id: number, rateType: UserVideoRateType) {
const url = `${VideoService.BASE_VIDEO_URL}/${id}/rate`
const body: UserVideoRateUpdate = {