You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Ombi/src/Ombi/Controllers/V1/External/LidarrController.cs

102 lines
3.5 KiB

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Ombi.Api.Lidarr;
using Ombi.Api.Lidarr.Models;
using Ombi.Attributes;
using Ombi.Core.Settings;
using Ombi.Helpers;
using Ombi.Settings.Settings.Models.External;
namespace Ombi.Controllers.V1.External
{
[PowerUser]
[ApiV1]
[Produces("application/json")]
public class LidarrController : Controller
{
public LidarrController(ILidarrApi lidarr, ISettingsService<LidarrSettings> settings,
ICacheService mem)
{
_lidarrApi = lidarr;
_lidarrSettings = settings;
Cache = mem;
}
private readonly ILidarrApi _lidarrApi;
private readonly ISettingsService<LidarrSettings> _lidarrSettings;
private ICacheService Cache { get; }
/// <summary>
/// Gets the Lidarr profiles.
/// </summary>
/// <param name="settings">The settings.</param>
/// <returns></returns>
[HttpPost("Profiles")]
public async Task<IEnumerable<LidarrProfile>> GetProfiles([FromBody] LidarrSettings settings)
{
return await _lidarrApi.GetProfiles(settings.ApiKey, settings.FullUri);
}
/// <summary>
/// Gets the Lidarr root folders.
/// </summary>
/// <param name="settings">The settings.</param>
/// <returns></returns>
[HttpPost("RootFolders")]
public async Task<IEnumerable<LidarrRootFolder>> GetRootFolders([FromBody] LidarrSettings settings)
{
return await _lidarrApi.GetRootFolders(settings.ApiKey, settings.FullUri);
}
/// <summary>
/// Gets the Lidarr metadata profiles.
/// </summary>
/// <param name="settings">The settings.</param>
/// <returns></returns>
[HttpPost("Metadata")]
public async Task<IEnumerable<MetadataProfile>> GetMetadataProfiles([FromBody] LidarrSettings settings)
{
return await _lidarrApi.GetMetadataProfile(settings.ApiKey, settings.FullUri);
}
/// <summary>
/// Gets the Lidarr profiles using the saved settings
/// <remarks>The data is cached for an hour</remarks>
/// </summary>
/// <returns></returns>
[HttpGet("Profiles")]
public async Task<IEnumerable<LidarrProfile>> GetProfiles()
{
return await Cache.GetOrAddAsync(CacheKeys.LidarrQualityProfiles, async () =>
{
var settings = await _lidarrSettings.GetSettingsAsync();
if (settings.Enabled)
{
return await _lidarrApi.GetProfiles(settings.ApiKey, settings.FullUri);
}
return null;
}, DateTimeOffset.Now.AddHours(1));
}
/// <summary>
/// Gets the Lidarr root folders using the saved settings.
/// <remarks>The data is cached for an hour</remarks>
/// </summary>
/// <returns></returns>
[HttpGet("RootFolders")]
public async Task<IEnumerable<LidarrRootFolder>> GetRootFolders()
{
return await Cache.GetOrAddAsync(CacheKeys.LidarrRootFolders, async () =>
{
var settings = await _lidarrSettings.GetSettingsAsync();
if (settings.Enabled)
{
return await _lidarrApi.GetRootFolders(settings.ApiKey, settings.FullUri);
}
return null;
}, DateTimeOffset.Now.AddHours(1));
}
}
}