return
}
- if ([ 'best', 'hot', 'trending', 'likes' ].includes(sanitizedSort)) {
+ if ([ 'hot', 'trending', 'likes' ].includes(sanitizedSort)) {
this.title = $localize`Trending`
- if (sanitizedSort === 'best') this.titleTooltip = $localize`Videos with the most interactions for recent videos, minus user history`
if (sanitizedSort === 'hot') this.titleTooltip = $localize`Videos with the most interactions for recent videos`
if (sanitizedSort === 'likes') this.titleTooltip = $localize`Videos that have the most likes`
}
if (sort !== undefined) {
- let sortString = ''
+ newParams = newParams.set('sort', this.buildSortString(sort))
+ }
- if (typeof sort === 'string') {
- sortString = sort
- } else {
- const sortPrefix = sort.order === 1 ? '' : '-'
- sortString = sortPrefix + sort.field
- }
+ return newParams
+ }
- newParams = newParams.set('sort', sortString)
+ buildSortString (sort: SortMeta | string) {
+ if (typeof sort === 'string') {
+ return sort
}
- return newParams
+ const sortPrefix = sort.order === 1 ? '' : '-'
+ return sortPrefix + sort.field
}
addArrayParams (params: HttpParams, name: string, values: (string | number)[]) {
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,
static BASE_SUBSCRIPTION_FEEDS_URL = environment.apiUrl + '/feeds/subscriptions.'
constructor (
+ private auth: AuthService,
private authHttp: HttpClient,
private restExtractor: RestExtractor,
private restService: RestService,
? 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 = {
return this.auth.getUser().hasRight(UserRight.SEE_ALL_VIDEOS)
}
- isTrendingSortEnabled (sort: 'most-viewed' | 'hot' | 'best' | 'most-liked') {
+ isTrendingSortEnabled (sort: 'most-viewed' | 'hot' | 'most-liked') {
const serverConfig = this.serverService.getHTMLConfig()
- const enabled = serverConfig.trending.videos.algorithms.enabled.includes(sort)
-
- // Best is adapted from the user
- if (sort === 'best') return enabled && this.auth.isLoggedIn()
-
- return enabled
+ return serverConfig.trending.videos.algorithms.enabled.includes(sort)
}
resetFilter (key: string, canRemove: boolean) {