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> 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;

@ -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…
Cancel
Save