Enhance TmdbMetadataProvider to support fallback for localized poster retrieval
Updated the TmdbMetadataProvider class to implement a fallback mechanism for obtaining show posters when localized images are unavailable. Introduced a new method, NeutralPosterPathAsync, which retrieves a language-neutral poster if the localized one is missing. Additionally, updated related tests to verify the correct behavior of this fallback logic, ensuring that shows without localized posters still display appropriate imagery.
This commit is contained in:
@@ -105,9 +105,10 @@ public class TmdbMetadataProviderTests
|
||||
[Fact]
|
||||
public async Task GetShow_Movie_PrefersTheatricalCertification()
|
||||
{
|
||||
// Постер в ответе есть — значит, добора язык-нейтрального не будет и запрос ровно один.
|
||||
var http = FakeHttpClientFactory.Json(
|
||||
"""
|
||||
{"title":"Фильм","release_dates":{"results":[{"iso_3166_1":"US","release_dates":[
|
||||
{"title":"Фильм","poster_path":"/p.jpg","release_dates":{"results":[{"iso_3166_1":"US","release_dates":[
|
||||
{"type":4,"certification":"R"},
|
||||
{"type":3,"certification":"PG-13"}
|
||||
]}]}}
|
||||
@@ -121,6 +122,30 @@ public class TmdbMetadataProviderTests
|
||||
Assert.Equal("PG-13", show?.ContentRating);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// TMDb отдаёт постер под запрошенный язык, и у шоу без локализованной обложки поле пустое —
|
||||
/// хотя в поиске картинка была. Без добора «Применить» молча оставляло бы шоу без постера.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task GetShow_WithoutLocalizedPoster_FallsBackToNeutralOne()
|
||||
{
|
||||
// Локализованный ответ (с language) — без постера, язык-нейтральный — с ним.
|
||||
var http = new FakeHttpClientFactory(url =>
|
||||
FakeHttpClientFactory.Ok(
|
||||
url.Contains("language=", StringComparison.Ordinal)
|
||||
? """{"name":"Сериал"}"""
|
||||
: """{"name":"Сериал","poster_path":"/neutral.jpg"}"""
|
||||
)
|
||||
);
|
||||
|
||||
var show = await Provider(http).GetShowAsync("9", ShowKind.Series, CancellationToken.None);
|
||||
|
||||
Assert.Equal(2, http.Urls.Count);
|
||||
Assert.DoesNotContain("language=", http.LastUrl);
|
||||
Assert.Contains("/tv/9", http.LastUrl);
|
||||
Assert.EndsWith("/neutral.jpg", show?.PosterUrl);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetShow_Movie_FallsBackToAnyReleaseCertification()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user