/// <inheritdoc/> public async IAsyncEnumerable <Movie> SearchAsync(string name, int year = 0, string country = "AU", [System.Runtime.CompilerServices.EnumeratorCancellation] CancellationToken cancellationToken = default) { using var client = new TMDbLib.Client.TMDbClient("b866acbf3519560a3879b55d2d9cb1cb") { DefaultCountry = country, DefaultLanguage = "en", DefaultImageLanguage = "en", }; var movies = await client.SearchMovieAsync(name, year : year, cancellationToken : cancellationToken).ConfigureAwait(false); foreach (var result in movies.Results) { var movie = await client.GetMovieAsync(result.Id, TMDbLib.Objects.Movies.MovieMethods.Credits | TMDbLib.Objects.Movies.MovieMethods.Releases | TMDbLib.Objects.Movies.MovieMethods.Images, cancellationToken).ConfigureAwait(false); if (!client.HasConfig) { _ = await client.GetConfigAsync().ConfigureAwait(false); } var poster = movie.Images?.Posters?.FirstOrDefault(); Rating?countryRating = default; Rating?invariantRating = default; Rating?usRating = default; foreach (var cty in movie.Releases.Countries) { if (!invariantRating.HasValue && cty.Primary) { invariantRating = Rating.FindBest(cty.Certification, cty.Iso_3166_1); } if (country is not null && string.Equals(cty.Iso_3166_1, country, StringComparison.InvariantCultureIgnoreCase)) { countryRating = Rating.FindBest(cty.Certification, cty.Iso_3166_1); } if (string.Equals(cty.Iso_3166_1, "us", StringComparison.InvariantCultureIgnoreCase)) { usRating = Rating.FindBest(cty.Certification, cty.Iso_3166_1); } } var rating = countryRating ?? usRating ?? invariantRating; if (rating is not null && rating.Value.ContentRating is null) { rating = default; } yield return(new RemoteMovie( movie.Title, movie.Overview, GetProducers(movie.Credits?.Crew), GetDirectors(movie.Credits?.Crew), movie.ProductionCompanies?.Select(productionCompany => productionCompany.Name) ?? Enumerable.Empty <string>(), movie.Genres?.Select(genre => genre.Name) ?? Enumerable.Empty <string>(), GetWriters(movie.Credits?.Crew), movie.Credits?.Cast?.Select(cast => cast.Name) ?? Enumerable.Empty <string>(), GetComposers(movie.Credits?.Crew)) { Release = movie.ReleaseDate, Rating = rating, ImageUri = poster is null ? null : client.GetImageUrl(GetBestPosterSize(client.Config) ?? "original", poster.FilePath), });