using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Ombi.Api.Lidarr.Models; namespace Ombi.Api.Lidarr { public class LidarrApi : ILidarrApi { public LidarrApi(IApi api) { _api = api; } private IApi _api { 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, CancellationToken token = default) { var request = new Request($"{ApiVersion}/artist/lookup", baseUrl, HttpMethod.Get); request.AddQueryString("term", $"lidarr:{foreignArtistId}"); AddHeaders(request, apiKey); return (await _api.Request>(request, token)).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.4/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 async Task AlbumInformation(string albumId, string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/album", baseUrl, HttpMethod.Get); request.AddQueryString("foreignAlbumId", albumId); AddHeaders(request, apiKey); var albums = await _api.Request>(request); return albums.FirstOrDefault(); } /// /// THIS ONLY SUPPORTS ALBUMS THAT THE ARTIST IS IN LIDARR /// /// /// /// /// public Task> GetTracksForAlbum(int albumId, string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/album", baseUrl, HttpMethod.Get); request.AddQueryString("albumId", albumId.ToString()); 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> 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); } public Task AlbumSearch(int[] albumIds, string apiKey, string baseUrl) { var request = new Request($"{ApiVersion}/command/", baseUrl, HttpMethod.Post); request.AddJsonBody(new { name = "AlbumSearch", albumIds }); AddHeaders(request, apiKey); return _api.Request(request); } private void AddHeaders(Request request, string key) { request.AddHeader("X-Api-Key", key); } } }