mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-12 16:22:55 -07:00
Started #2359 !wip
This commit is contained in:
parent
757bc92df7
commit
b8450a5c49
7 changed files with 85 additions and 13 deletions
13
src/Ombi.Api.Sonarr/ISonarrV3Api.cs
Normal file
13
src/Ombi.Api.Sonarr/ISonarrV3Api.cs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Ombi.Api.Sonarr.Models;
|
||||||
|
using System.Net.Http;
|
||||||
|
using Ombi.Api.Sonarr.Models.V3;
|
||||||
|
|
||||||
|
namespace Ombi.Api.Sonarr
|
||||||
|
{
|
||||||
|
public interface ISonarrV3Api : ISonarrApi
|
||||||
|
{
|
||||||
|
Task<IEnumerable<LanguageProfiles>> LanguageProfiles(string apiKey, string baseUrl);
|
||||||
|
}
|
||||||
|
}
|
30
src/Ombi.Api.Sonarr/Models/V3/LanguageProfiles.cs
Normal file
30
src/Ombi.Api.Sonarr/Models/V3/LanguageProfiles.cs
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
namespace Ombi.Api.Sonarr.Models.V3
|
||||||
|
{
|
||||||
|
public class LanguageProfiles
|
||||||
|
{
|
||||||
|
public string name { get; set; }
|
||||||
|
public bool upgradeAllowed { get; set; }
|
||||||
|
public Cutoff cutoff { get; set; }
|
||||||
|
public Languages[] languages { get; set; }
|
||||||
|
public int id { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Cutoff
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Languages
|
||||||
|
{
|
||||||
|
public Language languages { get; set; }
|
||||||
|
public bool allowed { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Language
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -16,18 +16,19 @@ namespace Ombi.Api.Sonarr
|
||||||
Api = api;
|
Api = api;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IApi Api { get; }
|
protected IApi Api { get; }
|
||||||
|
protected virtual string ApiBaseUrl => "/api/";
|
||||||
|
|
||||||
public async Task<IEnumerable<SonarrProfile>> GetProfiles(string apiKey, string baseUrl)
|
public async Task<IEnumerable<SonarrProfile>> GetProfiles(string apiKey, string baseUrl)
|
||||||
{
|
{
|
||||||
var request = new Request("/api/profile", baseUrl, HttpMethod.Get);
|
var request = new Request($"{ApiBaseUrl}profile", baseUrl, HttpMethod.Get);
|
||||||
request.AddHeader("X-Api-Key", apiKey);
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
return await Api.Request<List<SonarrProfile>>(request);
|
return await Api.Request<List<SonarrProfile>>(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<SonarrRootFolder>> GetRootFolders(string apiKey, string baseUrl)
|
public async Task<IEnumerable<SonarrRootFolder>> GetRootFolders(string apiKey, string baseUrl)
|
||||||
{
|
{
|
||||||
var request = new Request("/api/rootfolder", baseUrl, HttpMethod.Get);
|
var request = new Request($"{ApiBaseUrl}rootfolder", baseUrl, HttpMethod.Get);
|
||||||
request.AddHeader("X-Api-Key", apiKey);
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
return await Api.Request<List<SonarrRootFolder>>(request);
|
return await Api.Request<List<SonarrRootFolder>>(request);
|
||||||
}
|
}
|
||||||
|
@ -40,7 +41,7 @@ namespace Ombi.Api.Sonarr
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<IEnumerable<SonarrSeries>> GetSeries(string apiKey, string baseUrl)
|
public async Task<IEnumerable<SonarrSeries>> GetSeries(string apiKey, string baseUrl)
|
||||||
{
|
{
|
||||||
var request = new Request("/api/series", baseUrl, HttpMethod.Get);
|
var request = new Request($"{ApiBaseUrl}series", baseUrl, HttpMethod.Get);
|
||||||
request.AddHeader("X-Api-Key", apiKey);
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
var results = await Api.Request<List<SonarrSeries>>(request);
|
var results = await Api.Request<List<SonarrSeries>>(request);
|
||||||
|
|
||||||
|
@ -63,7 +64,7 @@ namespace Ombi.Api.Sonarr
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<SonarrSeries> GetSeriesById(int id, string apiKey, string baseUrl)
|
public async Task<SonarrSeries> GetSeriesById(int id, string apiKey, string baseUrl)
|
||||||
{
|
{
|
||||||
var request = new Request($"/api/series/{id}", baseUrl, HttpMethod.Get);
|
var request = new Request($"{ApiBaseUrl}series/{id}", baseUrl, HttpMethod.Get);
|
||||||
request.AddHeader("X-Api-Key", apiKey);
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
var result = await Api.Request<SonarrSeries>(request);
|
var result = await Api.Request<SonarrSeries>(request);
|
||||||
if (result?.seasons?.Length > 0)
|
if (result?.seasons?.Length > 0)
|
||||||
|
@ -82,7 +83,7 @@ namespace Ombi.Api.Sonarr
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<SonarrSeries> UpdateSeries(SonarrSeries updated, string apiKey, string baseUrl)
|
public async Task<SonarrSeries> UpdateSeries(SonarrSeries updated, string apiKey, string baseUrl)
|
||||||
{
|
{
|
||||||
var request = new Request("/api/series/", baseUrl, HttpMethod.Put);
|
var request = new Request($"{ApiBaseUrl}series/", baseUrl, HttpMethod.Put);
|
||||||
request.AddHeader("X-Api-Key", apiKey);
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
request.AddJsonBody(updated);
|
request.AddJsonBody(updated);
|
||||||
return await Api.Request<SonarrSeries>(request);
|
return await Api.Request<SonarrSeries>(request);
|
||||||
|
@ -94,7 +95,7 @@ namespace Ombi.Api.Sonarr
|
||||||
{
|
{
|
||||||
return new NewSeries { ErrorMessages = new List<string> { seriesToAdd.Validate() } };
|
return new NewSeries { ErrorMessages = new List<string> { seriesToAdd.Validate() } };
|
||||||
}
|
}
|
||||||
var request = new Request("/api/series/", baseUrl, HttpMethod.Post);
|
var request = new Request($"{ApiBaseUrl}series/", baseUrl, HttpMethod.Post);
|
||||||
|
|
||||||
request.AddHeader("X-Api-Key", apiKey);
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
request.AddJsonBody(seriesToAdd);
|
request.AddJsonBody(seriesToAdd);
|
||||||
|
@ -120,7 +121,7 @@ namespace Ombi.Api.Sonarr
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<IEnumerable<Episode>> GetEpisodes(int seriesId, string apiKey, string baseUrl)
|
public async Task<IEnumerable<Episode>> GetEpisodes(int seriesId, string apiKey, string baseUrl)
|
||||||
{
|
{
|
||||||
var request = new Request($"/api/Episode?seriesId={seriesId}", baseUrl, HttpMethod.Get);
|
var request = new Request($"{ApiBaseUrl}Episode?seriesId={seriesId}", baseUrl, HttpMethod.Get);
|
||||||
request.AddHeader("X-Api-Key", apiKey);
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
return await Api.Request<List<Episode>>(request);
|
return await Api.Request<List<Episode>>(request);
|
||||||
}
|
}
|
||||||
|
@ -134,14 +135,14 @@ namespace Ombi.Api.Sonarr
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<Episode> GetEpisodeById(int episodeId, string apiKey, string baseUrl)
|
public async Task<Episode> GetEpisodeById(int episodeId, string apiKey, string baseUrl)
|
||||||
{
|
{
|
||||||
var request = new Request($"/api/Episode/{episodeId}", baseUrl, HttpMethod.Get);
|
var request = new Request($"{ApiBaseUrl}Episode/{episodeId}", baseUrl, HttpMethod.Get);
|
||||||
request.AddHeader("X-Api-Key", apiKey);
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
return await Api.Request<Episode>(request);
|
return await Api.Request<Episode>(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<EpisodeUpdateResult> UpdateEpisode(Episode episodeToUpdate, string apiKey, string baseUrl)
|
public async Task<EpisodeUpdateResult> UpdateEpisode(Episode episodeToUpdate, string apiKey, string baseUrl)
|
||||||
{
|
{
|
||||||
var request = new Request($"/api/Episode/", baseUrl, HttpMethod.Put);
|
var request = new Request($"{ApiBaseUrl}Episode/", baseUrl, HttpMethod.Put);
|
||||||
request.AddHeader("X-Api-Key", apiKey);
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
request.AddJsonBody(episodeToUpdate);
|
request.AddJsonBody(episodeToUpdate);
|
||||||
return await Api.Request<EpisodeUpdateResult>(request);
|
return await Api.Request<EpisodeUpdateResult>(request);
|
||||||
|
@ -189,7 +190,7 @@ namespace Ombi.Api.Sonarr
|
||||||
|
|
||||||
private async Task<CommandResult> Command(string apiKey, string baseUrl, object body)
|
private async Task<CommandResult> Command(string apiKey, string baseUrl, object body)
|
||||||
{
|
{
|
||||||
var request = new Request($"/api/Command/", baseUrl, HttpMethod.Post);
|
var request = new Request($"{ApiBaseUrl}Command/", baseUrl, HttpMethod.Post);
|
||||||
request.AddHeader("X-Api-Key", apiKey);
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
request.AddJsonBody(body);
|
request.AddJsonBody(body);
|
||||||
return await Api.Request<CommandResult>(request);
|
return await Api.Request<CommandResult>(request);
|
||||||
|
@ -197,7 +198,7 @@ namespace Ombi.Api.Sonarr
|
||||||
|
|
||||||
public async Task<SystemStatus> SystemStatus(string apiKey, string baseUrl)
|
public async Task<SystemStatus> SystemStatus(string apiKey, string baseUrl)
|
||||||
{
|
{
|
||||||
var request = new Request("/api/system/status", baseUrl, HttpMethod.Get);
|
var request = new Request($"{ApiBaseUrl}system/status", baseUrl, HttpMethod.Get);
|
||||||
request.AddHeader("X-Api-Key", apiKey);
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
|
|
||||||
return await Api.Request<SystemStatus>(request);
|
return await Api.Request<SystemStatus>(request);
|
||||||
|
@ -217,7 +218,7 @@ namespace Ombi.Api.Sonarr
|
||||||
ignoreEpisodesWithoutFiles = false,
|
ignoreEpisodesWithoutFiles = false,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
var request = new Request("/api/seasonpass", baseUrl, HttpMethod.Post);
|
var request = new Request($"{ApiBaseUrl}seasonpass", baseUrl, HttpMethod.Post);
|
||||||
request.AddHeader("X-Api-Key", apiKey);
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
request.AddJsonBody(seasonPass);
|
request.AddJsonBody(seasonPass);
|
||||||
|
|
||||||
|
|
25
src/Ombi.Api.Sonarr/SonarrV3Api.cs
Normal file
25
src/Ombi.Api.Sonarr/SonarrV3Api.cs
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Ombi.Api.Sonarr.Models.V3;
|
||||||
|
|
||||||
|
namespace Ombi.Api.Sonarr
|
||||||
|
{
|
||||||
|
public class SonarrV3Api : SonarrApi, ISonarrV3Api
|
||||||
|
{
|
||||||
|
public SonarrV3Api(IApi api) : base(api)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override string ApiBaseUrl => "/api/v3/";
|
||||||
|
|
||||||
|
public async Task<IEnumerable<LanguageProfiles>> LanguageProfiles(string apiKey, string baseUrl)
|
||||||
|
{
|
||||||
|
var request = new Request($"{ApiBaseUrl}languageprofile", baseUrl, HttpMethod.Get);
|
||||||
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
|
|
||||||
|
return await Api.Request<List<LanguageProfiles>>(request);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -107,6 +107,7 @@ namespace Ombi.DependencyInjection
|
||||||
services.AddTransient<IPlexApi, PlexApi>();
|
services.AddTransient<IPlexApi, PlexApi>();
|
||||||
services.AddTransient<IEmbyApi, EmbyApi>();
|
services.AddTransient<IEmbyApi, EmbyApi>();
|
||||||
services.AddTransient<ISonarrApi, SonarrApi>();
|
services.AddTransient<ISonarrApi, SonarrApi>();
|
||||||
|
services.AddTransient<ISonarrV3Api, SonarrV3Api>();
|
||||||
services.AddTransient<ISlackApi, SlackApi>();
|
services.AddTransient<ISlackApi, SlackApi>();
|
||||||
services.AddTransient<ITvMazeApi, TvMazeApi>();
|
services.AddTransient<ITvMazeApi, TvMazeApi>();
|
||||||
services.AddTransient<ITraktApi, TraktApi>();
|
services.AddTransient<ITraktApi, TraktApi>();
|
||||||
|
|
|
@ -18,5 +18,6 @@
|
||||||
public string QualityProfileAnime { get; set; }
|
public string QualityProfileAnime { get; set; }
|
||||||
public string RootPathAnime { get; set; }
|
public string RootPathAnime { get; set; }
|
||||||
public bool AddOnly { get; set; }
|
public bool AddOnly { get; set; }
|
||||||
|
public bool V3 { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -47,6 +47,7 @@ export class SonarrComponent implements OnInit {
|
||||||
port: [x.port, [Validators.required]],
|
port: [x.port, [Validators.required]],
|
||||||
addOnly: [x.addOnly],
|
addOnly: [x.addOnly],
|
||||||
seasonFolders: [x.seasonFolders],
|
seasonFolders: [x.seasonFolders],
|
||||||
|
v3: [x.v3],
|
||||||
});
|
});
|
||||||
|
|
||||||
if (x.qualityProfile) {
|
if (x.qualityProfile) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue