mirror of
https://github.com/Readarr/Readarr.git
synced 2026-04-20 21:54:25 -04:00
Merging feature/db into feature/trackParse
This commit is contained in:
@@ -74,17 +74,14 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
||||
}
|
||||
|
||||
|
||||
public Tuple<Artist, List<Track>> GetArtistInfo(string spotifyId)
|
||||
public Tuple<Artist, List<Album>> GetArtistInfo(string foreignArtistId)
|
||||
{
|
||||
|
||||
_logger.Debug("Getting Artist with SpotifyId of {0}", spotifyId);
|
||||
|
||||
///v1/albums/{id}
|
||||
//
|
||||
_logger.Debug("Getting Artist with SpotifyId of {0}", foreignArtistId);
|
||||
|
||||
// We need to perform a direct lookup of the artist
|
||||
var httpRequest = _requestBuilder.Create()
|
||||
.SetSegment("route", "artists/" + spotifyId)
|
||||
.SetSegment("route", "artists/" + foreignArtistId)
|
||||
//.SetSegment("route", "search")
|
||||
//.AddQueryParam("type", "artist,album")
|
||||
//.AddQueryParam("q", spotifyId.ToString())
|
||||
@@ -95,14 +92,14 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
||||
httpRequest.AllowAutoRedirect = true;
|
||||
httpRequest.SuppressHttpError = true;
|
||||
|
||||
var httpResponse = _httpClient.Get<ArtistInfoResource>(httpRequest);
|
||||
var httpResponse = _httpClient.Get<ArtistResource>(httpRequest);
|
||||
|
||||
|
||||
if (httpResponse.HasHttpError)
|
||||
{
|
||||
if (httpResponse.StatusCode == HttpStatusCode.NotFound)
|
||||
{
|
||||
throw new ArtistNotFoundException(spotifyId);
|
||||
throw new ArtistNotFoundException(foreignArtistId);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -110,92 +107,96 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
||||
}
|
||||
}
|
||||
|
||||
Artist artist = new Artist();
|
||||
artist.ArtistName = httpResponse.Resource.Name;
|
||||
artist.SpotifyId = httpResponse.Resource.Id;
|
||||
artist.Genres = httpResponse.Resource.Genres;
|
||||
// It is safe to assume an id will only return one Artist back
|
||||
var albums = httpResponse.Resource.Albums.Select(MapAlbum);
|
||||
var artist = MapArtist(httpResponse.Resource);
|
||||
|
||||
var albumRet = MapAlbums(artist);
|
||||
artist = albumRet.Item1;
|
||||
//artist.Name = httpResponse.Resource.Artists.Items[0].ArtistName;
|
||||
|
||||
//artist.ForeignArtistId = httpResponse.Resource.Artists.Items[0].Id;
|
||||
//artist.Genres = httpResponse.Resource.Artists.Items[0].Genres;
|
||||
|
||||
//var albumRet = MapAlbums(artist);
|
||||
//artist = albumRet.Item1;
|
||||
|
||||
return new Tuple<Artist, List<Track>>(albumRet.Item1, albumRet.Item2);
|
||||
return new Tuple<Artist, List<Album>>(artist, albums.ToList());
|
||||
}
|
||||
|
||||
private Tuple<Artist, List<Track>> MapAlbums(Artist artist)
|
||||
{
|
||||
|
||||
// Find all albums for the artist and all tracks for said album
|
||||
///v1/artists/{id}/albums
|
||||
var httpRequest = _requestBuilder.Create()
|
||||
.SetSegment("route", "artists/" + artist.SpotifyId + "/albums")
|
||||
.Build();
|
||||
httpRequest.AllowAutoRedirect = true;
|
||||
httpRequest.SuppressHttpError = true;
|
||||
|
||||
var httpResponse = _httpClient.Get<AlbumResultResource>(httpRequest);
|
||||
//private Tuple<Artist, List<Track>> MapAlbums(Artist artist)
|
||||
//{
|
||||
|
||||
if (httpResponse.HasHttpError)
|
||||
{
|
||||
throw new HttpException(httpRequest, httpResponse);
|
||||
}
|
||||
// // Find all albums for the artist and all tracks for said album
|
||||
// ///v1/artists/{id}/albums
|
||||
// var httpRequest = _requestBuilder.Create()
|
||||
// .SetSegment("route", "artists/" + artist.ForeignArtistId + "/albums")
|
||||
// .Build();
|
||||
// httpRequest.AllowAutoRedirect = true;
|
||||
// httpRequest.SuppressHttpError = true;
|
||||
|
||||
List<Track> masterTracks = new List<Track>();
|
||||
List<Album> albums = new List<Album>();
|
||||
foreach(var albumResource in httpResponse.Resource.Items)
|
||||
{
|
||||
Album album = new Album();
|
||||
album.AlbumId = albumResource.Id;
|
||||
album.Title = albumResource.Name;
|
||||
album.ArtworkUrl = albumResource.Images.Count > 0 ? albumResource.Images[0].Url : "";
|
||||
album.Tracks = MapTracksToAlbum(album);
|
||||
masterTracks.InsertRange(masterTracks.Count, album.Tracks);
|
||||
albums.Add(album);
|
||||
}
|
||||
// var httpResponse = _httpClient.Get<AlbumResultResource>(httpRequest);
|
||||
|
||||
// TODO: We now need to get all tracks for each album
|
||||
// if (httpResponse.HasHttpError)
|
||||
// {
|
||||
// throw new HttpException(httpRequest, httpResponse);
|
||||
// }
|
||||
|
||||
artist.Albums = albums;
|
||||
return new Tuple<Artist, List<Track>>(artist, masterTracks);
|
||||
}
|
||||
// List<Track> masterTracks = new List<Track>();
|
||||
// List<Album> albums = new List<Album>();
|
||||
// foreach(var albumResource in httpResponse.Resource.Items)
|
||||
// {
|
||||
// Album album = new Album();
|
||||
// album.AlbumId = albumResource.Id;
|
||||
// album.Title = albumResource.AlbumName;
|
||||
// album.ArtworkUrl = albumResource.Images.Count > 0 ? albumResource.Images[0].Url : "";
|
||||
// album.Tracks = MapTracksToAlbum(album);
|
||||
// masterTracks.InsertRange(masterTracks.Count, album.Tracks);
|
||||
// albums.Add(album);
|
||||
// }
|
||||
|
||||
private List<Track> MapTracksToAlbum(Album album)
|
||||
{
|
||||
var httpRequest = _requestBuilder.Create()
|
||||
.SetSegment("route", "albums/" + album.AlbumId + "/tracks")
|
||||
.Build();
|
||||
// // TODO: We now need to get all tracks for each album
|
||||
|
||||
httpRequest.AllowAutoRedirect = true;
|
||||
httpRequest.SuppressHttpError = true;
|
||||
// artist.Albums = albums;
|
||||
// return new Tuple<Artist, List<Track>>(artist, masterTracks);
|
||||
//}
|
||||
|
||||
var httpResponse = _httpClient.Get<TrackResultResource>(httpRequest);
|
||||
//private List<Track> MapTracksToAlbum(Album album)
|
||||
//{
|
||||
// var httpRequest = _requestBuilder.Create()
|
||||
// .SetSegment("route", "albums/" + album.AlbumId + "/tracks")
|
||||
// .Build();
|
||||
|
||||
if (httpResponse.HasHttpError)
|
||||
{
|
||||
throw new HttpException(httpRequest, httpResponse);
|
||||
}
|
||||
// httpRequest.AllowAutoRedirect = true;
|
||||
// httpRequest.SuppressHttpError = true;
|
||||
|
||||
List<Track> tracks = new List<Track>();
|
||||
foreach(var trackResource in httpResponse.Resource.Items)
|
||||
{
|
||||
Track track = new Track();
|
||||
track.AlbumId = album.AlbumId;
|
||||
//track.Album = album; // This will cause infinite loop when trying to serialize.
|
||||
// TODO: Implement more track mapping
|
||||
//track.Artist = trackResource.Artists
|
||||
//track.ArtistId = album.
|
||||
track.SpotifyTrackId = trackResource.Id;
|
||||
track.ArtistSpotifyId = trackResource.Artists.Count > 0 ? trackResource.Artists[0].Id : null;
|
||||
track.Explict = trackResource.Explicit;
|
||||
track.Compilation = trackResource.Artists.Count > 1;
|
||||
track.TrackNumber = trackResource.TrackNumber;
|
||||
track.Title = trackResource.Name;
|
||||
tracks.Add(track);
|
||||
}
|
||||
// var httpResponse = _httpClient.Get<TrackResultResource>(httpRequest);
|
||||
|
||||
return tracks;
|
||||
}
|
||||
// if (httpResponse.HasHttpError)
|
||||
// {
|
||||
// throw new HttpException(httpRequest, httpResponse);
|
||||
// }
|
||||
|
||||
// List<Track> tracks = new List<Track>();
|
||||
// foreach (var trackResource in httpResponse.Resource.Items)
|
||||
// {
|
||||
// Track track = new Track();
|
||||
// track.AlbumId = album.AlbumId;
|
||||
// //track.Album = album; // This will cause infinite loop when trying to serialize.
|
||||
// // TODO: Implement more track mapping
|
||||
// //track.Artist = trackResource.Artists
|
||||
// //track.ArtistId = album.
|
||||
// track.SpotifyTrackId = trackResource.Id;
|
||||
// track.ArtistSpotifyId = trackResource.Artists.Count > 0 ? trackResource.Artists[0].Id : null;
|
||||
// track.Explict = trackResource.Explicit;
|
||||
// track.Compilation = trackResource.Artists.Count > 1;
|
||||
// track.TrackNumber = trackResource.TrackNumber;
|
||||
// track.Title = trackResource.TrackName;
|
||||
// tracks.Add(track);
|
||||
// }
|
||||
|
||||
// return tracks;
|
||||
//}
|
||||
|
||||
|
||||
public List<Artist> SearchForNewArtist(string title)
|
||||
@@ -226,18 +227,32 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
||||
|
||||
var httpRequest = _requestBuilder.Create()
|
||||
.SetSegment("route", "search")
|
||||
.AddQueryParam("type", "artist,album")
|
||||
.AddQueryParam("q", title.ToLower().Trim())
|
||||
.AddQueryParam("type", "artist") // TODO: LidarrAPI.Metadata is getting , encoded. Needs to be raw ,
|
||||
.AddQueryParam("query", title.ToLower().Trim())
|
||||
.Build();
|
||||
|
||||
|
||||
|
||||
var httpResponse = _httpClient.Get<ArtistResource>(httpRequest);
|
||||
var httpResponse = _httpClient.Get<List<ArtistResource>>(httpRequest);
|
||||
|
||||
return httpResponse.Resource.SelectList(MapArtist);
|
||||
//List<Artist> artists = MapArtists(httpResponse.Resource);
|
||||
//List<Artist> artists = new List<Artist>();
|
||||
//foreach (var artistResource in httpResponse.Resource.Artists.Items)
|
||||
//{
|
||||
// Artist artist = new Artist();
|
||||
// artist.Name = artistResource.ArtistName;
|
||||
// artist.ForeignArtistId = artistResource.Id; // TODO: Rename spotifyId to LidarrId
|
||||
// artist.Genres = artistResource.Genres;
|
||||
// artist.NameSlug = Parser.Parser.CleanArtistTitle(artist.Name);
|
||||
// artist.CleanName = Parser.Parser.CleanArtistTitle(artist.Name);
|
||||
//artist.Images = artistResource.Images;
|
||||
|
||||
// artists.Add(artist);
|
||||
//}
|
||||
|
||||
|
||||
List<Artist> artists = MapArtists(httpResponse.Resource);
|
||||
|
||||
return artists;
|
||||
//return artists;
|
||||
}
|
||||
catch (HttpException)
|
||||
{
|
||||
@@ -250,39 +265,50 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
||||
}
|
||||
}
|
||||
|
||||
private Artist MapArtistInfo(ArtistInfoResource resource)
|
||||
private static Album MapAlbum(AlbumResource resource)
|
||||
{
|
||||
// This expects ArtistInfoResource, thus just need to populate one artist
|
||||
Artist artist = new Artist();
|
||||
//artist.Overview = resource.artistBio;
|
||||
//artist.ArtistName = resource.name;
|
||||
//foreach(var genre in resource.genreNames)
|
||||
//{
|
||||
// artist.Genres.Add(genre);
|
||||
//}
|
||||
Album album = new Album();
|
||||
album.Title = resource.Title;
|
||||
album.ForeignAlbumId = resource.Id;
|
||||
album.ReleaseDate = resource.ReleaseDate;
|
||||
album.CleanTitle = Parser.Parser.CleanArtistTitle(album.Title);
|
||||
album.AlbumType = resource.Type;
|
||||
|
||||
return artist;
|
||||
}
|
||||
|
||||
private List<Artist> MapArtists(ArtistResource resource)
|
||||
{
|
||||
var tracks = resource.Tracks.Select(MapTrack);
|
||||
album.Tracks = tracks.ToList();
|
||||
|
||||
|
||||
List<Artist> artists = new List<Artist>();
|
||||
foreach(var artistResource in resource.Artists.Items)
|
||||
{
|
||||
Artist artist = new Artist();
|
||||
artist.ArtistName = artistResource.Name;
|
||||
artist.SpotifyId = artistResource.Id;
|
||||
artist.Genres = artistResource.Genres;
|
||||
artist.ArtistSlug = Parser.Parser.CleanArtistTitle(artist.ArtistName);
|
||||
artists.Add(artist);
|
||||
}
|
||||
return album;
|
||||
}
|
||||
|
||||
private static Track MapTrack(TrackResource resource)
|
||||
{
|
||||
Track track = new Track();
|
||||
track.Title = resource.TrackName;
|
||||
track.ForeignTrackId = resource.Id;
|
||||
track.TrackNumber = resource.TrackNumber;
|
||||
return track;
|
||||
}
|
||||
|
||||
private static Artist MapArtist(ArtistResource resource)
|
||||
{
|
||||
|
||||
Artist artist = new Artist();
|
||||
|
||||
artist.Name = resource.ArtistName;
|
||||
artist.ForeignArtistId = resource.Id; // TODO: Rename spotifyId to LidarrId
|
||||
artist.Genres = resource.Genres;
|
||||
artist.Overview = resource.Overview;
|
||||
artist.NameSlug = Parser.Parser.CleanArtistTitle(artist.Name);
|
||||
artist.CleanName = Parser.Parser.CleanArtistTitle(artist.Name);
|
||||
//artist.Images = resource.Artists.Items[0].Images;
|
||||
|
||||
|
||||
|
||||
// Maybe? Get all the albums for said artist
|
||||
|
||||
|
||||
return artists;
|
||||
return artist;
|
||||
}
|
||||
|
||||
//private Album MapAlbum(AlbumResource albumQuery)
|
||||
|
||||
Reference in New Issue
Block a user