mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-14 17:22:54 -07:00
Added the Radarr cacher #865
This commit is contained in:
parent
d5ec429893
commit
1133f02d07
18 changed files with 2695 additions and 47 deletions
|
@ -165,10 +165,11 @@ namespace Ombi.Core.Models.Requests
|
|||
|
||||
public async Task<IEnumerable<T>> GetAllAsync(int count, int position)
|
||||
{
|
||||
var blobs = await Repo.GetAllAsync(count, position).ConfigureAwait(false);
|
||||
var blobs = await Repo.GetAllAsync().ConfigureAwait(false);
|
||||
|
||||
var retVal = new List<T>();
|
||||
|
||||
foreach (var b in blobs.Where(x => x.Type == RequestType))
|
||||
foreach (var b in blobs.Where(x => x.Type == RequestType).Skip(position).Take(count))
|
||||
{
|
||||
if (b == null)
|
||||
continue;
|
||||
|
|
11
src/Ombi.Helpers/CacheKeys.cs
Normal file
11
src/Ombi.Helpers/CacheKeys.cs
Normal file
|
@ -0,0 +1,11 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Ombi.Helpers
|
||||
{
|
||||
public static class CacheKeys
|
||||
{
|
||||
public const string RadarrCacher = nameof(RadarrCacher);
|
||||
}
|
||||
}
|
|
@ -6,5 +6,6 @@ namespace Ombi.Helpers
|
|||
{
|
||||
public static EventId ApiException => new EventId(1000);
|
||||
public static EventId CacherException => new EventId(2000);
|
||||
public static EventId RadarrCacherException => new EventId(2001);
|
||||
}
|
||||
}
|
|
@ -6,15 +6,18 @@ namespace Ombi.Schedule
|
|||
{
|
||||
public class JobSetup : IJobSetup
|
||||
{
|
||||
public JobSetup(IPlexContentCacher cacher)
|
||||
public JobSetup(IPlexContentCacher cacher, IRadarrCacher radarrCache)
|
||||
{
|
||||
Cacher = cacher;
|
||||
PlexCacher = cacher;
|
||||
RadarrCacher = radarrCache;
|
||||
}
|
||||
|
||||
private IPlexContentCacher Cacher { get; }
|
||||
private IPlexContentCacher PlexCacher { get; }
|
||||
private IRadarrCacher RadarrCacher { get; }
|
||||
public void Setup()
|
||||
{
|
||||
RecurringJob.AddOrUpdate(() => Cacher.CacheContent(), Cron.Hourly);
|
||||
RecurringJob.AddOrUpdate(() => PlexCacher.CacheContent(), Cron.Hourly);
|
||||
RecurringJob.AddOrUpdate(() => RadarrCacher.Start(), Cron.MonthInterval(61));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
9
src/Ombi.Schedule/Jobs/IRadarrCacher.cs
Normal file
9
src/Ombi.Schedule/Jobs/IRadarrCacher.cs
Normal file
|
@ -0,0 +1,9 @@
|
|||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ombi.Schedule.Jobs
|
||||
{
|
||||
public interface IRadarrCacher
|
||||
{
|
||||
Task Start();
|
||||
}
|
||||
}
|
65
src/Ombi.Schedule/Jobs/RadarrCacher.cs
Normal file
65
src/Ombi.Schedule/Jobs/RadarrCacher.cs
Normal file
|
@ -0,0 +1,65 @@
|
|||
using Microsoft.Extensions.Caching.Memory;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Ombi.Api.Radarr;
|
||||
using Ombi.Core.Settings;
|
||||
using Ombi.Helpers;
|
||||
using Ombi.Settings.Settings.Models.External;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ombi.Schedule.Jobs
|
||||
{
|
||||
public class RadarrCacher : IRadarrCacher
|
||||
{
|
||||
public RadarrCacher(ISettingsService<RadarrSettings> radarr, IRadarrApi api, IMemoryCache cache, ILogger<RadarrCacher> logger)
|
||||
{
|
||||
RadarrSettings = radarr;
|
||||
Api = api;
|
||||
Cache = cache;
|
||||
Log = logger;
|
||||
}
|
||||
|
||||
private ISettingsService<RadarrSettings> RadarrSettings { get; }
|
||||
private IRadarrApi Api { get; }
|
||||
private IMemoryCache Cache { get; }
|
||||
private ILogger<RadarrCacher> Log { get; }
|
||||
|
||||
public async Task Start()
|
||||
{
|
||||
var settings = RadarrSettings.GetSettings();
|
||||
if (settings.Enabled)
|
||||
{
|
||||
try
|
||||
{
|
||||
var movies = await Api.GetMovies(settings.ApiKey, settings.FullUri);
|
||||
if (movies != null)
|
||||
{
|
||||
var movieIds = new List<int>();
|
||||
foreach (var m in movies)
|
||||
{
|
||||
if (m.tmdbId > 0)
|
||||
{
|
||||
movieIds.Add(m.tmdbId);
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.LogError("TMDBId is not > 0 for movie {0}", m.title);
|
||||
}
|
||||
}
|
||||
Cache.Set<IEnumerable<int>>(CacheKeys.RadarrCacher, movieIds);
|
||||
}
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Log.LogError(LoggingEvents.RadarrCacherException, ex, "Failed caching queued items from Radarr");
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Record job run
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Ombi.Api.Plex\Ombi.Api.Plex.csproj" />
|
||||
<ProjectReference Include="..\Ombi.Api.Radarr\Ombi.Api.Radarr.csproj" />
|
||||
<ProjectReference Include="..\Ombi.Core\Ombi.Core.csproj" />
|
||||
<ProjectReference Include="..\Ombi.Settings\Ombi.Settings.csproj" />
|
||||
</ItemGroup>
|
||||
|
|
|
@ -12,7 +12,6 @@ namespace Ombi.Store.Repository
|
|||
RequestBlobs Get(int id);
|
||||
IEnumerable<RequestBlobs> GetAll();
|
||||
Task<IEnumerable<RequestBlobs>> GetAllAsync();
|
||||
Task<IEnumerable<RequestBlobs>> GetAllAsync(int count, int position);
|
||||
Task<RequestBlobs> GetAsync(int id);
|
||||
RequestBlobs Insert(RequestBlobs entity);
|
||||
Task<RequestBlobs> InsertAsync(RequestBlobs entity);
|
||||
|
|
|
@ -62,18 +62,6 @@ namespace Ombi.Store.Repository
|
|||
//}, 5);
|
||||
//return item;
|
||||
}
|
||||
public async Task<IEnumerable<RequestBlobs>> GetAllAsync(int count, int position)
|
||||
{
|
||||
//var key = "GetAll";
|
||||
//var item = await Cache.GetOrSetAsync(key, async () =>
|
||||
//{
|
||||
|
||||
var page = await Db.Requests.ToListAsync().ConfigureAwait(false);
|
||||
return page.Skip(position).Take(count);
|
||||
|
||||
//}, 5);
|
||||
//return item;
|
||||
}
|
||||
|
||||
public RequestBlobs Get(int id)
|
||||
{
|
||||
|
|
|
@ -60,6 +60,7 @@ namespace Ombi
|
|||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
// Add framework services.
|
||||
services.AddMemoryCache();
|
||||
services.AddMvc();
|
||||
services.AddOmbiMappingProfile();
|
||||
services.AddAutoMapper(expression =>
|
||||
|
|
|
@ -58,6 +58,8 @@ var paths = {
|
|||
'./node_modules/bootstrap/dist/js/bootstrap.js',
|
||||
'./node_modules/tether/dist/js/tether.js',
|
||||
'./node_modules/angular2-jwt/angular2-jwt.js',
|
||||
'./node_modules/dragula/dist/dragula.js'
|
||||
|
||||
|
||||
],
|
||||
dest: './lib/'
|
||||
|
@ -75,7 +77,7 @@ var paths = {
|
|||
'./node_modules/primeng/resources/primeng.css',
|
||||
'./node_modules/tether/dist/css/tether.css',
|
||||
'./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css',
|
||||
'./node_modules/dragula/dist/dragula.css'
|
||||
'./node_modules/dragula/dist/dragula.js'
|
||||
],
|
||||
dest: './css/lib/'
|
||||
},
|
||||
|
|
2568
src/Ombi/package-lock.json
generated
Normal file
2568
src/Ombi/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,3 +1,3 @@
|
|||
<div *ngIf="request">
|
||||
<div *ngIf="request" style="background-color:black; color:white;">
|
||||
{{request.title}}
|
||||
</div>
|
|
@ -1,39 +1,50 @@
|
|||
|
||||
|
||||
<style>
|
||||
.landing-box {
|
||||
height: 150px;
|
||||
background: #333333 !important;
|
||||
border-radius: 2%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
box-shadow: 5px 3px 5px black;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div *ngIf="tvRequests">
|
||||
<div class="col-md-4">
|
||||
<md-card>
|
||||
<div class="landing-box">
|
||||
<md-card-title>Title</md-card-title>
|
||||
<div [dragula]='"requests"' [dragulaModel]="tvRequests.new">
|
||||
<div [dragula]='"requests-bag"' [dragulaModel]="tvRequests.new">
|
||||
<br />
|
||||
<br />
|
||||
<request-card *ngFor="let item of tvRequests.new" [request]="item" [attr.data.id]="item.id"></request-card>
|
||||
<request-card *ngFor="let item of tvRequests.new" [request]="item" ></request-card>
|
||||
</div>
|
||||
</md-card>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<md-card>
|
||||
<md-card-title>Title</md-card-title>
|
||||
<div [dragula]='"requests"' [dragulaModel]="tvRequests.approved">
|
||||
<div class="landing-box">
|
||||
|
||||
<div [dragula]='"requests-bag"' [dragulaModel]="tvRequests.approved">
|
||||
<br />
|
||||
<br />
|
||||
<request-card *ngFor="let item of tvRequests.approved" [request]="item" [attr.data.id]="item.id"></request-card>
|
||||
<request-card *ngFor="let item of tvRequests.approved" [request]="item"></request-card>
|
||||
</div>
|
||||
</md-card>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<md-card>
|
||||
<div class="landing-box">
|
||||
<md-card-title>Title</md-card-title>
|
||||
<div style="border: dashed">
|
||||
<div [dragula]='"requests"' [dragulaModel]="tvRequests.available">
|
||||
<div [dragula]='"requests-bag"' [dragulaModel]="tvRequests.available">
|
||||
<br />
|
||||
<br />
|
||||
<request-card *ngFor="let item of tvRequests.available" [request]="item" [attr.data.id]="item.id"></request-card>
|
||||
<request-card *ngFor="let item of tvRequests.available" [request]="item"></request-card>
|
||||
</div>
|
||||
</div>
|
||||
</md-card>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -10,13 +10,7 @@ import { ITvRequestModel, IMovieRequestModel, IRequestGrid } from '../interfaces
|
|||
export class RequestGridComponent implements OnInit {
|
||||
|
||||
constructor(private dragulaService: DragulaService, private requestService: RequestService) {
|
||||
this.dragulaService.setOptions('requests', {
|
||||
removeOnSpill: false,
|
||||
|
||||
});
|
||||
|
||||
this.dragulaService.drop.subscribe((value: any) => {
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -24,7 +24,6 @@ export class ServiceHelpers {
|
|||
// We'd also dig deeper into the error to get a better message
|
||||
let errMsg = (error.message) ? error.message :
|
||||
error.status ? `${error.status} - ${error.statusText}` : 'Server error';
|
||||
console.error(errMsg); // log to console instead
|
||||
return Observable.throw(errMsg);
|
||||
}
|
||||
|
||||
|
@ -51,7 +50,6 @@ export class ServiceAuthHelpers {
|
|||
// We'd also dig deeper into the error to get a better message
|
||||
let errMsg = (error.message) ? error.message :
|
||||
error.status ? `${error.status} - ${error.statusText}` : 'Server error';
|
||||
console.error(errMsg); // log to console instead
|
||||
return Observable.throw(errMsg);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
|
||||
<settings-menu></settings-menu>
|
||||
<div *ngIf="settings">
|
||||
<form class="form-horizontal" method="POST" id="mainForm">
|
||||
<fieldset>
|
||||
<legend>Radarr Settings</legend>
|
||||
|
||||
|
@ -100,5 +99,4 @@
|
|||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
|
||||
<settings-menu></settings-menu>
|
||||
<div *ngIf="settings">
|
||||
<form class="form-horizontal" method="POST" id="mainForm">
|
||||
<fieldset>
|
||||
<legend>Sonarr Settings</legend>
|
||||
|
||||
|
@ -100,5 +99,4 @@
|
|||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue