mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-14 01:02:57 -07:00
Started the Radarr Settings #865
This commit is contained in:
parent
521f7c3ea0
commit
7595ccf6c4
34 changed files with 637 additions and 33 deletions
15
src/Ombi.Api.Radarr/IRadarrApi.cs
Normal file
15
src/Ombi.Api.Radarr/IRadarrApi.cs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Ombi.Api.Radarr.Models;
|
||||||
|
|
||||||
|
namespace Ombi.Api.Radarr
|
||||||
|
{
|
||||||
|
public interface IRadarrApi
|
||||||
|
{
|
||||||
|
Task<List<MovieResponse>> GetMovies(string apiKey, Uri baseUrl);
|
||||||
|
Task<List<RadarrProfile>> GetProfiles(string apiKey, Uri baseUrl);
|
||||||
|
Task<List<RadarrRootFolder>> GetRootFolders(string apiKey, Uri baseUrl);
|
||||||
|
Task<SystemStatus> SystemStatus(string apiKey, Uri baseUrl);
|
||||||
|
}
|
||||||
|
}
|
8
src/Ombi.Api.Radarr/Models/Cutoff.cs
Normal file
8
src/Ombi.Api.Radarr/Models/Cutoff.cs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
namespace Ombi.Api.Radarr.Models
|
||||||
|
{
|
||||||
|
public class Cutoff
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
}
|
||||||
|
}
|
8
src/Ombi.Api.Radarr/Models/Image.cs
Normal file
8
src/Ombi.Api.Radarr/Models/Image.cs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
namespace Ombi.Api.Radarr.Models
|
||||||
|
{
|
||||||
|
public class Image
|
||||||
|
{
|
||||||
|
public string coverType { get; set; }
|
||||||
|
public string url { get; set; }
|
||||||
|
}
|
||||||
|
}
|
8
src/Ombi.Api.Radarr/Models/Item.cs
Normal file
8
src/Ombi.Api.Radarr/Models/Item.cs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
namespace Ombi.Api.Radarr.Models
|
||||||
|
{
|
||||||
|
public class Item
|
||||||
|
{
|
||||||
|
public Quality quality { get; set; }
|
||||||
|
public bool allowed { get; set; }
|
||||||
|
}
|
||||||
|
}
|
38
src/Ombi.Api.Radarr/Models/MovieResponse.cs
Normal file
38
src/Ombi.Api.Radarr/Models/MovieResponse.cs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Ombi.Api.Radarr.Models
|
||||||
|
{
|
||||||
|
public class MovieResponse
|
||||||
|
{
|
||||||
|
public string title { get; set; }
|
||||||
|
public string sortTitle { get; set; }
|
||||||
|
public double sizeOnDisk { get; set; }
|
||||||
|
public string status { get; set; }
|
||||||
|
public string overview { get; set; }
|
||||||
|
public string inCinemas { get; set; }
|
||||||
|
public string physicalRelease { get; set; }
|
||||||
|
public List<Image> images { get; set; }
|
||||||
|
public string website { get; set; }
|
||||||
|
public bool downloaded { get; set; }
|
||||||
|
public int year { get; set; }
|
||||||
|
public bool hasFile { get; set; }
|
||||||
|
public string youTubeTrailerId { get; set; }
|
||||||
|
public string studio { get; set; }
|
||||||
|
public string path { get; set; }
|
||||||
|
public int profileId { get; set; }
|
||||||
|
public bool monitored { get; set; }
|
||||||
|
public int runtime { get; set; }
|
||||||
|
public string lastInfoSync { get; set; }
|
||||||
|
public string cleanTitle { get; set; }
|
||||||
|
public string imdbId { get; set; }
|
||||||
|
public int tmdbId { get; set; }
|
||||||
|
public string titleSlug { get; set; }
|
||||||
|
public List<string> genres { get; set; }
|
||||||
|
public List<object> tags { get; set; }
|
||||||
|
public string added { get; set; }
|
||||||
|
public Ratings ratings { get; set; }
|
||||||
|
public List<string> alternativeTitles { get; set; }
|
||||||
|
public int qualityProfileId { get; set; }
|
||||||
|
public int id { get; set; }
|
||||||
|
}
|
||||||
|
}
|
8
src/Ombi.Api.Radarr/Models/Quality.cs
Normal file
8
src/Ombi.Api.Radarr/Models/Quality.cs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
namespace Ombi.Api.Radarr.Models
|
||||||
|
{
|
||||||
|
public class Quality
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
}
|
||||||
|
}
|
12
src/Ombi.Api.Radarr/Models/RadarrProfile.cs
Normal file
12
src/Ombi.Api.Radarr/Models/RadarrProfile.cs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Ombi.Api.Radarr.Models
|
||||||
|
{
|
||||||
|
public class RadarrProfile
|
||||||
|
{
|
||||||
|
public string name { get; set; }
|
||||||
|
public Cutoff cutoff { get; set; }
|
||||||
|
public List<Item> items { get; set; }
|
||||||
|
public int id { get; set; }
|
||||||
|
}
|
||||||
|
}
|
9
src/Ombi.Api.Radarr/Models/RadarrRootFolder.cs
Normal file
9
src/Ombi.Api.Radarr/Models/RadarrRootFolder.cs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
namespace Ombi.Api.Radarr.Models
|
||||||
|
{
|
||||||
|
public class RadarrRootFolder
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string path { get; set; }
|
||||||
|
public long freespace { get; set; }
|
||||||
|
}
|
||||||
|
}
|
8
src/Ombi.Api.Radarr/Models/Ratings.cs
Normal file
8
src/Ombi.Api.Radarr/Models/Ratings.cs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
namespace Ombi.Api.Radarr.Models
|
||||||
|
{
|
||||||
|
public class Ratings
|
||||||
|
{
|
||||||
|
public int votes { get; set; }
|
||||||
|
public double value { get; set; }
|
||||||
|
}
|
||||||
|
}
|
25
src/Ombi.Api.Radarr/Models/SystemStatus.cs
Normal file
25
src/Ombi.Api.Radarr/Models/SystemStatus.cs
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
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; }
|
||||||
|
}
|
||||||
|
}
|
17
src/Ombi.Api.Radarr/Ombi.Api.Radarr.csproj
Normal file
17
src/Ombi.Api.Radarr/Ombi.Api.Radarr.csproj
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netstandard1.6</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Ombi.Api\Ombi.Api.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.Extensions.Logging.Abstractions">
|
||||||
|
<HintPath>..\..\..\..\..\.nuget\packages\microsoft.extensions.logging.abstractions\1.1.1\lib\netstandard1.1\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
63
src/Ombi.Api.Radarr/RadarrApi.cs
Normal file
63
src/Ombi.Api.Radarr/RadarrApi.cs
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Ombi.Api.Radarr.Models;
|
||||||
|
|
||||||
|
namespace Ombi.Api.Radarr
|
||||||
|
{
|
||||||
|
public class RadarrApi : IRadarrApi
|
||||||
|
{
|
||||||
|
public RadarrApi(ILogger<RadarrApi> logger)
|
||||||
|
{
|
||||||
|
Api = new Api();
|
||||||
|
Logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Api Api { get; }
|
||||||
|
private ILogger<RadarrApi> Logger { get; }
|
||||||
|
|
||||||
|
public async Task<List<RadarrProfile>> GetProfiles(string apiKey, Uri baseUrl)
|
||||||
|
{
|
||||||
|
var request = new Request(baseUrl.ToString(), "/api/profile", HttpMethod.Get);
|
||||||
|
|
||||||
|
AddHeaders(request, apiKey);
|
||||||
|
return await Api.Request<List<RadarrProfile>>(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<RadarrRootFolder>> GetRootFolders(string apiKey, Uri baseUrl)
|
||||||
|
{
|
||||||
|
var request = new Request(baseUrl.ToString(), "/api/rootfolder", HttpMethod.Get);
|
||||||
|
|
||||||
|
AddHeaders(request, apiKey);
|
||||||
|
return await Api.Request<List<RadarrRootFolder>>(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<SystemStatus> SystemStatus(string apiKey, Uri baseUrl)
|
||||||
|
{
|
||||||
|
var request = new Request(baseUrl.ToString(), "/api/system/status", HttpMethod.Get);
|
||||||
|
AddHeaders(request, apiKey);
|
||||||
|
|
||||||
|
return await Api.Request<SystemStatus>(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<MovieResponse>> GetMovies(string apiKey, Uri baseUrl)
|
||||||
|
{
|
||||||
|
var request = new Request(baseUrl.ToString(), "/api/movie", HttpMethod.Get);
|
||||||
|
AddHeaders(request, apiKey);
|
||||||
|
|
||||||
|
return await Api.Request<List<MovieResponse>>(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the required headers and also the authorization header
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <param name="key"></param>
|
||||||
|
private void AddHeaders(Request request, string key)
|
||||||
|
{
|
||||||
|
request.AddHeader("X-Api-Key", key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
||||||
using Ombi.Core.Claims;
|
using Ombi.Core.Claims;
|
||||||
using Ombi.Core.Engine.Interfaces;
|
using Ombi.Core.Engine.Interfaces;
|
||||||
using Ombi.Core.Models.Requests;
|
using Ombi.Core.Models.Requests;
|
||||||
|
using Ombi.Core.Models.Requests.Movie;
|
||||||
using Ombi.Core.Requests.Models;
|
using Ombi.Core.Requests.Models;
|
||||||
using Ombi.Helpers;
|
using Ombi.Helpers;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Ombi.Core.Models.Requests;
|
using Ombi.Core.Models.Requests;
|
||||||
|
using Ombi.Core.Models.Requests.Movie;
|
||||||
using Ombi.Core.Models.Search;
|
using Ombi.Core.Models.Search;
|
||||||
using Ombi.Store.Entities;
|
using Ombi.Store.Entities;
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ using Hangfire;
|
||||||
using Ombi.Api.TheMovieDb;
|
using Ombi.Api.TheMovieDb;
|
||||||
using Ombi.Api.TvMaze;
|
using Ombi.Api.TvMaze;
|
||||||
using Ombi.Core.Models.Requests;
|
using Ombi.Core.Models.Requests;
|
||||||
|
using Ombi.Core.Models.Requests.Movie;
|
||||||
using Ombi.Core.Models.Search;
|
using Ombi.Core.Models.Search;
|
||||||
using Ombi.Core.Requests.Models;
|
using Ombi.Core.Requests.Models;
|
||||||
using Ombi.Store.Entities;
|
using Ombi.Store.Entities;
|
||||||
|
|
|
@ -8,6 +8,7 @@ using Ombi.Api.TheMovieDb;
|
||||||
using Ombi.Api.TheMovieDb.Models;
|
using Ombi.Api.TheMovieDb.Models;
|
||||||
using Ombi.Core.IdentityResolver;
|
using Ombi.Core.IdentityResolver;
|
||||||
using Ombi.Core.Models.Requests;
|
using Ombi.Core.Models.Requests;
|
||||||
|
using Ombi.Core.Models.Requests.Movie;
|
||||||
using Ombi.Core.Models.Search;
|
using Ombi.Core.Models.Search;
|
||||||
using Ombi.Core.Requests.Models;
|
using Ombi.Core.Requests.Models;
|
||||||
using Ombi.Core.Settings;
|
using Ombi.Core.Settings;
|
||||||
|
|
|
@ -1,10 +1,4 @@
|
||||||
using System;
|
namespace Ombi.Core.Models.Requests.Movie
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Ombi.Store.Entities;
|
|
||||||
|
|
||||||
namespace Ombi.Core.Models.Requests
|
|
||||||
{
|
{
|
||||||
public class MovieRequestModel : BaseRequestModel
|
public class MovieRequestModel : BaseRequestModel
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using Ombi.Core.Requests.Models;
|
using Ombi.Core.Models.Requests.Movie;
|
||||||
|
using Ombi.Core.Requests.Models;
|
||||||
|
|
||||||
namespace Ombi.Core.Models.Requests
|
namespace Ombi.Core.Models.Requests
|
||||||
{
|
{
|
||||||
|
|
72
src/Ombi.Core/MovieSender.cs
Normal file
72
src/Ombi.Core/MovieSender.cs
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Ombi.Core.Models.Requests;
|
||||||
|
using Ombi.Core.Models.Requests.Movie;
|
||||||
|
using Ombi.Core.Settings;
|
||||||
|
using Ombi.Settings.Settings.Models.External;
|
||||||
|
|
||||||
|
namespace Ombi.Core
|
||||||
|
{
|
||||||
|
public class MovieSender
|
||||||
|
{
|
||||||
|
|
||||||
|
public MovieSender(ISettingsService<RadarrSettings> radarrSettings)
|
||||||
|
{
|
||||||
|
RadarrSettings = radarrSettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ISettingsService<RadarrSettings> RadarrSettings { get; }
|
||||||
|
|
||||||
|
public async Task<MovieSenderResult> Send(MovieRequestModel model, string qualityId = "")
|
||||||
|
{
|
||||||
|
//var cpSettings = await CouchPotatoSettings.GetSettingsAsync();
|
||||||
|
//var watcherSettings = await WatcherSettings.GetSettingsAsync();
|
||||||
|
var radarrSettings = await RadarrSettings.GetSettingsAsync();
|
||||||
|
|
||||||
|
//if (cpSettings.Enabled)
|
||||||
|
//{
|
||||||
|
// return SendToCp(model, cpSettings, string.IsNullOrEmpty(qualityId) ? cpSettings.ProfileId : qualityId);
|
||||||
|
//}
|
||||||
|
|
||||||
|
//if (watcherSettings.Enabled)
|
||||||
|
//{
|
||||||
|
// return SendToWatcher(model, watcherSettings);
|
||||||
|
//}
|
||||||
|
|
||||||
|
if (radarrSettings.Enabled)
|
||||||
|
{
|
||||||
|
//return SendToRadarr(model, radarrSettings, qualityId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new MovieSenderResult { Success = false, MovieSent = false, Message = "There are no movie providers enabled!"};
|
||||||
|
}
|
||||||
|
|
||||||
|
//private MovieSenderResult SendToRadarr(MovieRequestModel model, RadarrSettings settings, string qualityId)
|
||||||
|
//{
|
||||||
|
// var qualityProfile = 0;
|
||||||
|
// if (!string.IsNullOrEmpty(qualityId)) // try to parse the passed in quality, otherwise use the settings default quality
|
||||||
|
// {
|
||||||
|
// int.TryParse(qualityId, out qualityProfile);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (qualityProfile <= 0)
|
||||||
|
// {
|
||||||
|
// int.TryParse(settings.QualityProfile, out qualityProfile);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// var rootFolderPath = model.RootFolderSelected <= 0 ? settings.FullRootPath : GetRootPath(model.RootFolderSelected, settings);
|
||||||
|
// var result = RadarrApi.AddMovie(model.ProviderId, model.Title, model.ReleaseDate.Year, qualityProfile, rootFolderPath, settings.ApiKey, settings.FullUri, true);
|
||||||
|
|
||||||
|
// if (!string.IsNullOrEmpty(result.Error?.message))
|
||||||
|
// {
|
||||||
|
// Log.Error(result.Error.message);
|
||||||
|
// return new MovieSenderResult { Result = false, Error = true, MovieSendingEnabled = true };
|
||||||
|
// }
|
||||||
|
// if (!string.IsNullOrEmpty(result.title))
|
||||||
|
// {
|
||||||
|
// return new MovieSenderResult { Result = true, MovieSendingEnabled = true };
|
||||||
|
// }
|
||||||
|
// return new MovieSenderResult { Result = false, MovieSendingEnabled = true };
|
||||||
|
//}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
9
src/Ombi.Core/MovieSenderResult.cs
Normal file
9
src/Ombi.Core/MovieSenderResult.cs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
namespace Ombi.Core
|
||||||
|
{
|
||||||
|
public class MovieSenderResult
|
||||||
|
{
|
||||||
|
public bool Success { get; set; }
|
||||||
|
public string Message { get; set; }
|
||||||
|
public bool MovieSent { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
using Ombi.Core.Requests.Models;
|
using Ombi.Core.Models.Requests.Movie;
|
||||||
|
using Ombi.Core.Requests.Models;
|
||||||
|
|
||||||
namespace Ombi.Core.Models.Requests
|
namespace Ombi.Core.Models.Requests
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Ombi.Api.Emby;
|
using Ombi.Api.Emby;
|
||||||
using Ombi.Api.Plex;
|
using Ombi.Api.Plex;
|
||||||
|
using Ombi.Api.Radarr;
|
||||||
using Ombi.Api.Sonarr;
|
using Ombi.Api.Sonarr;
|
||||||
using Ombi.Api.TheMovieDb;
|
using Ombi.Api.TheMovieDb;
|
||||||
using Ombi.Api.Trakt;
|
using Ombi.Api.Trakt;
|
||||||
|
@ -55,6 +56,7 @@ namespace Ombi.DependencyInjection
|
||||||
services.AddTransient<ISonarrApi, SonarrApi>();
|
services.AddTransient<ISonarrApi, SonarrApi>();
|
||||||
services.AddTransient<ITvMazeApi, TvMazeApi>();
|
services.AddTransient<ITvMazeApi, TvMazeApi>();
|
||||||
services.AddTransient<ITraktApi, TraktApi>();
|
services.AddTransient<ITraktApi, TraktApi>();
|
||||||
|
services.AddTransient<IRadarrApi, RadarrApi>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void RegisterStore(this IServiceCollection services)
|
public static void RegisterStore(this IServiceCollection services)
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Ombi.Api.Emby\Ombi.Api.Emby.csproj" />
|
<ProjectReference Include="..\Ombi.Api.Emby\Ombi.Api.Emby.csproj" />
|
||||||
<ProjectReference Include="..\Ombi.Api.Plex\Ombi.Api.Plex.csproj" />
|
<ProjectReference Include="..\Ombi.Api.Plex\Ombi.Api.Plex.csproj" />
|
||||||
|
<ProjectReference Include="..\Ombi.Api.Radarr\Ombi.Api.Radarr.csproj" />
|
||||||
<ProjectReference Include="..\Ombi.Api.Sonarr\Ombi.Api.Sonarr.csproj" />
|
<ProjectReference Include="..\Ombi.Api.Sonarr\Ombi.Api.Sonarr.csproj" />
|
||||||
<ProjectReference Include="..\Ombi.Api.Trakt\Ombi.Api.Trakt.csproj" />
|
<ProjectReference Include="..\Ombi.Api.Trakt\Ombi.Api.Trakt.csproj" />
|
||||||
<ProjectReference Include="..\Ombi.Api.TvMaze\Ombi.Api.TvMaze.csproj" />
|
<ProjectReference Include="..\Ombi.Api.TvMaze\Ombi.Api.TvMaze.csproj" />
|
||||||
|
|
13
src/Ombi.Settings/Settings/Models/External/RadarrSettings.cs
vendored
Normal file
13
src/Ombi.Settings/Settings/Models/External/RadarrSettings.cs
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
using Ombi.Core.Settings.Models.External;
|
||||||
|
|
||||||
|
namespace Ombi.Settings.Settings.Models.External
|
||||||
|
{
|
||||||
|
public class RadarrSettings : ExternalSettings
|
||||||
|
{
|
||||||
|
public bool Enabled { get; set; }
|
||||||
|
public string ApiKey { get; set; }
|
||||||
|
public string DefaultQualityProfile { get; set; }
|
||||||
|
public string DefaultRootPath { get; set; }
|
||||||
|
public string FullRootPath { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -59,6 +59,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ombi.Api.Trakt", "Ombi.Api.
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ombi.Core.Tests", "Ombi.Core.Tests\Ombi.Core.Tests.csproj", "{FC6A8F7C-9722-4AE4-960D-277ACB0E81CB}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ombi.Core.Tests", "Ombi.Core.Tests\Ombi.Core.Tests.csproj", "{FC6A8F7C-9722-4AE4-960D-277ACB0E81CB}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ombi.Api.Radarr", "Ombi.Api.Radarr\Ombi.Api.Radarr.csproj", "{94D04C1F-E35A-499C-B0A0-9FADEBDF8336}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -141,6 +143,10 @@ Global
|
||||||
{FC6A8F7C-9722-4AE4-960D-277ACB0E81CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{FC6A8F7C-9722-4AE4-960D-277ACB0E81CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{FC6A8F7C-9722-4AE4-960D-277ACB0E81CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{FC6A8F7C-9722-4AE4-960D-277ACB0E81CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{FC6A8F7C-9722-4AE4-960D-277ACB0E81CB}.Release|Any CPU.Build.0 = Release|Any CPU
|
{FC6A8F7C-9722-4AE4-960D-277ACB0E81CB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{94D04C1F-E35A-499C-B0A0-9FADEBDF8336}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{94D04C1F-E35A-499C-B0A0-9FADEBDF8336}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{94D04C1F-E35A-499C-B0A0-9FADEBDF8336}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{94D04C1F-E35A-499C-B0A0-9FADEBDF8336}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -159,5 +165,6 @@ Global
|
||||||
{6EE01B17-0966-4E11-8BC1-A5318A92AB1D} = {EA30DD15-6280-4687-B370-2956EC2E54E5}
|
{6EE01B17-0966-4E11-8BC1-A5318A92AB1D} = {EA30DD15-6280-4687-B370-2956EC2E54E5}
|
||||||
{3880375C-1A7E-4D75-96EC-63B954C42FEA} = {9293CA11-360A-4C20-A674-B9E794431BF5}
|
{3880375C-1A7E-4D75-96EC-63B954C42FEA} = {9293CA11-360A-4C20-A674-B9E794431BF5}
|
||||||
{FC6A8F7C-9722-4AE4-960D-277ACB0E81CB} = {6F42AB98-9196-44C4-B888-D5E409F415A1}
|
{FC6A8F7C-9722-4AE4-960D-277ACB0E81CB} = {6F42AB98-9196-44C4-B888-D5E409F415A1}
|
||||||
|
{94D04C1F-E35A-499C-B0A0-9FADEBDF8336} = {9293CA11-360A-4C20-A674-B9E794431BF5}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
|
@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Ombi.Core.Engine;
|
using Ombi.Core.Engine;
|
||||||
using Ombi.Core.Models.Requests;
|
using Ombi.Core.Models.Requests;
|
||||||
|
using Ombi.Core.Models.Requests.Movie;
|
||||||
using Ombi.Core.Models.Search;
|
using Ombi.Core.Models.Search;
|
||||||
|
|
||||||
namespace Ombi.Controllers
|
namespace Ombi.Controllers
|
||||||
|
|
|
@ -6,6 +6,7 @@ using Ombi.Core.Settings;
|
||||||
using Ombi.Core.Settings.Models;
|
using Ombi.Core.Settings.Models;
|
||||||
using Ombi.Core.Settings.Models.External;
|
using Ombi.Core.Settings.Models.External;
|
||||||
using Ombi.Settings.Settings.Models;
|
using Ombi.Settings.Settings.Models;
|
||||||
|
using Ombi.Settings.Settings.Models.External;
|
||||||
|
|
||||||
namespace Ombi.Controllers
|
namespace Ombi.Controllers
|
||||||
{
|
{
|
||||||
|
@ -81,6 +82,31 @@ namespace Ombi.Controllers
|
||||||
return await Save(settings);
|
return await Save(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet("sonarr")]
|
||||||
|
[AllowAnonymous]
|
||||||
|
public async Task<SonarrSettings> SonarrSettings()
|
||||||
|
{
|
||||||
|
return await Get<SonarrSettings>();
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost("sonarr")]
|
||||||
|
public async Task<bool> SonarrSettings([FromBody]SonarrSettings settings)
|
||||||
|
{
|
||||||
|
return await Save(settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("radarr")]
|
||||||
|
[AllowAnonymous]
|
||||||
|
public async Task<RadarrSettings> RadarrSettings()
|
||||||
|
{
|
||||||
|
return await Get<RadarrSettings>();
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost("radarr")]
|
||||||
|
public async Task<bool> RadarrSettings([FromBody]RadarrSettings settings)
|
||||||
|
{
|
||||||
|
return await Save(settings);
|
||||||
|
}
|
||||||
|
|
||||||
private async Task<T> Get<T>()
|
private async Task<T> Get<T>()
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,5 +54,23 @@
|
||||||
<ProjectReference Include="..\Ombi.TheMovieDbApi\Ombi.Api.TheMovieDb.csproj" />
|
<ProjectReference Include="..\Ombi.TheMovieDbApi\Ombi.Api.TheMovieDb.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Update="wwwroot\app\services\applications\sonarr - Copy.service.js">
|
||||||
|
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Update="wwwroot\app\services\applications\sonarr - Copy.service.ts">
|
||||||
|
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Update="wwwroot\app\settings\radarr\sonarr.component.js">
|
||||||
|
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Update="wwwroot\app\settings\radarr\sonarr.component.js.map">
|
||||||
|
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Update="wwwroot\app\settings\radarr\sonarr.component.ts">
|
||||||
|
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||||
|
</Content>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -53,6 +53,14 @@ export interface ISonarrSettings extends IExternalSettings {
|
||||||
fullRootPath:string,
|
fullRootPath:string,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface IRadarrSettings extends IExternalSettings {
|
||||||
|
enabled: boolean,
|
||||||
|
apiKey: string,
|
||||||
|
defaultQualityProfile: string,
|
||||||
|
defaultRootPath: string,
|
||||||
|
fullRootPath:string,
|
||||||
|
}
|
||||||
|
|
||||||
export interface ILandingPageSettings extends ISettings {
|
export interface ILandingPageSettings extends ISettings {
|
||||||
enabled: boolean,
|
enabled: boolean,
|
||||||
beforeLogin: boolean,
|
beforeLogin: boolean,
|
||||||
|
|
20
src/Ombi/wwwroot/app/services/applications/radarr.service.ts
Normal file
20
src/Ombi/wwwroot/app/services/applications/radarr.service.ts
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { AuthHttp } from 'angular2-jwt';
|
||||||
|
//import { Observable } from 'rxjs/Rx';
|
||||||
|
|
||||||
|
import { ServiceAuthHelpers } from '../service.helpers';
|
||||||
|
//import { IRadarrSettings } from '../../interfaces/ISettings';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class RadarrService extends ServiceAuthHelpers {
|
||||||
|
constructor(http: AuthHttp) {
|
||||||
|
super(http, '/api/v1/Radarr');
|
||||||
|
}
|
||||||
|
|
||||||
|
// getRootFolders(settings: IRadarrSettings): Observable<ISonarrRootFolder[]> {
|
||||||
|
// return this.http.post(`${this.url}/RootFolders/`, JSON.stringify(settings), { headers: this.headers }).map(this.extractData);
|
||||||
|
// }
|
||||||
|
// getQualityProfiles(settings: IRadarrSettings): Observable<ISonarrProfile[]> {
|
||||||
|
// return this.http.post(`${this.url}/Profiles/`, JSON.stringify(settings), { headers: this.headers }).map(this.extractData);
|
||||||
|
// }
|
||||||
|
}
|
|
@ -4,7 +4,15 @@ import { Http } from '@angular/http';
|
||||||
import { Observable } from 'rxjs/Rx';
|
import { Observable } from 'rxjs/Rx';
|
||||||
|
|
||||||
import { ServiceAuthHelpers } from './service.helpers';
|
import { ServiceAuthHelpers } from './service.helpers';
|
||||||
import { IOmbiSettings, IEmbySettings, IPlexSettings, ISonarrSettings,ILandingPageSettings, ICustomizationSettings } from '../interfaces/ISettings';
|
import {
|
||||||
|
IOmbiSettings,
|
||||||
|
IEmbySettings,
|
||||||
|
IPlexSettings,
|
||||||
|
ISonarrSettings,
|
||||||
|
ILandingPageSettings,
|
||||||
|
ICustomizationSettings,
|
||||||
|
IRadarrSettings
|
||||||
|
} from '../interfaces/ISettings';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class SettingsService extends ServiceAuthHelpers {
|
export class SettingsService extends ServiceAuthHelpers {
|
||||||
|
@ -45,6 +53,15 @@ export class SettingsService extends ServiceAuthHelpers {
|
||||||
return this.httpAuth.post(`${this.url}/Sonarr`, JSON.stringify(settings), { headers: this.headers }).map(this.extractData).catch(this.handleError)
|
return this.httpAuth.post(`${this.url}/Sonarr`, JSON.stringify(settings), { headers: this.headers }).map(this.extractData).catch(this.handleError)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getRadarr(): Observable<IRadarrSettings> {
|
||||||
|
return this.httpAuth.get(`${this.url}/Radarr`).map(this.extractData)
|
||||||
|
.catch(this.handleError);
|
||||||
|
}
|
||||||
|
|
||||||
|
saveRadarr(settings: IRadarrSettings): Observable<boolean> {
|
||||||
|
return this.httpAuth.post(`${this.url}/Radarr`, JSON.stringify(settings), { headers: this.headers }).map(this.extractData).catch(this.handleError)
|
||||||
|
}
|
||||||
|
|
||||||
// Using http since we need it not to be authenticated to get the landing page settings
|
// Using http since we need it not to be authenticated to get the landing page settings
|
||||||
getLandingPage(): Observable<ILandingPageSettings> {
|
getLandingPage(): Observable<ILandingPageSettings> {
|
||||||
return this.nonAuthHttp.get(`${this.url}/LandingPage`).map(this.extractData).catch(this.handleError)
|
return this.nonAuthHttp.get(`${this.url}/LandingPage`).map(this.extractData).catch(this.handleError)
|
||||||
|
|
104
src/Ombi/wwwroot/app/settings/radarr/radarr.component.html
Normal file
104
src/Ombi/wwwroot/app/settings/radarr/radarr.component.html
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
|
||||||
|
<settings-menu></settings-menu>
|
||||||
|
<div *ngIf="settings">
|
||||||
|
<form class="form-horizontal" method="POST" id="mainForm">
|
||||||
|
<fieldset>
|
||||||
|
<legend>Sonarr Settings</legend>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="checkbox">
|
||||||
|
<input type="checkbox" [(ngModel)]="settings.enable" ng-checked="settings.enable">
|
||||||
|
<label for="enable">Enable</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input hidden="hidden" name="FullRootPath" id="fullRootPath" value="settings.enable" />
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="Ip" class="control-label">Sonarr Hostname or IP</label>
|
||||||
|
<div class="">
|
||||||
|
<input type="text" class="form-control form-control-custom " [(ngModel)]="settings.ip" id="Ip" name="Ip" placeholder="localhost" value="{{settings.ip}}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="portNumber" class="control-label">Port</label>
|
||||||
|
|
||||||
|
<div class="">
|
||||||
|
<input type="text" class="form-control form-control-custom " [(ngModel)]="settings.port" id="portNumber" name="Port" placeholder="Port Number" value="{{settings.port}}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="ApiKey" class="control-label">Sonarr API Key</label>
|
||||||
|
<div>
|
||||||
|
<input type="text" class="form-control form-control-custom " [(ngModel)]="settings.apiKey" id="ApiKey" name="ApiKey" value="{{settings.apiKey}}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="checkbox">
|
||||||
|
|
||||||
|
<input type="checkbox" id="Ssl" name="Ssl" ng-checked="settings.ssl"><label for="Ssl">SSL</label>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="SubDir" class="control-label">Sonarr Base Url</label>
|
||||||
|
<div>
|
||||||
|
<input type="text" class="form-control form-control-custom" [(ngModel)]="settings.subDir" id="SubDir" name="SubDir" value="@Model.SubDir">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div>
|
||||||
|
<button type="submit" (click)="getProfiles()" class="btn btn-primary-outline">Get Quality Profiles <div *ngIf="profilesRunning" class="fa fa-spinner fa-spin" /></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="select" class="control-label">Quality Profiles</label>
|
||||||
|
<div id="profiles">
|
||||||
|
<select class="form-control form-control-custom" id="select" *ngFor='let quality of qualities'>
|
||||||
|
<option [selected]="qualityProfile === quality.name" [ngValue]="selectedQuality" value='{{quality.id}}'>{{quality.name}}</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<div>
|
||||||
|
<button type="submit" (click)="getRootFolders()" class="btn btn-primary-outline">Get Root Folders <div *ngIf="rootFoldersRunning" class="fa fa-spinner fa-spin" /></button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="rootFolders" class="control-label">Default Root Folders</label>
|
||||||
|
<div id="rootFolders">
|
||||||
|
<select class="form-control form-control-custom" *ngFor='let folder of rootFolders'>
|
||||||
|
<option [selected]="rootPath === folder.name" [ngValue]="selectedRootFolder" value='{{folder.id}}'>{{folder.name}}</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="checkbox">
|
||||||
|
<input type="checkbox" id="SeasonFolders" name="SeasonFolders" ng-checked="settings.seasonFolders">
|
||||||
|
<label for="SeasonFolders">Enable season folders</label>
|
||||||
|
</div>
|
||||||
|
<label>Enabled Season Folders to organize seasons into individual folders within a show.</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div>
|
||||||
|
<button (click)="test()" type="submit" class="btn btn-primary-outline">Test Connectivity <div id="spinner" /></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<div>
|
||||||
|
<button (click)="save()" type="submit" class="btn btn-primary-outline ">Submit</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
80
src/Ombi/wwwroot/app/settings/radarr/radarr.component.ts
Normal file
80
src/Ombi/wwwroot/app/settings/radarr/radarr.component.ts
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { Subject } from 'rxjs/Subject';
|
||||||
|
import "rxjs/add/operator/takeUntil";
|
||||||
|
|
||||||
|
import { IRadarrSettings } from '../../interfaces/ISettings'
|
||||||
|
import { ISonarrProfile, ISonarrRootFolder } from '../../interfaces/ISonarr'
|
||||||
|
import { SettingsService } from '../../services/settings.service';
|
||||||
|
// import { RadarrService } from '../../services/applications/radarr.service';
|
||||||
|
import { NotificationService } from "../../services/notification.service";
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'ombi',
|
||||||
|
moduleId: module.id,
|
||||||
|
templateUrl: './radarr.component.html',
|
||||||
|
})
|
||||||
|
export class RadarrComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor(private settingsService: SettingsService, /*private radarrService: RadarrService,*/ private notificationService: NotificationService) { }
|
||||||
|
|
||||||
|
settings: IRadarrSettings;
|
||||||
|
|
||||||
|
qualities: ISonarrProfile[];
|
||||||
|
rootFolders: ISonarrRootFolder[];
|
||||||
|
|
||||||
|
selectedRootFolder:ISonarrRootFolder;
|
||||||
|
selectedQuality: ISonarrProfile;
|
||||||
|
|
||||||
|
profilesRunning: boolean;
|
||||||
|
rootFoldersRunning: boolean;
|
||||||
|
private subscriptions = new Subject<void>();
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
|
||||||
|
this.settingsService.getRadarr()
|
||||||
|
.takeUntil(this.subscriptions)
|
||||||
|
.subscribe(x => {
|
||||||
|
this.settings = x;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
getProfiles() {
|
||||||
|
// this.profilesRunning = true;
|
||||||
|
// this.sonarrService.getQualityProfiles(this.settings).subscribe(x => {
|
||||||
|
// this.qualities = x;
|
||||||
|
//
|
||||||
|
// this.profilesRunning = false;
|
||||||
|
// this.notificationService.success("Quality Profiles", "Successfully retrevied the Quality Profiles");
|
||||||
|
// });
|
||||||
|
}
|
||||||
|
|
||||||
|
getRootFolders() {
|
||||||
|
// this.rootFoldersRunning = true;
|
||||||
|
// this.sonarrService.getRootFolders(this.settings).subscribe(x => {
|
||||||
|
// this.rootFolders = x;
|
||||||
|
//
|
||||||
|
// this.rootFoldersRunning = false;
|
||||||
|
// this.notificationService.success("Settings Saved", "Successfully retrevied the Root Folders");
|
||||||
|
// });
|
||||||
|
}
|
||||||
|
|
||||||
|
test() {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
save() {
|
||||||
|
this.settingsService.saveRadarr(this.settings).subscribe(x => {
|
||||||
|
if (x) {
|
||||||
|
this.notificationService.success("Settings Saved", "Successfully saved Radarr settings");
|
||||||
|
} else {
|
||||||
|
this.notificationService.success("Settings Saved", "There was an error when saving the Radarr settings");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnDestroy(): void {
|
||||||
|
this.subscriptions.next();
|
||||||
|
this.subscriptions.complete();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,6 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit, OnDestroy } from '@angular/core';
|
||||||
|
import { Subject } from 'rxjs/Subject';
|
||||||
|
import "rxjs/add/operator/takeUntil";
|
||||||
|
|
||||||
import { ISonarrSettings } from '../../interfaces/ISettings'
|
import { ISonarrSettings } from '../../interfaces/ISettings'
|
||||||
import { ISonarrProfile, ISonarrRootFolder } from '../../interfaces/ISonarr'
|
import { ISonarrProfile, ISonarrRootFolder } from '../../interfaces/ISonarr'
|
||||||
|
@ -11,7 +13,7 @@ import { NotificationService } from "../../services/notification.service";
|
||||||
moduleId: module.id,
|
moduleId: module.id,
|
||||||
templateUrl: './sonarr.component.html',
|
templateUrl: './sonarr.component.html',
|
||||||
})
|
})
|
||||||
export class SonarrComponent implements OnInit {
|
export class SonarrComponent implements OnInit, OnDestroy {
|
||||||
|
|
||||||
constructor(private settingsService: SettingsService, private sonarrService: SonarrService, private notificationService: NotificationService) { }
|
constructor(private settingsService: SettingsService, private sonarrService: SonarrService, private notificationService: NotificationService) { }
|
||||||
|
|
||||||
|
@ -20,32 +22,28 @@ export class SonarrComponent implements OnInit {
|
||||||
qualities: ISonarrProfile[];
|
qualities: ISonarrProfile[];
|
||||||
rootFolders: ISonarrRootFolder[];
|
rootFolders: ISonarrRootFolder[];
|
||||||
|
|
||||||
selectedRootFolder:ISonarrRootFolder;
|
selectedRootFolder: ISonarrRootFolder;
|
||||||
selectedQuality: ISonarrProfile;
|
selectedQuality: ISonarrProfile;
|
||||||
|
|
||||||
profilesRunning: boolean;
|
profilesRunning: boolean;
|
||||||
rootFoldersRunning:boolean;
|
rootFoldersRunning: boolean;
|
||||||
|
private subscriptions = new Subject<void>();
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
this.settings = {
|
|
||||||
apiKey: "",
|
this.settingsService.getSonarr()
|
||||||
port: 8081,
|
.takeUntil(this.subscriptions)
|
||||||
fullRootPath: "",
|
.subscribe(x => {
|
||||||
rootPath: "",
|
this.settings = x;
|
||||||
subDir: "",
|
});
|
||||||
ssl: false,
|
|
||||||
seasonFolders: false,
|
|
||||||
qualityProfile: "",
|
|
||||||
ip: "",
|
|
||||||
enable: false,
|
|
||||||
id: 0
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
getProfiles() {
|
getProfiles() {
|
||||||
this.profilesRunning = true;
|
this.profilesRunning = true;
|
||||||
this.sonarrService.getQualityProfiles(this.settings).subscribe(x => {
|
this.sonarrService.getQualityProfiles(this.settings)
|
||||||
|
.takeUntil(this.subscriptions)
|
||||||
|
.subscribe(x => {
|
||||||
this.qualities = x;
|
this.qualities = x;
|
||||||
|
|
||||||
this.profilesRunning = false;
|
this.profilesRunning = false;
|
||||||
|
@ -55,7 +53,9 @@ export class SonarrComponent implements OnInit {
|
||||||
|
|
||||||
getRootFolders() {
|
getRootFolders() {
|
||||||
this.rootFoldersRunning = true;
|
this.rootFoldersRunning = true;
|
||||||
this.sonarrService.getRootFolders(this.settings).subscribe(x => {
|
this.sonarrService.getRootFolders(this.settings)
|
||||||
|
.takeUntil(this.subscriptions)
|
||||||
|
.subscribe(x => {
|
||||||
this.rootFolders = x;
|
this.rootFolders = x;
|
||||||
|
|
||||||
this.rootFoldersRunning = false;
|
this.rootFoldersRunning = false;
|
||||||
|
@ -68,12 +68,19 @@ export class SonarrComponent implements OnInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
save() {
|
save() {
|
||||||
this.settingsService.saveSonarr(this.settings).subscribe(x => {
|
this.settingsService.saveSonarr(this.settings)
|
||||||
|
.takeUntil(this.subscriptions)
|
||||||
|
.subscribe(x => {
|
||||||
if (x) {
|
if (x) {
|
||||||
this.notificationService.success("Settings Saved", "Successfully saved Ombi settings");
|
this.notificationService.success("Settings Saved", "Successfully saved Sonarr settings");
|
||||||
} else {
|
} else {
|
||||||
this.notificationService.success("Settings Saved", "There was an error when saving the Ombi settings");
|
this.notificationService.success("Settings Saved", "There was an error when saving the Sonarr settings");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ngOnDestroy(): void {
|
||||||
|
this.subscriptions.next();
|
||||||
|
this.subscriptions.complete();
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue