mirror of
https://github.com/Readarr/Readarr.git
synced 2026-04-26 22:46:37 -04:00
New: Fetch all albums from metadata and filter client-side (#803)
* Retrieve all albums from metadata and filter client-side Should significantly increase the proportion of artist requests hitting cloudflare cache * Add tests for album filtering
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace NzbDrone.Core.MetadataSource.SkyHook.Resource
|
||||
{
|
||||
@@ -20,5 +18,6 @@ namespace NzbDrone.Core.MetadataSource.SkyHook.Resource
|
||||
public List<string> SecondaryTypes { get; set; }
|
||||
public string Title { get; set; }
|
||||
public string Type { get; set; }
|
||||
public List<string> ReleaseStatuses { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,18 +50,9 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
||||
|
||||
_logger.Debug("Getting Artist with LidarrAPI.MetadataID of {0}", foreignArtistId);
|
||||
|
||||
var metadataProfile = _metadataProfileService.Exists(metadataProfileId) ? _metadataProfileService.Get(metadataProfileId) : _metadataProfileService.All().First();
|
||||
|
||||
var primaryTypes = metadataProfile.PrimaryAlbumTypes.Where(s => s.Allowed).Select(s => s.PrimaryAlbumType.Name);
|
||||
var secondaryTypes = metadataProfile.SecondaryAlbumTypes.Where(s => s.Allowed).Select(s => s.SecondaryAlbumType.Name);
|
||||
var releaseStatuses = metadataProfile.ReleaseStatuses.Where(s => s.Allowed).Select(s => s.ReleaseStatus.Name);
|
||||
|
||||
var httpRequest = _requestBuilder.GetRequestBuilder().Create()
|
||||
.SetSegment("route", "artist/" + foreignArtistId)
|
||||
.AddQueryParam("primTypes", string.Join("|", primaryTypes))
|
||||
.AddQueryParam("secTypes", string.Join("|", secondaryTypes))
|
||||
.AddQueryParam("releaseStatuses", string.Join("|", releaseStatuses))
|
||||
.Build();
|
||||
.SetSegment("route", "artist/" + foreignArtistId)
|
||||
.Build();
|
||||
|
||||
httpRequest.AllowAutoRedirect = true;
|
||||
httpRequest.SuppressHttpError = true;
|
||||
@@ -89,11 +80,30 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
||||
artist.Metadata = MapArtistMetadata(httpResponse.Resource);
|
||||
artist.CleanName = Parser.Parser.CleanArtistName(artist.Metadata.Value.Name);
|
||||
artist.SortName = Parser.Parser.NormalizeTitle(artist.Metadata.Value.Name);
|
||||
artist.Albums = httpResponse.Resource.Albums.Select(x => MapAlbum(x, null)).ToList();
|
||||
|
||||
artist.Albums = FilterAlbums(httpResponse.Resource.Albums, metadataProfileId)
|
||||
.Select(x => new Album {
|
||||
ForeignAlbumId = x.Id
|
||||
})
|
||||
.ToList();
|
||||
|
||||
return artist;
|
||||
}
|
||||
|
||||
public IEnumerable<AlbumResource> FilterAlbums(IEnumerable<AlbumResource> albums, int metadataProfileId)
|
||||
{
|
||||
var metadataProfile = _metadataProfileService.Exists(metadataProfileId) ? _metadataProfileService.Get(metadataProfileId) : _metadataProfileService.All().First();
|
||||
var primaryTypes = new HashSet<string>(metadataProfile.PrimaryAlbumTypes.Where(s => s.Allowed).Select(s => s.PrimaryAlbumType.Name));
|
||||
var secondaryTypes = new HashSet<string>(metadataProfile.SecondaryAlbumTypes.Where(s => s.Allowed).Select(s => s.SecondaryAlbumType.Name));
|
||||
var releaseStatuses = new HashSet<string>(metadataProfile.ReleaseStatuses.Where(s => s.Allowed).Select(s => s.ReleaseStatus.Name));
|
||||
|
||||
|
||||
return albums.Where(album => primaryTypes.Contains(album.Type) &&
|
||||
(!album.SecondaryTypes.Any() && secondaryTypes.Contains("Studio") ||
|
||||
album.SecondaryTypes.Any(x => secondaryTypes.Contains(x))) &&
|
||||
album.ReleaseStatuses.Any(x => releaseStatuses.Contains(x)));
|
||||
}
|
||||
|
||||
public Tuple<string, Album, List<ArtistMetadata>> GetAlbumInfo(string foreignAlbumId)
|
||||
{
|
||||
_logger.Debug("Getting Album with LidarrAPI.MetadataID of {0}", foreignAlbumId);
|
||||
@@ -470,7 +480,7 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
||||
}
|
||||
}
|
||||
|
||||
private static SecondaryAlbumType MapSecondaryTypes(string albumType)
|
||||
public static SecondaryAlbumType MapSecondaryTypes(string albumType)
|
||||
{
|
||||
switch (albumType.ToLowerInvariant())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user