using System; using System.Threading; using System.Threading.Tasks; using TMDbLib.Objects.General; using TMDbLib.Objects.Search; using TMDbLib.Rest; namespace TMDbLib.Client { public partial class TMDbClient { private async Task SearchMethodInternal(string method, string query, int page, string language = null, bool? includeAdult = null, int year = 0, string dateFormat = null, string region = null, int primaryReleaseYear = 0, int firstAirDateYear = 0, CancellationToken cancellationToken = default) where T : new() { RestRequest req = _client.Create("search/{method}"); req.AddUrlSegment("method", method); req.AddParameter("query", query); language ??= DefaultLanguage; if (!string.IsNullOrWhiteSpace(language)) req.AddParameter("language", language); if (page >= 1) req.AddParameter("page", page.ToString()); if (year >= 1) req.AddParameter("year", year.ToString()); if (includeAdult.HasValue) req.AddParameter("include_adult", includeAdult.Value ? "true" : "false"); // TODO: Dateformat? //if (dateFormat != null) // req.DateFormat = dateFormat; if (!string.IsNullOrWhiteSpace(region)) req.AddParameter("region", region); if (primaryReleaseYear >= 1) req.AddParameter("primary_release_year", primaryReleaseYear.ToString()); if (firstAirDateYear >= 1) req.AddParameter("first_air_date_year", firstAirDateYear.ToString()); T resp = await req.GetOfT(cancellationToken).ConfigureAwait(false); return resp; } public async Task> SearchCollectionAsync(string query, int page = 0, CancellationToken cancellationToken = default) { return await SearchCollectionAsync(query, DefaultLanguage, page, cancellationToken).ConfigureAwait(false); } public async Task> SearchCollectionAsync(string query, string language, int page = 0, CancellationToken cancellationToken = default) { return await SearchMethodInternal>("collection", query, page, language, cancellationToken: cancellationToken).ConfigureAwait(false); } public async Task> SearchCompanyAsync(string query, int page = 0, CancellationToken cancellationToken = default) { return await SearchMethodInternal>("company", query, page, cancellationToken: cancellationToken).ConfigureAwait(false); } public async Task> SearchKeywordAsync(string query, int page = 0, CancellationToken cancellationToken = default) { return await SearchMethodInternal>("keyword", query, page, cancellationToken: cancellationToken).ConfigureAwait(false); } [Obsolete("20200701 No longer present in public API")] public async Task> SearchListAsync(string query, int page = 0, bool includeAdult = false, CancellationToken cancellationToken = default) { return await SearchMethodInternal>("list", query, page, includeAdult: includeAdult, cancellationToken: cancellationToken).ConfigureAwait(false); } public async Task> SearchMovieAsync(string query, int page = 0, bool includeAdult = false, int year = 0, string region = null, int primaryReleaseYear = 0, CancellationToken cancellationToken = default) { return await SearchMovieAsync(query, DefaultLanguage, page, includeAdult, year, region, primaryReleaseYear, cancellationToken).ConfigureAwait(false); } public async Task> SearchMovieAsync(string query, string language, int page = 0, bool includeAdult = false, int year = 0, string region = null, int primaryReleaseYear = 0, CancellationToken cancellationToken = default) { return await SearchMethodInternal>("movie", query, page, language, includeAdult, year, "yyyy-MM-dd", region, primaryReleaseYear, cancellationToken: cancellationToken).ConfigureAwait(false); } public async Task> SearchMultiAsync(string query, int page = 0, bool includeAdult = false, int year = 0, string region = null, CancellationToken cancellationToken = default) { return await SearchMultiAsync(query, DefaultLanguage, page, includeAdult, year, region, cancellationToken).ConfigureAwait(false); } public async Task> SearchMultiAsync(string query, string language, int page = 0, bool includeAdult = false, int year = 0, string region = null, CancellationToken cancellationToken = default) { return await SearchMethodInternal>("multi", query, page, language, includeAdult, year, "yyyy-MM-dd", region, cancellationToken: cancellationToken).ConfigureAwait(false); } public async Task> SearchPersonAsync(string query, int page = 0, bool includeAdult = false, string region = null, CancellationToken cancellationToken = default) { return await SearchPersonAsync(query, DefaultLanguage, page, includeAdult, region, cancellationToken).ConfigureAwait(false); } public async Task> SearchPersonAsync(string query, string language, int page = 0, bool includeAdult = false, string region = null, CancellationToken cancellationToken = default) { return await SearchMethodInternal>("person", query, page, language, includeAdult, region: region, cancellationToken: cancellationToken).ConfigureAwait(false); } public async Task> SearchTvShowAsync(string query, int page = 0, bool includeAdult = false, int firstAirDateYear = 0, CancellationToken cancellationToken = default) { return await SearchTvShowAsync(query, DefaultLanguage, page, includeAdult, firstAirDateYear, cancellationToken).ConfigureAwait(false); } public async Task> SearchTvShowAsync(string query, string language, int page = 0, bool includeAdult = false, int firstAirDateYear = 0, CancellationToken cancellationToken = default) { return await SearchMethodInternal>("tv", query, page, language, includeAdult, firstAirDateYear: firstAirDateYear, cancellationToken: cancellationToken).ConfigureAwait(false); } } }