From 2b0d17ccf46cfdba4103b7287f0dadf289ad4faf Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 15 Apr 2022 15:07:20 +0200 Subject: Reduce videos sort complexity Automatically use best sort if user is logged in and chose hot algorithm --- .../app/shared/shared-main/video/video.service.ts | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'client/src/app/shared/shared-main') diff --git a/client/src/app/shared/shared-main/video/video.service.ts b/client/src/app/shared/shared-main/video/video.service.ts index bc15c326f..142367506 100644 --- a/client/src/app/shared/shared-main/video/video.service.ts +++ b/client/src/app/shared/shared-main/video/video.service.ts @@ -3,7 +3,7 @@ import { from, Observable } 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, @@ -55,6 +55,7 @@ export class VideoService { static BASE_SUBSCRIPTION_FEEDS_URL = environment.apiUrl + '/feeds/subscriptions.' constructor ( + private auth: AuthService, private authHttp: HttpClient, private restExtractor: RestExtractor, private restService: RestService, @@ -418,7 +419,7 @@ export class VideoService { ? 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 + '') @@ -434,6 +435,22 @@ export class VideoService { 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 = { -- cgit v1.2.3