mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-12 16:22:55 -07:00
Fixed the filter on the Requests page #2219 and added the default sort to be most recent requests
This commit is contained in:
parent
f426551222
commit
86b5455b46
9 changed files with 64 additions and 19 deletions
|
@ -17,7 +17,7 @@ namespace Ombi.Core.Engine.Interfaces
|
|||
Task<RequestEngineResult> ApproveMovie(MovieRequests request);
|
||||
Task<RequestEngineResult> ApproveMovieById(int requestId);
|
||||
Task<RequestEngineResult> DenyMovieById(int modelId);
|
||||
Task<IEnumerable<MovieRequests>> Filter(FilterViewModel vm);
|
||||
Task<FilterResult<MovieRequests>> Filter(FilterViewModel vm);
|
||||
|
||||
}
|
||||
}
|
|
@ -131,11 +131,11 @@ namespace Ombi.Core.Engine
|
|||
List<MovieRequests> allRequests;
|
||||
if (shouldHide.Hide)
|
||||
{
|
||||
allRequests = await MovieRepository.GetWithUser(shouldHide.UserId).Skip(position).Take(count).ToListAsync();
|
||||
allRequests = await MovieRepository.GetWithUser(shouldHide.UserId).Skip(position).Take(count).OrderByDescending(x => x.ReleaseDate).ToListAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
allRequests = await MovieRepository.GetWithUser().Skip(position).Take(count).ToListAsync();
|
||||
allRequests = await MovieRepository.GetWithUser().Skip(position).Take(count).OrderByDescending(x => x.ReleaseDate).ToListAsync();
|
||||
}
|
||||
allRequests.ForEach(x =>
|
||||
{
|
||||
|
@ -380,10 +380,13 @@ namespace Ombi.Core.Engine
|
|||
return new RequestEngineResult { Result = true, Message = $"{movieName} has been successfully added!" };
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<MovieRequests>> Filter(FilterViewModel vm)
|
||||
public async Task<FilterResult<MovieRequests>> Filter(FilterViewModel vm)
|
||||
{
|
||||
var shouldHide = await HideFromOtherUsers();
|
||||
var requests = shouldHide.Hide ? MovieRepository.GetWithUser(shouldHide.UserId) : MovieRepository.GetWithUser();
|
||||
var requests = shouldHide.Hide
|
||||
? MovieRepository.GetWithUser(shouldHide.UserId)
|
||||
: MovieRepository.GetWithUser();
|
||||
|
||||
switch (vm.AvailabilityFilter)
|
||||
{
|
||||
case FilterType.None:
|
||||
|
@ -415,7 +418,14 @@ namespace Ombi.Core.Engine
|
|||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
return requests;
|
||||
var count = await requests.CountAsync();
|
||||
requests = requests.Skip(vm.Position).Take(vm.Count);
|
||||
var retVal = new FilterResult<MovieRequests>
|
||||
{
|
||||
Total = count,
|
||||
Collection = requests
|
||||
};
|
||||
return retVal;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -141,7 +141,7 @@ namespace Ombi.Core.Engine
|
|||
.Include(x => x.ChildRequests)
|
||||
.ThenInclude(x => x.SeasonRequests)
|
||||
.ThenInclude(x => x.Episodes)
|
||||
.Skip(position).Take(count).ToListAsync();
|
||||
.Skip(position).Take(count).OrderByDescending(x => x.ReleaseDate).ToListAsync();
|
||||
|
||||
// Filter out children
|
||||
|
||||
|
@ -153,7 +153,7 @@ namespace Ombi.Core.Engine
|
|||
.Include(x => x.ChildRequests)
|
||||
.ThenInclude(x => x.SeasonRequests)
|
||||
.ThenInclude(x => x.Episodes)
|
||||
.Skip(position).Take(count).ToListAsync();
|
||||
.Skip(position).Take(count).OrderByDescending(x => x.ReleaseDate).ToListAsync();
|
||||
}
|
||||
|
||||
return allRequests;
|
||||
|
|
10
src/Ombi.Core/Models/Requests/FilterResult.cs
Normal file
10
src/Ombi.Core/Models/Requests/FilterResult.cs
Normal file
|
@ -0,0 +1,10 @@
|
|||
using System.Collections.Generic;
|
||||
|
||||
namespace Ombi.Core.Models.Requests
|
||||
{
|
||||
public class FilterResult<T>
|
||||
{
|
||||
public int Total { get; set; }
|
||||
public IEnumerable<T> Collection { get; set; }
|
||||
}
|
||||
}
|
|
@ -4,6 +4,8 @@
|
|||
{
|
||||
public FilterType AvailabilityFilter { get; set; }
|
||||
public FilterType StatusFilter { get; set; }
|
||||
public int Position { get; set; }
|
||||
public int Count { get; set; }
|
||||
}
|
||||
|
||||
public enum FilterType
|
||||
|
|
|
@ -18,6 +18,11 @@ export interface IMovieRequests extends IFullBaseRequest {
|
|||
qualityOverrideTitle: string;
|
||||
}
|
||||
|
||||
export interface IFilterResult<T> {
|
||||
total: number;
|
||||
collection: T[];
|
||||
}
|
||||
|
||||
export interface IMovieUpdateModel {
|
||||
id: number;
|
||||
}
|
||||
|
@ -103,6 +108,8 @@ export interface IMovieRequestModel {
|
|||
export interface IFilter {
|
||||
availabilityFilter: FilterType;
|
||||
statusFilter: FilterType;
|
||||
position: number;
|
||||
count: number;
|
||||
}
|
||||
|
||||
export enum FilterType {
|
||||
|
|
|
@ -37,7 +37,7 @@ export class MovieRequestsComponent implements OnInit {
|
|||
public filterType = FilterType;
|
||||
|
||||
public order: string = "requestedDate";
|
||||
public reverse = false;
|
||||
public reverse = true;
|
||||
|
||||
public totalMovies: number = 100;
|
||||
private currentlyLoaded: number;
|
||||
|
@ -72,7 +72,10 @@ export class MovieRequestsComponent implements OnInit {
|
|||
this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser");
|
||||
this.filter = {
|
||||
availabilityFilter: FilterType.None,
|
||||
statusFilter: FilterType.None};
|
||||
statusFilter: FilterType.None,
|
||||
count: this.amountToLoad,
|
||||
position: 0,
|
||||
};
|
||||
}
|
||||
|
||||
public paginate(event: IPagenator) {
|
||||
|
@ -174,8 +177,9 @@ export class MovieRequestsComponent implements OnInit {
|
|||
this.filter.availabilityFilter = filter;
|
||||
this.requestService.filterMovies(this.filter)
|
||||
.subscribe(x => {
|
||||
this.setOverrides(x);
|
||||
this.movieRequests = x;
|
||||
this.totalMovies = x.total;
|
||||
this.setOverrides(x.collection);
|
||||
this.movieRequests = x.collection;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -184,8 +188,9 @@ export class MovieRequestsComponent implements OnInit {
|
|||
this.filter.statusFilter = filter;
|
||||
this.requestService.filterMovies(this.filter)
|
||||
.subscribe(x => {
|
||||
this.setOverrides(x);
|
||||
this.movieRequests = x;
|
||||
this.totalMovies = x.total;
|
||||
this.setOverrides(x.collection);
|
||||
this.movieRequests = x.collection;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -223,7 +228,8 @@ export class MovieRequestsComponent implements OnInit {
|
|||
}
|
||||
|
||||
private loadRequests(amountToLoad: number, currentlyLoaded: number) {
|
||||
this.requestService.getMovieRequests(amountToLoad, currentlyLoaded + 1)
|
||||
if(this.filter.availabilityFilter === FilterType.None && this.filter.statusFilter === FilterType.None) {
|
||||
this.requestService.getMovieRequests(amountToLoad, currentlyLoaded + 1)
|
||||
.subscribe(x => {
|
||||
this.setOverrides(x);
|
||||
if(!this.movieRequests) {
|
||||
|
@ -232,6 +238,16 @@ export class MovieRequestsComponent implements OnInit {
|
|||
this.movieRequests = x;
|
||||
this.currentlyLoaded = currentlyLoaded + amountToLoad;
|
||||
});
|
||||
} else {
|
||||
this.filter.position = currentlyLoaded;
|
||||
this.requestService.filterMovies(this.filter)
|
||||
.subscribe(x => {
|
||||
this.setOverrides(x.collection);
|
||||
this.totalMovies = x.total;
|
||||
this.movieRequests = x.collection;
|
||||
this.currentlyLoaded = currentlyLoaded + amountToLoad;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private updateRequest(request: IMovieRequests) {
|
||||
|
|
|
@ -6,7 +6,7 @@ import { Observable } from "rxjs/Rx";
|
|||
|
||||
import { TreeNode } from "primeng/primeng";
|
||||
import { IRequestEngineResult } from "../interfaces";
|
||||
import { IChildRequests, IFilter, IMovieRequestModel, IMovieRequests, IMovieUpdateModel, ITvRequests, ITvUpdateModel } from "../interfaces";
|
||||
import { IChildRequests, IFilter, IFilterResult, IMovieRequestModel, IMovieRequests, IMovieUpdateModel, ITvRequests,ITvUpdateModel } from "../interfaces";
|
||||
import { ITvRequestViewModel } from "../interfaces";
|
||||
import { ServiceHelpers } from "./service.helpers";
|
||||
|
||||
|
@ -114,7 +114,7 @@ export class RequestService extends ServiceHelpers {
|
|||
public deleteChild(child: IChildRequests): Observable<boolean> {
|
||||
return this.http.delete<boolean>(`${this.url}tv/child/${child.id}`, {headers: this.headers});
|
||||
}
|
||||
public filterMovies(filter: IFilter): Observable<IMovieRequests[]> {
|
||||
return this.http.post<IMovieRequests[]>(`${this.url}movie/filter`, JSON.stringify(filter), {headers: this.headers});
|
||||
public filterMovies(filter: IFilter): Observable<IFilterResult<IMovieRequests>> {
|
||||
return this.http.post<IFilterResult<IMovieRequests>>(`${this.url}movie/filter`, JSON.stringify(filter), {headers: this.headers});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -352,7 +352,7 @@ namespace Ombi.Controllers
|
|||
/// <param name="vm"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("movie/filter")]
|
||||
public async Task<IEnumerable<MovieRequests>> Filter([FromBody] FilterViewModel vm)
|
||||
public async Task<FilterResult<MovieRequests>> Filter([FromBody] FilterViewModel vm)
|
||||
{
|
||||
return await MovieRequestEngine.Filter(vm);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue