Fixed the filter on the Requests page #2219 and added the default sort to be most recent requests

pull/2225/head
Jamie Rees 7 years ago
parent f426551222
commit 86b5455b46

@ -17,7 +17,7 @@ namespace Ombi.Core.Engine.Interfaces
Task<RequestEngineResult> ApproveMovie(MovieRequests request); Task<RequestEngineResult> ApproveMovie(MovieRequests request);
Task<RequestEngineResult> ApproveMovieById(int requestId); Task<RequestEngineResult> ApproveMovieById(int requestId);
Task<RequestEngineResult> DenyMovieById(int modelId); 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; List<MovieRequests> allRequests;
if (shouldHide.Hide) 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 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 => allRequests.ForEach(x =>
{ {
@ -380,10 +380,13 @@ namespace Ombi.Core.Engine
return new RequestEngineResult { Result = true, Message = $"{movieName} has been successfully added!" }; 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 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) switch (vm.AvailabilityFilter)
{ {
case FilterType.None: case FilterType.None:
@ -415,7 +418,14 @@ namespace Ombi.Core.Engine
throw new ArgumentOutOfRangeException(); 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) .Include(x => x.ChildRequests)
.ThenInclude(x => x.SeasonRequests) .ThenInclude(x => x.SeasonRequests)
.ThenInclude(x => x.Episodes) .ThenInclude(x => x.Episodes)
.Skip(position).Take(count).ToListAsync(); .Skip(position).Take(count).OrderByDescending(x => x.ReleaseDate).ToListAsync();
// Filter out children // Filter out children
@ -153,7 +153,7 @@ namespace Ombi.Core.Engine
.Include(x => x.ChildRequests) .Include(x => x.ChildRequests)
.ThenInclude(x => x.SeasonRequests) .ThenInclude(x => x.SeasonRequests)
.ThenInclude(x => x.Episodes) .ThenInclude(x => x.Episodes)
.Skip(position).Take(count).ToListAsync(); .Skip(position).Take(count).OrderByDescending(x => x.ReleaseDate).ToListAsync();
} }
return allRequests; return allRequests;

@ -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 AvailabilityFilter { get; set; }
public FilterType StatusFilter { get; set; } public FilterType StatusFilter { get; set; }
public int Position { get; set; }
public int Count { get; set; }
} }
public enum FilterType public enum FilterType

@ -18,6 +18,11 @@ export interface IMovieRequests extends IFullBaseRequest {
qualityOverrideTitle: string; qualityOverrideTitle: string;
} }
export interface IFilterResult<T> {
total: number;
collection: T[];
}
export interface IMovieUpdateModel { export interface IMovieUpdateModel {
id: number; id: number;
} }
@ -103,6 +108,8 @@ export interface IMovieRequestModel {
export interface IFilter { export interface IFilter {
availabilityFilter: FilterType; availabilityFilter: FilterType;
statusFilter: FilterType; statusFilter: FilterType;
position: number;
count: number;
} }
export enum FilterType { export enum FilterType {

@ -37,7 +37,7 @@ export class MovieRequestsComponent implements OnInit {
public filterType = FilterType; public filterType = FilterType;
public order: string = "requestedDate"; public order: string = "requestedDate";
public reverse = false; public reverse = true;
public totalMovies: number = 100; public totalMovies: number = 100;
private currentlyLoaded: number; private currentlyLoaded: number;
@ -72,7 +72,10 @@ export class MovieRequestsComponent implements OnInit {
this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser"); this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser");
this.filter = { this.filter = {
availabilityFilter: FilterType.None, availabilityFilter: FilterType.None,
statusFilter: FilterType.None}; statusFilter: FilterType.None,
count: this.amountToLoad,
position: 0,
};
} }
public paginate(event: IPagenator) { public paginate(event: IPagenator) {
@ -174,8 +177,9 @@ export class MovieRequestsComponent implements OnInit {
this.filter.availabilityFilter = filter; this.filter.availabilityFilter = filter;
this.requestService.filterMovies(this.filter) this.requestService.filterMovies(this.filter)
.subscribe(x => { .subscribe(x => {
this.setOverrides(x); this.totalMovies = x.total;
this.movieRequests = x; this.setOverrides(x.collection);
this.movieRequests = x.collection;
}); });
} }
@ -184,8 +188,9 @@ export class MovieRequestsComponent implements OnInit {
this.filter.statusFilter = filter; this.filter.statusFilter = filter;
this.requestService.filterMovies(this.filter) this.requestService.filterMovies(this.filter)
.subscribe(x => { .subscribe(x => {
this.setOverrides(x); this.totalMovies = x.total;
this.movieRequests = x; this.setOverrides(x.collection);
this.movieRequests = x.collection;
}); });
} }
@ -223,6 +228,7 @@ export class MovieRequestsComponent implements OnInit {
} }
private loadRequests(amountToLoad: number, currentlyLoaded: number) { private loadRequests(amountToLoad: number, currentlyLoaded: number) {
if(this.filter.availabilityFilter === FilterType.None && this.filter.statusFilter === FilterType.None) {
this.requestService.getMovieRequests(amountToLoad, currentlyLoaded + 1) this.requestService.getMovieRequests(amountToLoad, currentlyLoaded + 1)
.subscribe(x => { .subscribe(x => {
this.setOverrides(x); this.setOverrides(x);
@ -232,6 +238,16 @@ export class MovieRequestsComponent implements OnInit {
this.movieRequests = x; this.movieRequests = x;
this.currentlyLoaded = currentlyLoaded + amountToLoad; 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) { private updateRequest(request: IMovieRequests) {

@ -6,7 +6,7 @@ import { Observable } from "rxjs/Rx";
import { TreeNode } from "primeng/primeng"; import { TreeNode } from "primeng/primeng";
import { IRequestEngineResult } from "../interfaces"; 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 { ITvRequestViewModel } from "../interfaces";
import { ServiceHelpers } from "./service.helpers"; import { ServiceHelpers } from "./service.helpers";
@ -114,7 +114,7 @@ export class RequestService extends ServiceHelpers {
public deleteChild(child: IChildRequests): Observable<boolean> { public deleteChild(child: IChildRequests): Observable<boolean> {
return this.http.delete<boolean>(`${this.url}tv/child/${child.id}`, {headers: this.headers}); return this.http.delete<boolean>(`${this.url}tv/child/${child.id}`, {headers: this.headers});
} }
public filterMovies(filter: IFilter): Observable<IMovieRequests[]> { public filterMovies(filter: IFilter): Observable<IFilterResult<IMovieRequests>> {
return this.http.post<IMovieRequests[]>(`${this.url}movie/filter`, JSON.stringify(filter), {headers: this.headers}); 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> /// <param name="vm"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("movie/filter")] [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); return await MovieRequestEngine.Filter(vm);
} }

Loading…
Cancel
Save