using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Ombi.Api.Lidarr.Models; namespace Ombi.Api.Lidarr { public class LidarrApi : ILidarrApi { public LidarrApi(ILogger logger, IApi api) { Api = api; Logger = logger; } private IApi Api { get; } private ILogger Logger { get; } private const string ApiVersion = "/api/v1"; public Task> GetProfiles(string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/qualityprofile", baseUrl, HttpMethod.Get); AddHeaders(request, apiKey); return Api.Request>(request); } public Task> GetRootFolders(string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/rootfolder", baseUrl, HttpMethod.Get); AddHeaders(request, apiKey); return Api.Request>(request); } public async Task> ArtistLookup(string searchTerm, string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/Artist/lookup", baseUrl, HttpMethod.Get); request.AddQueryString("term", searchTerm); AddHeaders(request, apiKey); return await Api.Request>(request); } public Task> AlbumLookup(string searchTerm, string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/Album/lookup", baseUrl, HttpMethod.Get); request.AddQueryString("term", searchTerm); AddHeaders(request, apiKey); return Api.Request>(request); } public Task GetArtist(int artistId, string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/artist/{artistId}", baseUrl, HttpMethod.Get); AddHeaders(request, apiKey); return Api.Request(request); } public async Task GetArtistByForeignId(string foreignArtistId, string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/artist/lookup", baseUrl, HttpMethod.Get); request.AddQueryString("term", $"lidarr:{foreignArtistId}"); AddHeaders(request, apiKey); return (await Api.Request>(request)).FirstOrDefault(); } public async Task GetAlbumByForeignId(string foreignArtistId, string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/album/lookup", baseUrl, HttpMethod.Get); request.AddQueryString("term", $"lidarr:{foreignArtistId}"); AddHeaders(request, apiKey); var albums = await Api.Request>(request); return albums.FirstOrDefault(); } public Task GetAlbumsByArtist(string foreignArtistId) { var request = new Request(string.Empty, $"https://api.lidarr.audio/api/v0.3/artist/{foreignArtistId}", HttpMethod.Get) {IgnoreBaseUrlAppend = true}; return Api.Request(request); } public Task> GetArtists(string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/artist", baseUrl, HttpMethod.Get); AddHeaders(request, apiKey); return Api.Request>(request); } public Task> GetAllAlbums(string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/album", baseUrl, HttpMethod.Get); AddHeaders(request, apiKey); return Api.Request>(request); } public Task AddArtist(ArtistAdd artist, string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/artist", baseUrl, HttpMethod.Post); request.AddJsonBody(artist); AddHeaders(request, apiKey); return Api.Request(request); } public async Task MontiorAlbum(int albumId, string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/album/monitor", baseUrl, HttpMethod.Put); request.AddJsonBody(new { albumIds = new[] { albumId }, monitored = true }); AddHeaders(request, apiKey); return (await Api.Request>(request)).FirstOrDefault(); } public Task> GetAllAlbumsByArtistId(int artistId, string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/album", baseUrl, HttpMethod.Get); request.AddQueryString("artistId", artistId.ToString()); AddHeaders(request, apiKey); return Api.Request>(request); } public Task> GetLanguageProfile(string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/languageprofile", baseUrl, HttpMethod.Get); AddHeaders(request, apiKey); return Api.Request>(request); } public Task> GetMetadataProfile(string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/metadataprofile", baseUrl, HttpMethod.Get); AddHeaders(request, apiKey); return Api.Request>(request); } public Task Status(string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/system/status", baseUrl, HttpMethod.Get); AddHeaders(request, apiKey); return Api.Request(request); } private void AddHeaders(Request request, string key) { request.AddHeader("X-Api-Key", key); } } }