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> 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;
|
||||||
|
|
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 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,7 +228,8 @@ export class MovieRequestsComponent implements OnInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
private loadRequests(amountToLoad: number, currentlyLoaded: number) {
|
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 => {
|
.subscribe(x => {
|
||||||
this.setOverrides(x);
|
this.setOverrides(x);
|
||||||
if(!this.movieRequests) {
|
if(!this.movieRequests) {
|
||||||
|
@ -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…
Add table
Add a link
Reference in a new issue