mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-14 01:02:57 -07:00
commit
281d48234c
12 changed files with 184 additions and 25 deletions
15
CHANGELOG.md
15
CHANGELOG.md
|
@ -4,6 +4,21 @@
|
|||
|
||||
### **New Features**
|
||||
|
||||
- Added TVRequestsLite. [Jamie]
|
||||
|
||||
- Added a smaller and simplier way of getting TV Request info. [Jamie Rees]
|
||||
|
||||
### **Fixes**
|
||||
|
||||
- Show the popular movies and tv shows by default. [Jamie]
|
||||
|
||||
- Fixed #2348. [Jamie]
|
||||
|
||||
|
||||
## v3.0.3407 (2018-06-18)
|
||||
|
||||
### **New Features**
|
||||
|
||||
- Update appveyor.yml. [Jamie]
|
||||
|
||||
- Update build.cake. [Jamie]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Ombi.Core.Models.Requests;
|
||||
using Ombi.Core.Models.Search;
|
||||
using Ombi.Core.Models.UI;
|
||||
using Ombi.Store.Entities.Requests;
|
||||
|
||||
namespace Ombi.Core.Engine.Interfaces
|
||||
|
@ -10,8 +10,10 @@ namespace Ombi.Core.Engine.Interfaces
|
|||
{
|
||||
|
||||
Task RemoveTvRequest(int requestId);
|
||||
Task<TvRequests> GetTvRequest(int requestId);
|
||||
Task<RequestEngineResult> RequestTvShow(TvRequestViewModel tv);
|
||||
Task<RequestEngineResult> DenyChildRequest(int requestId);
|
||||
Task<RequestsViewModel<TvRequests>> GetRequestsLite(int count, int position, OrderFilterModel type);
|
||||
Task<IEnumerable<TvRequests>> SearchTvRequest(string search);
|
||||
Task<IEnumerable<TreeNode<TvRequests, List<ChildRequests>>>> SearchTvRequestTree(string search);
|
||||
Task<TvRequests> UpdateTvRequest(TvRequests request);
|
||||
|
@ -20,5 +22,6 @@ namespace Ombi.Core.Engine.Interfaces
|
|||
Task<ChildRequests> UpdateChildRequest(ChildRequests request);
|
||||
Task RemoveTvChild(int requestId);
|
||||
Task<RequestEngineResult> ApproveChildRequest(int id);
|
||||
Task<IEnumerable<TvRequests>> GetRequestsLite();
|
||||
}
|
||||
}
|
|
@ -168,6 +168,35 @@ namespace Ombi.Core.Engine
|
|||
};
|
||||
}
|
||||
|
||||
public async Task<RequestsViewModel<TvRequests>> GetRequestsLite(int count, int position, OrderFilterModel type)
|
||||
{
|
||||
var shouldHide = await HideFromOtherUsers();
|
||||
List<TvRequests> allRequests;
|
||||
if (shouldHide.Hide)
|
||||
{
|
||||
allRequests = await TvRepository.GetLite(shouldHide.UserId)
|
||||
.OrderByDescending(x => x.ChildRequests.Max(y => y.RequestedDate))
|
||||
.Skip(position).Take(count).ToListAsync();
|
||||
|
||||
// Filter out children
|
||||
|
||||
FilterChildren(allRequests, shouldHide);
|
||||
}
|
||||
else
|
||||
{
|
||||
allRequests = await TvRepository.GetLite()
|
||||
.OrderByDescending(x => x.ChildRequests.Max(y => y.RequestedDate))
|
||||
.Skip(position).Take(count).ToListAsync();
|
||||
}
|
||||
|
||||
allRequests.ForEach(async r => { await CheckForSubscription(shouldHide, r); });
|
||||
|
||||
return new RequestsViewModel<TvRequests>
|
||||
{
|
||||
Collection = allRequests
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<TreeNode<TvRequests, List<ChildRequests>>>> GetRequestsTreeNode(int count, int position)
|
||||
{
|
||||
var shouldHide = await HideFromOtherUsers();
|
||||
|
@ -218,11 +247,61 @@ namespace Ombi.Core.Engine
|
|||
return allRequests;
|
||||
}
|
||||
|
||||
|
||||
public async Task<IEnumerable<TvRequests>> GetRequestsLite()
|
||||
{
|
||||
var shouldHide = await HideFromOtherUsers();
|
||||
List<TvRequests> allRequests;
|
||||
if (shouldHide.Hide)
|
||||
{
|
||||
allRequests = await TvRepository.GetLite(shouldHide.UserId).ToListAsync();
|
||||
|
||||
FilterChildren(allRequests, shouldHide);
|
||||
}
|
||||
else
|
||||
{
|
||||
allRequests = await TvRepository.GetLite().ToListAsync();
|
||||
}
|
||||
|
||||
allRequests.ForEach(async r => { await CheckForSubscription(shouldHide, r); });
|
||||
return allRequests;
|
||||
}
|
||||
|
||||
public async Task<TvRequests> GetTvRequest(int requestId)
|
||||
{
|
||||
var shouldHide = await HideFromOtherUsers();
|
||||
TvRequests request;
|
||||
if (shouldHide.Hide)
|
||||
{
|
||||
request = await TvRepository.Get(shouldHide.UserId).Where(x => x.Id == requestId).FirstOrDefaultAsync();
|
||||
|
||||
FilterChildren(request, shouldHide);
|
||||
}
|
||||
else
|
||||
{
|
||||
request = await TvRepository.Get().Where(x => x.Id == requestId).FirstOrDefaultAsync();
|
||||
}
|
||||
|
||||
await CheckForSubscription(shouldHide, request);
|
||||
return request;
|
||||
}
|
||||
|
||||
private static void FilterChildren(IEnumerable<TvRequests> allRequests, HideResult shouldHide)
|
||||
{
|
||||
// Filter out children
|
||||
foreach (var t in allRequests)
|
||||
{
|
||||
for (var j = 0; j < t.ChildRequests.Count; j++)
|
||||
{
|
||||
FilterChildren(t, shouldHide);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void FilterChildren(TvRequests t, HideResult shouldHide)
|
||||
{
|
||||
// Filter out children
|
||||
|
||||
for (var j = 0; j < t.ChildRequests.Count; j++)
|
||||
{
|
||||
var child = t.ChildRequests[j];
|
||||
|
@ -232,7 +311,7 @@ namespace Ombi.Core.Engine
|
|||
j--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<ChildRequests>> GetAllChldren(int tvId)
|
||||
|
|
|
@ -26,7 +26,7 @@ namespace Ombi.Schedule.Tests
|
|||
_tv = new Mock<ITvRequestRepository>();
|
||||
_movie = new Mock<IMovieRequestRepository>();
|
||||
_notify = new Mock<INotificationService>();
|
||||
Checker = new PlexAvailabilityChecker(_repo.Object, _tv.Object, _movie.Object, _notify.Object, new Mock<IBackgroundJobClient>().Object);
|
||||
Checker = new PlexAvailabilityChecker(_repo.Object, _tv.Object, _movie.Object, _notify.Object, new Mock<IBackgroundJobClient>().Object, null);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -104,13 +104,13 @@ namespace Ombi.Schedule.Jobs.Plex
|
|||
BackgroundJob.Enqueue(() => EpisodeSync.Start());
|
||||
}
|
||||
|
||||
if (processedContent.HasProcessedContent && recentlyAddedSearch)
|
||||
if ((processedContent?.HasProcessedContent ?? false) && recentlyAddedSearch)
|
||||
{
|
||||
// Just check what we send it
|
||||
BackgroundJob.Enqueue(() => Metadata.ProcessPlexServerContent(processedContent.Content));
|
||||
}
|
||||
|
||||
if (processedContent.HasProcessedEpisodes && recentlyAddedSearch)
|
||||
if ((processedContent?.HasProcessedEpisodes ?? false) && recentlyAddedSearch)
|
||||
{
|
||||
BackgroundJob.Enqueue(() => Checker.Start());
|
||||
}
|
||||
|
@ -165,7 +165,7 @@ namespace Ombi.Schedule.Jobs.Plex
|
|||
{
|
||||
Logger.LogInformation("Found some episodes, this must be a recently added sync");
|
||||
var count = 0;
|
||||
foreach (var epInfo in content.Metadata)
|
||||
foreach (var epInfo in content.Metadata ?? new Metadata[]{})
|
||||
{
|
||||
count++;
|
||||
var grandParentKey = epInfo.grandparentRatingKey;
|
||||
|
@ -199,10 +199,12 @@ namespace Ombi.Schedule.Jobs.Plex
|
|||
|
||||
// Save just to make sure we don't leave anything hanging
|
||||
await Repo.SaveChangesAsync();
|
||||
|
||||
if (content.Metadata != null)
|
||||
{
|
||||
var episodesAdded = await EpisodeSync.ProcessEpsiodes(content.Metadata, allEps);
|
||||
episodesProcessed.AddRange(episodesAdded.Select(x => x.Id));
|
||||
}
|
||||
}
|
||||
if (content.viewGroup.Equals(PlexMediaType.Show.ToString(), StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
// Process Shows
|
||||
|
@ -371,6 +373,10 @@ namespace Ombi.Schedule.Jobs.Plex
|
|||
await Repo.Delete(existingKey);
|
||||
existingKey = null;
|
||||
}
|
||||
else if(existingContent == null)
|
||||
{
|
||||
existingContent = await Repo.GetFirstContentByCustom(x => x.Key == show.ratingKey);
|
||||
}
|
||||
}
|
||||
|
||||
if (existingContent != null)
|
||||
|
|
|
@ -14,7 +14,9 @@ namespace Ombi.Store.Repository.Requests
|
|||
Task Delete(TvRequests request);
|
||||
Task DeleteChild(ChildRequests request);
|
||||
IQueryable<TvRequests> Get();
|
||||
IQueryable<TvRequests> GetLite();
|
||||
IQueryable<TvRequests> Get(string userId);
|
||||
IQueryable<TvRequests> GetLite(string userId);
|
||||
Task<TvRequests> GetRequestAsync(int tvDbId);
|
||||
TvRequests GetRequest(int tvDbId);
|
||||
Task Update(TvRequests request);
|
||||
|
|
|
@ -60,6 +60,24 @@ namespace Ombi.Store.Repository.Requests
|
|||
.Where(x => x.ChildRequests.Any(a => a.RequestedUserId == userId))
|
||||
.AsQueryable();
|
||||
}
|
||||
|
||||
public IQueryable<TvRequests> GetLite(string userId)
|
||||
{
|
||||
return Db.TvRequests
|
||||
.Include(x => x.ChildRequests)
|
||||
.ThenInclude(x => x.RequestedUser)
|
||||
.Where(x => x.ChildRequests.Any(a => a.RequestedUserId == userId))
|
||||
.AsQueryable();
|
||||
}
|
||||
|
||||
public IQueryable<TvRequests> GetLite()
|
||||
{
|
||||
return Db.TvRequests
|
||||
.Include(x => x.ChildRequests)
|
||||
.ThenInclude(x => x.RequestedUser)
|
||||
.AsQueryable();
|
||||
}
|
||||
|
||||
public IQueryable<ChildRequests> GetChild()
|
||||
{
|
||||
return Db.ChildRequests
|
||||
|
|
|
@ -70,6 +70,7 @@ export class MovieSearchComponent implements OnInit {
|
|||
result: false,
|
||||
errorMessage: "",
|
||||
};
|
||||
this.popularMovies();
|
||||
}
|
||||
|
||||
public search(text: any) {
|
||||
|
|
|
@ -93,6 +93,7 @@ export class TvSearchComponent implements OnInit {
|
|||
result: false,
|
||||
errorMessage:"",
|
||||
};
|
||||
this.popularShows();
|
||||
}
|
||||
|
||||
public search(text: any) {
|
||||
|
|
|
@ -189,8 +189,28 @@ namespace Ombi.Controllers
|
|||
return await TvRequestEngine.GetRequests(count, position, new OrderFilterModel
|
||||
{
|
||||
OrderType = (OrderType)orderType,
|
||||
AvailabilityFilter = (FilterType) availabilityType,
|
||||
StatusFilter = (FilterType) statusType,
|
||||
AvailabilityFilter = (FilterType)availabilityType,
|
||||
StatusFilter = (FilterType)statusType,
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the tv requests lite.
|
||||
/// </summary>
|
||||
/// <param name="count">The count of items you want to return.</param>
|
||||
/// <param name="position">The position.</param>
|
||||
/// <param name="orderType"></param>
|
||||
/// <param name="statusType"></param>
|
||||
/// <param name="availabilityType"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("tvlite/{count:int}/{position:int}/{orderType:int}/{statusFilterType:int}/{availabilityFilterType:int}")]
|
||||
public async Task<RequestsViewModel<TvRequests>> GetTvRequestsLite(int count, int position, int orderType, int statusType, int availabilityType)
|
||||
{
|
||||
return await TvRequestEngine.GetRequestsLite(count, position, new OrderFilterModel
|
||||
{
|
||||
OrderType = (OrderType)orderType,
|
||||
AvailabilityFilter = (FilterType)availabilityType,
|
||||
StatusFilter = (FilterType)statusType,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -204,6 +224,27 @@ namespace Ombi.Controllers
|
|||
return await TvRequestEngine.GetRequests();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the tv requests without the whole object graph (Does not include seasons/episodes).
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet("tvlite")]
|
||||
public async Task<IEnumerable<TvRequests>> GetTvRequestsLite()
|
||||
{
|
||||
return await TvRequestEngine.GetRequestsLite();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the full request object for the specified requestId
|
||||
/// </summary>
|
||||
/// <param name="requestId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("tv/{requestId:int}")]
|
||||
public async Task<TvRequests> GetTvRequest(int requestId)
|
||||
{
|
||||
return await TvRequestEngine.GetTvRequest(requestId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Requests a tv show/episode/season.
|
||||
/// </summary>
|
||||
|
|
|
@ -2,19 +2,13 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using AutoMapper;
|
||||
using Hangfire;
|
||||
using Hangfire.RecurringJobExtensions;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using Microsoft.Extensions.PlatformAbstractions;
|
||||
using NCrontab;
|
||||
using Ombi.Api.Emby;
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
},
|
||||
"ApplicationSettings": {
|
||||
"Verison": "{{VERSIONNUMBER}}",
|
||||
"OmbiService": "https://ombiservice.azurewebsites.net/",
|
||||
"Branch": "{{BRANCH}}",
|
||||
"FriendlyVersion": "v3.0.0"
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue