diff --git a/src/Ombi.Api.Radarr/IRadarrV3Api.cs b/src/Ombi.Api.Radarr/IRadarrV3Api.cs new file mode 100644 index 000000000..072e8ef51 --- /dev/null +++ b/src/Ombi.Api.Radarr/IRadarrV3Api.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Ombi.Api.Radarr.Models; +using Ombi.Api.Radarr.Models.V3; + +namespace Ombi.Api.Radarr +{ + public interface IRadarrV3Api + { + Task> GetMovies(string apiKey, string baseUrl); + Task> GetProfiles(string apiKey, string baseUrl); + Task> GetRootFolders(string apiKey, string baseUrl); + Task SystemStatus(string apiKey, string baseUrl); + Task GetMovie(int id, string apiKey, string baseUrl); + Task UpdateMovie(MovieResponse movie, string apiKey, string baseUrl); + Task MovieSearch(int[] movieIds, string apiKey, string baseUrl); + Task AddMovie(int tmdbId, string title, int year, int qualityId, string rootPath,string apiKey, string baseUrl, bool searchNow, string minimumAvailability); + Task> GetTags(string apiKey, string baseUrl); + } +} \ No newline at end of file diff --git a/src/Ombi.Api.Radarr/Models/SystemStatus.cs b/src/Ombi.Api.Radarr/Models/SystemStatus.cs deleted file mode 100644 index 0232dba24..000000000 --- a/src/Ombi.Api.Radarr/Models/SystemStatus.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace Ombi.Api.Radarr.Models -{ - public class SystemStatus - { - public string version { get; set; } - public string buildTime { get; set; } - public bool isDebug { get; set; } - public bool isProduction { get; set; } - public bool isAdmin { get; set; } - public bool isUserInteractive { get; set; } - public string startupPath { get; set; } - public string appData { get; set; } - public string osVersion { get; set; } - public bool isMonoRuntime { get; set; } - public bool isMono { get; set; } - public bool isLinux { get; set; } - public bool isOsx { get; set; } - public bool isWindows { get; set; } - public string branch { get; set; } - public string authentication { get; set; } - public string sqliteVersion { get; set; } - public string urlBase { get; set; } - public string runtimeVersion { get; set; } - } -} \ No newline at end of file diff --git a/src/Ombi.Api.Radarr/Models/Cutoff.cs b/src/Ombi.Api.Radarr/Models/V2/Cutoff.cs similarity index 100% rename from src/Ombi.Api.Radarr/Models/Cutoff.cs rename to src/Ombi.Api.Radarr/Models/V2/Cutoff.cs diff --git a/src/Ombi.Api.Radarr/Models/Image.cs b/src/Ombi.Api.Radarr/Models/V2/Image.cs similarity index 100% rename from src/Ombi.Api.Radarr/Models/Image.cs rename to src/Ombi.Api.Radarr/Models/V2/Image.cs diff --git a/src/Ombi.Api.Radarr/Models/Item.cs b/src/Ombi.Api.Radarr/Models/V2/Item.cs similarity index 100% rename from src/Ombi.Api.Radarr/Models/Item.cs rename to src/Ombi.Api.Radarr/Models/V2/Item.cs diff --git a/src/Ombi.Api.Radarr/Models/MovieResponse.cs b/src/Ombi.Api.Radarr/Models/V2/MovieResponse.cs similarity index 100% rename from src/Ombi.Api.Radarr/Models/MovieResponse.cs rename to src/Ombi.Api.Radarr/Models/V2/MovieResponse.cs diff --git a/src/Ombi.Api.Radarr/Models/Quality.cs b/src/Ombi.Api.Radarr/Models/V2/Quality.cs similarity index 100% rename from src/Ombi.Api.Radarr/Models/Quality.cs rename to src/Ombi.Api.Radarr/Models/V2/Quality.cs diff --git a/src/Ombi.Api.Radarr/Models/RadarrAddMovie.cs b/src/Ombi.Api.Radarr/Models/V2/RadarrAddMovie.cs similarity index 100% rename from src/Ombi.Api.Radarr/Models/RadarrAddMovie.cs rename to src/Ombi.Api.Radarr/Models/V2/RadarrAddMovie.cs diff --git a/src/Ombi.Api.Radarr/Models/RadarrAddOptions.cs b/src/Ombi.Api.Radarr/Models/V2/RadarrAddOptions.cs similarity index 100% rename from src/Ombi.Api.Radarr/Models/RadarrAddOptions.cs rename to src/Ombi.Api.Radarr/Models/V2/RadarrAddOptions.cs diff --git a/src/Ombi.Api.Radarr/Models/RadarrError.cs b/src/Ombi.Api.Radarr/Models/V2/RadarrError.cs similarity index 100% rename from src/Ombi.Api.Radarr/Models/RadarrError.cs rename to src/Ombi.Api.Radarr/Models/V2/RadarrError.cs diff --git a/src/Ombi.Api.Radarr/Models/RadarrProfile.cs b/src/Ombi.Api.Radarr/Models/V2/RadarrProfile.cs similarity index 100% rename from src/Ombi.Api.Radarr/Models/RadarrProfile.cs rename to src/Ombi.Api.Radarr/Models/V2/RadarrProfile.cs diff --git a/src/Ombi.Api.Radarr/Models/RadarrRootFolder.cs b/src/Ombi.Api.Radarr/Models/V2/RadarrRootFolder.cs similarity index 100% rename from src/Ombi.Api.Radarr/Models/RadarrRootFolder.cs rename to src/Ombi.Api.Radarr/Models/V2/RadarrRootFolder.cs diff --git a/src/Ombi.Api.Radarr/Models/Ratings.cs b/src/Ombi.Api.Radarr/Models/V2/Ratings.cs similarity index 100% rename from src/Ombi.Api.Radarr/Models/Ratings.cs rename to src/Ombi.Api.Radarr/Models/V2/Ratings.cs diff --git a/src/Ombi.Api.Radarr/Models/V2/SystemStatus.cs b/src/Ombi.Api.Radarr/Models/V2/SystemStatus.cs new file mode 100644 index 000000000..6877708c5 --- /dev/null +++ b/src/Ombi.Api.Radarr/Models/V2/SystemStatus.cs @@ -0,0 +1,7 @@ +namespace Ombi.Api.Radarr.Models +{ + public class SystemStatus + { + public string version { get; set; } + } +} \ No newline at end of file diff --git a/src/Ombi.Api.Radarr/Models/Tag.cs b/src/Ombi.Api.Radarr/Models/V2/Tag.cs similarity index 100% rename from src/Ombi.Api.Radarr/Models/Tag.cs rename to src/Ombi.Api.Radarr/Models/V2/Tag.cs diff --git a/src/Ombi.Api.Radarr/Models/V3/RadarrV3QualityProfile.cs b/src/Ombi.Api.Radarr/Models/V3/RadarrV3QualityProfile.cs new file mode 100644 index 000000000..d985da358 --- /dev/null +++ b/src/Ombi.Api.Radarr/Models/V3/RadarrV3QualityProfile.cs @@ -0,0 +1,29 @@ +namespace Ombi.Api.Radarr.Models.V3 +{ + public class RadarrV3QualityProfile + { + public string name { get; set; } + public bool upgradeAllowed { get; set; } + public int cutoff { get; set; } + public string preferredTags { get; set; } + public Item[] items { get; set; } + public int id { get; set; } + } + + public class Item + { + public Quality quality { get; set; } + public object[] items { get; set; } + public bool allowed { get; set; } + } + + public class Quality + { + public int id { get; set; } + public string name { get; set; } + public string source { get; set; } + public int resolution { get; set; } + public string modifier { get; set; } + } + +} diff --git a/src/Ombi.Api.Radarr/RadarrV3Api.cs b/src/Ombi.Api.Radarr/RadarrV3Api.cs new file mode 100644 index 000000000..dd1d0b279 --- /dev/null +++ b/src/Ombi.Api.Radarr/RadarrV3Api.cs @@ -0,0 +1,159 @@ +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Ombi.Api.Radarr.Models; +using Ombi.Api.Radarr.Models.V3; +using Ombi.Helpers; + +namespace Ombi.Api.Radarr +{ + //https://radarr.video/docs/api/ + public class RadarrV3Api : IRadarrV3Api + { + public RadarrV3Api(ILogger logger, IApi api) + { + Api = api; + Logger = logger; + } + + private IApi Api { get; } + private ILogger Logger { get; } + + public async Task> GetProfiles(string apiKey, string baseUrl) + { + var request = new Request("/api/v3/qualityProfile", baseUrl, HttpMethod.Get); + + AddHeaders(request, apiKey); + return await Api.Request>(request); + } + + // TODO + public async Task> GetRootFolders(string apiKey, string baseUrl) + { + var request = new Request("/api/v3/rootfolder", baseUrl, HttpMethod.Get); + + AddHeaders(request, apiKey); + return await Api.Request>(request); + } + + public async Task SystemStatus(string apiKey, string baseUrl) + { + var request = new Request("/api/v3/status", baseUrl, HttpMethod.Get); + AddHeaders(request, apiKey); + + return await Api.Request(request); + } + + public async Task> GetMovies(string apiKey, string baseUrl) + { + var request = new Request("/api/v3/movie", baseUrl, HttpMethod.Get); + AddHeaders(request, apiKey); + + return await Api.Request>(request); + } + + public async Task GetMovie(int id, string apiKey, string baseUrl) + { + var request = new Request($"/api/v3/movie/{id}", baseUrl, HttpMethod.Get); + AddHeaders(request, apiKey); + + return await Api.Request(request); + } + + public async Task UpdateMovie(MovieResponse movie, string apiKey, string baseUrl) + { + var request = new Request($"/api/v3/movie/", baseUrl, HttpMethod.Put); + AddHeaders(request, apiKey); + request.AddJsonBody(movie); + + return await Api.Request(request); + } + + public async Task AddMovie(int tmdbId, string title, int year, int qualityId, string rootPath, string apiKey, string baseUrl, bool searchNow, string minimumAvailability) + { + var request = new Request("/api/v3/movie", baseUrl, HttpMethod.Post); + + var options = new RadarrAddMovieResponse + { + title = title, + tmdbId = tmdbId, + qualityProfileId = qualityId, + rootFolderPath = rootPath, + titleSlug = title + year, + monitored = true, + year = year, + minimumAvailability = minimumAvailability + }; + + if (searchNow) + { + options.addOptions = new RadarrAddOptions + { + searchForMovie = true + }; + } + + + request.AddHeader("X-Api-Key", apiKey); + request.AddJsonBody(options); + + var response = await Api.RequestContent(request); + + // TODO check if this is still correct, new API docs show validation as a 405 now + try + { + if (response.Contains("\"message\":")) + { + var error = JsonConvert.DeserializeObject(response); + return new RadarrAddMovieResponse { Error = error }; + } + if (response.Contains("\"errorMessage\":")) + { + var error = JsonConvert.DeserializeObject>(response).FirstOrDefault(); + return new RadarrAddMovieResponse { Error = new RadarrError { message = error?.errorMessage } }; + } + return JsonConvert.DeserializeObject(response); + } + catch (JsonSerializationException jse) + { + Logger.LogError(LoggingEvents.RadarrApi, jse, "Error When adding movie to Radarr, Reponse: {0}", response); + } + return null; + } + + public async Task MovieSearch(int[] movieIds, string apiKey, string baseUrl) + { + var result = await Command(apiKey, baseUrl, new { name = "MoviesSearch", movieIds }); + return result != null; + } + + public async Task> GetTags(string apiKey, string baseUrl) + { + var request = new Request("/api/v3/tag", baseUrl, HttpMethod.Get); + AddHeaders(request, apiKey); + + return await Api.Request>(request); + } + + private async Task Command(string apiKey, string baseUrl, object body) + { + var request = new Request($"/api/v3/Command/", baseUrl, HttpMethod.Post); + request.AddHeader("X-Api-Key", apiKey); + request.AddJsonBody(body); + return await Api.Request(request); + } + + /// + /// Adds the required headers and also the authorization header + /// + /// + /// + private void AddHeaders(Request request, string key) + { + request.AddHeader("X-Api-Key", key); + } + } +} diff --git a/src/Ombi.Core/Senders/MovieSender.cs b/src/Ombi.Core/Senders/MovieSender.cs index c9aa5e4f2..33d6afd25 100644 --- a/src/Ombi.Core/Senders/MovieSender.cs +++ b/src/Ombi.Core/Senders/MovieSender.cs @@ -13,6 +13,8 @@ using Ombi.Store.Entities.Requests; using Ombi.Api.DogNzb; using Ombi.Store.Entities; using Ombi.Store.Repository; +using System.Collections.Generic; +using Ombi.Api.Radarr.Models; namespace Ombi.Core.Senders { @@ -20,44 +22,47 @@ namespace Ombi.Core.Senders { public MovieSender(ISettingsService radarrSettings, IRadarrApi api, ILogger log, ISettingsService dogSettings, IDogNzbApi dogApi, ISettingsService cpSettings, - ICouchPotatoApi cpApi, IRepository userProfiles, IRepository requestQueue, INotificationHelper notify) + ICouchPotatoApi cpApi, IRepository userProfiles, IRepository requestQueue, INotificationHelper notify, + IRadarrV3Api radarrV3Api) { - RadarrSettings = radarrSettings; - RadarrApi = api; - Log = log; - DogNzbSettings = dogSettings; - DogNzbApi = dogApi; - CouchPotatoSettings = cpSettings; - CouchPotatoApi = cpApi; + _radarrSettings = radarrSettings; + _radarrV2Api = api; + _log = log; + _dogNzbSettings = dogSettings; + _dogNzbApi = dogApi; + _couchPotatoSettings = cpSettings; + _couchPotatoApi = cpApi; _userProfiles = userProfiles; _requestQueuRepository = requestQueue; _notificationHelper = notify; + _radarrV3Api = radarrV3Api; } - private ISettingsService RadarrSettings { get; } - private IRadarrApi RadarrApi { get; } - private ILogger Log { get; } - private IDogNzbApi DogNzbApi { get; } - private ISettingsService DogNzbSettings { get; } - private ISettingsService CouchPotatoSettings { get; } - private ICouchPotatoApi CouchPotatoApi { get; } + private readonly ISettingsService _radarrSettings; + private readonly IRadarrApi _radarrV2Api; + private readonly ILogger _log; + private readonly IDogNzbApi _dogNzbApi; + private readonly ISettingsService _dogNzbSettings; + private readonly ISettingsService _couchPotatoSettings; + private readonly ICouchPotatoApi _couchPotatoApi; private readonly IRepository _userProfiles; private readonly IRepository _requestQueuRepository; private readonly INotificationHelper _notificationHelper; + private readonly IRadarrV3Api _radarrV3Api; public async Task Send(MovieRequests model) { try { - var cpSettings = await CouchPotatoSettings.GetSettingsAsync(); + var cpSettings = await _couchPotatoSettings.GetSettingsAsync(); //var watcherSettings = await WatcherSettings.GetSettingsAsync(); - var radarrSettings = await RadarrSettings.GetSettingsAsync(); + var radarrSettings = await _radarrSettings.GetSettingsAsync(); if (radarrSettings.Enabled) { return await SendToRadarr(model, radarrSettings); } - var dogSettings = await DogNzbSettings.GetSettingsAsync(); + var dogSettings = await _dogNzbSettings.GetSettingsAsync(); if (dogSettings.Enabled) { await SendToDogNzb(model, dogSettings); @@ -75,7 +80,7 @@ namespace Ombi.Core.Senders } catch (Exception e) { - Log.LogError(e, "Error when sending movie to DVR app, added to the request queue"); + _log.LogError(e, "Error when sending movie to DVR app, added to the request queue"); // Check if already in request quee var existingQueue = await _requestQueuRepository.FirstOrDefaultAsync(x => x.RequestId == model.Id); @@ -108,19 +113,19 @@ namespace Ombi.Core.Senders private async Task SendToCp(FullBaseRequest model, CouchPotatoSettings cpSettings, string cpSettingsDefaultProfileId) { - var result = await CouchPotatoApi.AddMovie(model.ImdbId, cpSettings.ApiKey, model.Title, cpSettings.FullUri, cpSettingsDefaultProfileId); + var result = await _couchPotatoApi.AddMovie(model.ImdbId, cpSettings.ApiKey, model.Title, cpSettings.FullUri, cpSettingsDefaultProfileId); return new SenderResult { Success = result, Sent = true }; } private async Task SendToDogNzb(FullBaseRequest model, DogNzbSettings settings) { var id = model.ImdbId; - return await DogNzbApi.AddMovie(settings.ApiKey, id); + return await _dogNzbApi.AddMovie(settings.ApiKey, id); } private async Task SendToRadarr(MovieRequests model, RadarrSettings settings) { - + var v3 = settings.V3; var qualityToUse = int.Parse(settings.DefaultQualityProfile); var rootFolderPath = settings.DefaultRootPath; @@ -129,7 +134,7 @@ namespace Ombi.Core.Senders if (profiles != null) { if (profiles.RadarrRootPath > 0) - { + { var tempPath = await RadarrRootPath(profiles.RadarrRootPath, settings); if (tempPath.HasValue()) { @@ -152,18 +157,35 @@ namespace Ombi.Core.Senders rootFolderPath = await RadarrRootPath(model.RootPathOverride, settings); } + List movies; // Check if the movie already exists? Since it could be unmonitored - var movies = await RadarrApi.GetMovies(settings.ApiKey, settings.FullUri); + if (settings.V3) + { + movies = await _radarrV3Api.GetMovies(settings.ApiKey, settings.FullUri); + } + else + { + movies = await _radarrV2Api.GetMovies(settings.ApiKey, settings.FullUri); + } var existingMovie = movies.FirstOrDefault(x => x.tmdbId == model.TheMovieDbId); if (existingMovie == null) { - var result = await RadarrApi.AddMovie(model.TheMovieDbId, model.Title, model.ReleaseDate.Year, - qualityToUse, rootFolderPath, settings.ApiKey, settings.FullUri, !settings.AddOnly, - settings.MinimumAvailability); - + RadarrAddMovie result; + if (v3) + { + result = await _radarrV3Api.AddMovie(model.TheMovieDbId, model.Title, model.ReleaseDate.Year, + qualityToUse, rootFolderPath, settings.ApiKey, settings.FullUri, !settings.AddOnly, + settings.MinimumAvailability); + } + else + { + result = await _radarrV2Api.AddMovie(model.TheMovieDbId, model.Title, model.ReleaseDate.Year, + qualityToUse, rootFolderPath, settings.ApiKey, settings.FullUri, !settings.AddOnly, + settings.MinimumAvailability); + } if (!string.IsNullOrEmpty(result.Error?.message)) { - Log.LogError(LoggingEvents.RadarrCacher, result.Error.message); + _log.LogError(LoggingEvents.RadarrCacher, result.Error.message); return new SenderResult { Success = false, Message = result.Error.message, Sent = false }; } if (!string.IsNullOrEmpty(result.title)) @@ -177,11 +199,23 @@ namespace Ombi.Core.Senders { // let's set it to monitored and search for it existingMovie.monitored = true; - await RadarrApi.UpdateMovie(existingMovie, settings.ApiKey, settings.FullUri); - // Search for it - if (!settings.AddOnly) + if (v3) { - await RadarrApi.MovieSearch(new[] { existingMovie.id }, settings.ApiKey, settings.FullUri); + await _radarrV3Api.UpdateMovie(existingMovie, settings.ApiKey, settings.FullUri); + // Search for it + if (!settings.AddOnly) + { + await _radarrV3Api.MovieSearch(new[] { existingMovie.id }, settings.ApiKey, settings.FullUri); + } + } + else + { + await _radarrV2Api.UpdateMovie(existingMovie, settings.ApiKey, settings.FullUri); + // Search for it + if (!settings.AddOnly) + { + await _radarrV2Api.MovieSearch(new[] { existingMovie.id }, settings.ApiKey, settings.FullUri); + } } return new SenderResult { Success = true, Sent = true }; @@ -192,9 +226,18 @@ namespace Ombi.Core.Senders private async Task RadarrRootPath(int overrideId, RadarrSettings settings) { - var paths = await RadarrApi.GetRootFolders(settings.ApiKey, settings.FullUri); - var selectedPath = paths.FirstOrDefault(x => x.id == overrideId); - return selectedPath?.path ?? String.Empty; + if (settings.V3) + { + var paths = await _radarrV3Api.GetRootFolders(settings.ApiKey, settings.FullUri); + var selectedPath = paths.FirstOrDefault(x => x.id == overrideId); + return selectedPath?.path ?? string.Empty; + } + else + { + var paths = await _radarrV2Api.GetRootFolders(settings.ApiKey, settings.FullUri); + var selectedPath = paths.FirstOrDefault(x => x.id == overrideId); + return selectedPath?.path ?? string.Empty; + } } } } \ No newline at end of file diff --git a/src/Ombi.DependencyInjection/IocExtensions.cs b/src/Ombi.DependencyInjection/IocExtensions.cs index b8b7c6e69..76f4879ce 100644 --- a/src/Ombi.DependencyInjection/IocExtensions.cs +++ b/src/Ombi.DependencyInjection/IocExtensions.cs @@ -132,6 +132,7 @@ namespace Ombi.DependencyInjection services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/src/Ombi.Settings/Settings/Models/External/RadarrSettings.cs b/src/Ombi.Settings/Settings/Models/External/RadarrSettings.cs index da35f8dd8..ca9bd266f 100644 --- a/src/Ombi.Settings/Settings/Models/External/RadarrSettings.cs +++ b/src/Ombi.Settings/Settings/Models/External/RadarrSettings.cs @@ -1,10 +1,9 @@ -using Ombi.Core.Settings.Models.External; - -namespace Ombi.Settings.Settings.Models.External +namespace Ombi.Settings.Settings.Models.External { public class RadarrSettings : ExternalSettings { public bool Enabled { get; set; } + public bool V3 { get; set; } public string ApiKey { get; set; } public string DefaultQualityProfile { get; set; } public string DefaultRootPath { get; set; } diff --git a/src/Ombi/ClientApp/src/app/interfaces/ISettings.ts b/src/Ombi/ClientApp/src/app/interfaces/ISettings.ts index 03523ca2e..976a0f95f 100644 --- a/src/Ombi/ClientApp/src/app/interfaces/ISettings.ts +++ b/src/Ombi/ClientApp/src/app/interfaces/ISettings.ts @@ -97,6 +97,7 @@ export interface IRadarrSettings extends IExternalSettings { addOnly: boolean; minimumAvailability: string; scanForAvailability: boolean; + v3: boolean; } export interface ILidarrSettings extends IExternalSettings { diff --git a/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.html b/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.html index 7524813e3..a6016b73f 100644 --- a/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.html +++ b/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.html @@ -11,11 +11,16 @@ Enable
- Advanced + V3
Scan for Availability
+
+ + Do not search for Movies + +
@@ -92,11 +97,6 @@ -
- - Do not search - -
diff --git a/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.ts b/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.ts index cee54b65a..905a72f36 100644 --- a/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.ts +++ b/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.ts @@ -19,7 +19,6 @@ export class RadarrComponent implements OnInit { public minimumAvailabilityOptions: IMinimumAvailability[]; public profilesRunning: boolean; public rootFoldersRunning: boolean; - public advanced = false; public form: FormGroup; constructor(private settingsService: SettingsService, @@ -43,7 +42,8 @@ export class RadarrComponent implements OnInit { port: [x.port, [Validators.required]], addOnly: [x.addOnly], minimumAvailability: [x.minimumAvailability, [Validators.required]], - scanForAvailability: [x.scanForAvailability] + scanForAvailability: [x.scanForAvailability], + v3: [x.v3] }); if (x.defaultQualityProfile) { diff --git a/src/Ombi/Controllers/V1/External/RadarrController.cs b/src/Ombi/Controllers/V1/External/RadarrController.cs index 2fe4db46e..993b37d41 100644 --- a/src/Ombi/Controllers/V1/External/RadarrController.cs +++ b/src/Ombi/Controllers/V1/External/RadarrController.cs @@ -16,18 +16,21 @@ namespace Ombi.Controllers.V1.External [ApiController] [Produces("application/json")] public class RadarrController : ControllerBase - { + { + public RadarrController(IRadarrApi radarr, ISettingsService settings, - ICacheService mem) + ICacheService mem, IRadarrV3Api radarrV3Api) { - RadarrApi = radarr; - RadarrSettings = settings; - Cache = mem; + _radarrApi = radarr; + _radarrSettings = settings; + _cache = mem; + _radarrV3Api = radarrV3Api; } - private IRadarrApi RadarrApi { get; } - private ISettingsService RadarrSettings { get; } - private ICacheService Cache { get; } + private readonly IRadarrApi _radarrApi; + private readonly ISettingsService _radarrSettings; + private readonly ICacheService _cache; + private readonly IRadarrV3Api _radarrV3Api; /// /// Gets the Radarr profiles. /// @@ -35,16 +38,20 @@ namespace Ombi.Controllers.V1.External /// [HttpPost("Profiles")] [PowerUser] - public async Task> GetProfiles([FromBody] RadarrSettings settings) + public async Task GetProfiles([FromBody] RadarrSettings settings) { - return await RadarrApi.GetProfiles(settings.ApiKey, settings.FullUri); + if (settings.V3) + { + return Ok(await _radarrV3Api.GetProfiles(settings.ApiKey, settings.FullUri)); + } + return Ok(await _radarrApi.GetProfiles(settings.ApiKey, settings.FullUri)); } [HttpGet("enabled")] [PowerUser] public async Task Enabled() { - var settings = await RadarrSettings.GetSettingsAsync(); + var settings = await _radarrSettings.GetSettingsAsync(); return settings.Enabled; } @@ -57,7 +64,11 @@ namespace Ombi.Controllers.V1.External [PowerUser] public async Task> GetRootFolders([FromBody] RadarrSettings settings) { - return await RadarrApi.GetRootFolders(settings.ApiKey, settings.FullUri); + if (settings.V3) + { + return await _radarrV3Api.GetRootFolders(settings.ApiKey, settings.FullUri); + } + return await _radarrApi.GetRootFolders(settings.ApiKey, settings.FullUri); } /// @@ -67,12 +78,16 @@ namespace Ombi.Controllers.V1.External /// [HttpGet("Profiles")] [PowerUser] - public async Task> GetProfiles() + public async Task GetProfiles() { - var settings = await RadarrSettings.GetSettingsAsync(); + var settings = await _radarrSettings.GetSettingsAsync(); if (settings.Enabled) { - return await RadarrApi.GetProfiles(settings.ApiKey, settings.FullUri); + if (settings.V3) + { + return Ok(await _radarrV3Api.GetProfiles(settings.ApiKey, settings.FullUri)); + } + return Ok(await _radarrApi.GetProfiles(settings.ApiKey, settings.FullUri)); } return null; } @@ -86,14 +101,18 @@ namespace Ombi.Controllers.V1.External [PowerUser] public async Task> GetRootFolders() { - var settings = await RadarrSettings.GetSettingsAsync(); + var settings = await _radarrSettings.GetSettingsAsync(); if (settings.Enabled) { - return await RadarrApi.GetRootFolders(settings.ApiKey, settings.FullUri); + if (settings.V3) + { + return await _radarrV3Api.GetRootFolders(settings.ApiKey, settings.FullUri); + } + return await _radarrApi.GetRootFolders(settings.ApiKey, settings.FullUri); } return null; } - + /// /// Gets the Radarr tags /// @@ -103,10 +122,10 @@ namespace Ombi.Controllers.V1.External [PowerUser] public async Task> GetTags([FromBody] SonarrSettings settings) { - return await RadarrApi.GetTags(settings.ApiKey, settings.FullUri); + return await _radarrV3Api.GetTags(settings.ApiKey, settings.FullUri); } - + /// /// Gets the Radarr tags /// @@ -115,10 +134,10 @@ namespace Ombi.Controllers.V1.External [PowerUser] public async Task> GetTags() { - var settings = await RadarrSettings.GetSettingsAsync(); + var settings = await _radarrSettings.GetSettingsAsync(); if (settings.Enabled) { - return await RadarrApi.GetTags(settings.ApiKey, settings.FullUri); + return await _radarrV3Api.GetTags(settings.ApiKey, settings.FullUri); } return null;