Exemplo n.º 1
0
        public async Task <TraktPaginationListResult <TraktSearchResult> > GetTextQueryResultsAsync(TraktSearchResultType searchResultTypes, [NotNull] string searchQuery,
                                                                                                    TraktSearchField searchFields  = null, TraktSearchFilter filter = null,
                                                                                                    TraktExtendedInfo extendedInfo = null,
                                                                                                    int?page = null, int?limitPerPage = null)
        {
            Validate(searchResultTypes);
            Validate(searchQuery);

            return(await QueryAsync(new TraktSearchTextQueryRequest(Client)
            {
                ResultTypes = searchResultTypes,
                Query = searchQuery,
                SearchFields = searchFields,
                Filter = filter,
                ExtendedInfo = extendedInfo,
                PaginationOptions = new TraktPaginationOptions(page, limitPerPage)
            }));
        }
Exemplo n.º 2
0
        private async Task ShowSearch(TraktList model, IList <ITraktShow> list)
        {
            uint?page = 0;

            TraktSearchField searchFields = new TraktSearchField();

            if (model.SearchByAlias)
            {
                searchFields |= TraktSearchField.Aliases;
            }
            if (model.SearchByBiography)
            {
                searchFields |= TraktSearchField.Biography;
            }
            if (model.SearchByDescription)
            {
                searchFields |= TraktSearchField.Description;
            }
            if (model.SearchByName)
            {
                searchFields |= TraktSearchField.Name;
            }
            if (model.SearchByOverview)
            {
                searchFields |= TraktSearchField.Overview;
            }
            if (model.SearchByPeople)
            {
                searchFields |= TraktSearchField.People;
            }
            if (model.SearchByTagline)
            {
                searchFields |= TraktSearchField.Tagline;
            }
            if (model.SearchByTitle)
            {
                searchFields |= TraktSearchField.Title;
            }
            if (model.SearchByTranslations)
            {
                searchFields |= TraktSearchField.Translations;
            }


            var traktShowStatus = new List <TraktNet.Enums.TraktShowStatus>();

            if (model.Filter_Status.Status?.Contains("canceled") == true)
            {
                traktShowStatus.Add(TraktNet.Enums.TraktShowStatus.Canceled);
            }
            if (model.Filter_Status.Status?.Contains("ended") == true)
            {
                traktShowStatus.Add(TraktNet.Enums.TraktShowStatus.Ended);
            }
            if (model.Filter_Status.Status?.Contains("in production") == true)
            {
                traktShowStatus.Add(TraktNet.Enums.TraktShowStatus.InProduction);
            }
            if (model.Filter_Status.Status?.Contains("returning series") == true)
            {
                traktShowStatus.Add(TraktNet.Enums.TraktShowStatus.ReturningSeries);
            }

            while (true)
            {
                var result = await _traktClient.Search.GetTextQueryResultsAsync(
                    TraktSearchResultType.Show,
                    model.Query,
                    searchFields,
                    new TraktSearchFilter(
                        model.Filter_Years.From,
                        model.Filter_Years.To,
                        model.Filter_Genres.Genres,
                        model.Filter_Languages.Languages,
                        model.Filter_Countries.Languages,
                        new Range <int>(
                            model.Filter_Runtimes.From,
                            model.Filter_Runtimes.To
                            ),
                        new Range <int>(
                            model.Filter_Ratings.From,
                            model.Filter_Ratings.To
                            ),
                        model.Filter_Certifications_Show.Certifications,
                        model.Filter_Networks.Networks,
                        traktShowStatus.Count != 0 ? traktShowStatus.ToArray() : null
                        ), new TraktExtendedInfo().SetFull(),
                    new TraktPagedParameters(page, _traktApiConfiguration.FetchLimitSearch)
                    );


                if (!result.IsSuccess)
                {
                    throw result.Exception;
                }

                foreach (var traktSearchResult in result.Value)
                {
                    if (traktSearchResult.Show?.Votes != null && model.Filter_Ratings.Votes > 0)
                    {
                        if (!(traktSearchResult.Show.Votes >= model.Filter_Ratings.Votes))
                        {
                            continue;
                        }
                    }

                    if (model.ReverseFilter_Certifications_Show?.Certifications != null && !string.IsNullOrEmpty(traktSearchResult.Show.Certification))
                    {
                        if (model.ReverseFilter_Certifications_Show.Certifications.Contains(traktSearchResult.Show.Certification))
                        {
                            continue;
                        }
                    }

                    if (model.ReverseFilter_Countries?.Languages != null && !string.IsNullOrEmpty(traktSearchResult.Show.CountryCode))
                    {
                        if (model.ReverseFilter_Countries.Languages.Contains(traktSearchResult.Show.CountryCode))
                        {
                            continue;
                        }
                    }

                    if (model.ReverseFilter_Genres?.Genres != null && traktSearchResult.Show.Genres != null)
                    {
                        if (model.ReverseFilter_Genres.Genres.Any(traktSearchResult.Show.Genres.Contains))
                        {
                            continue;
                        }
                    }

                    if (model.ReverseFilter_Languages?.Languages != null && !string.IsNullOrEmpty(traktSearchResult.Show.LanguageCode))
                    {
                        if (model.ReverseFilter_Languages.Languages.Contains(traktSearchResult.Show.LanguageCode))
                        {
                            continue;
                        }
                    }

                    if (model.ReverseFilter_Networks?.Networks != null && !string.IsNullOrEmpty(traktSearchResult.Show.Network))
                    {
                        if (model.ReverseFilter_Networks.Networks.Contains(traktSearchResult.Show.Network))
                        {
                            continue;
                        }
                    }

                    if (model.ReverseFilter_Status?.Status != null && traktSearchResult.Show.Status != null)
                    {
                        if (model.ReverseFilter_Status.Status.Contains(traktSearchResult.Show.Status.ObjectName))
                        {
                            continue;
                        }
                    }

                    if (model.ReverseFilter_Translations?.Translations != null && traktSearchResult.Show.AvailableTranslationLanguageCodes != null)
                    {
                        if (model.ReverseFilter_Translations.Translations.Any(traktSearchResult.Show.AvailableTranslationLanguageCodes.Contains))
                        {
                            continue;
                        }
                    }


                    if (!list.Contains(traktSearchResult.Show, new TraktShowComparer()))
                    {
                        list.Add(traktSearchResult.Show);
                    }
                }

                if (result.PageCount == page)
                {
                    break;
                }

                page++;

                await Task.Delay(_traktApiConfiguration.DelaySearch);
            }
        }
Exemplo n.º 3
0
        private async Task MovieSearch(TraktList model, IList <ITraktMovie> list)
        {
            uint?page = 0;

            TraktSearchField searchFields = new TraktSearchField();

            if (model.SearchByAlias)
            {
                searchFields |= TraktSearchField.Aliases;
            }
            if (model.SearchByBiography)
            {
                searchFields |= TraktSearchField.Biography;
            }
            if (model.SearchByDescription)
            {
                searchFields |= TraktSearchField.Description;
            }
            if (model.SearchByName)
            {
                searchFields |= TraktSearchField.Name;
            }
            if (model.SearchByOverview)
            {
                searchFields |= TraktSearchField.Overview;
            }
            if (model.SearchByPeople)
            {
                searchFields |= TraktSearchField.People;
            }
            if (model.SearchByTagline)
            {
                searchFields |= TraktSearchField.Tagline;
            }
            if (model.SearchByTitle)
            {
                searchFields |= TraktSearchField.Title;
            }
            if (model.SearchByTranslations)
            {
                searchFields |= TraktSearchField.Translations;
            }
            if (model.SearchByTagline)
            {
                searchFields |= TraktSearchField.Tagline;
            }

            while (true)
            {
                var result = await _traktClient.Search.GetTextQueryResultsAsync(
                    TraktSearchResultType.Movie,
                    model.Query,
                    searchFields,
                    new TraktSearchFilter(
                        model.Filter_Years.From,
                        model.Filter_Years.To,
                        model.Filter_Genres.Genres,
                        model.Filter_Languages.Languages,
                        model.Filter_Countries.Languages,
                        new Range <int>(
                            model.Filter_Runtimes.From,
                            model.Filter_Runtimes.To
                            ),
                        new Range <int>(
                            model.Filter_Ratings.From,
                            model.Filter_Ratings.To
                            )
                        ), new TraktExtendedInfo().SetFull(),
                    new TraktPagedParameters(page, _traktApiConfiguration.FetchLimitSearch)
                    );

                if (!result.IsSuccess)
                {
                    throw result.Exception;
                }

                foreach (var traktSearchResult in result.Value)
                {
                    if (traktSearchResult.Movie?.Votes != null && model.Filter_Ratings.Votes > 0)
                    {
                        if (!(traktSearchResult.Movie.Votes >= model.Filter_Ratings.Votes))
                        {
                            continue;
                        }
                    }

                    if (model.ReverseFilter_Certifications_Movie?.Certifications != null && !string.IsNullOrEmpty(traktSearchResult.Movie.Certification))
                    {
                        if (model.ReverseFilter_Certifications_Movie.Certifications.Contains(traktSearchResult.Movie.Certification))
                        {
                            continue;
                        }
                    }

                    if (model.ReverseFilter_Countries?.Languages != null && !string.IsNullOrEmpty(traktSearchResult.Movie.CountryCode))
                    {
                        if (model.ReverseFilter_Countries.Languages.Contains(traktSearchResult.Movie.CountryCode))
                        {
                            continue;
                        }
                    }

                    if (model.ReverseFilter_Genres?.Genres != null && traktSearchResult.Movie.Genres != null)
                    {
                        if (model.ReverseFilter_Genres.Genres.Any(traktSearchResult.Movie.Genres.Contains))
                        {
                            continue;
                        }
                    }

                    if (model.ReverseFilter_Languages?.Languages != null && !string.IsNullOrEmpty(traktSearchResult.Movie.LanguageCode))
                    {
                        if (model.ReverseFilter_Languages.Languages.Contains(traktSearchResult.Movie.LanguageCode))
                        {
                            continue;
                        }
                    }

                    if (model.ReverseFilter_Translations?.Translations != null && traktSearchResult.Movie.AvailableTranslationLanguageCodes != null)
                    {
                        if (model.ReverseFilter_Translations.Translations.Any(traktSearchResult.Movie.AvailableTranslationLanguageCodes.Contains))
                        {
                            continue;
                        }
                    }

                    if (!list.Contains(traktSearchResult.Movie, new TraktMovieComparer()))
                    {
                        list.Add(traktSearchResult.Movie);
                    }
                }

                if (result.PageCount == page)
                {
                    break;
                }

                page++;

                await Task.Delay(_traktApiConfiguration.DelaySearch);
            }
        }
Exemplo n.º 4
0
        private async Task ShowSearch(TraktList model, IList <ITraktShow> list)
        {
            uint?page = 0;

            TraktSearchField searchFields = new TraktSearchField();

            if (model.SearchByAlias)
            {
                searchFields |= TraktSearchField.Aliases;
            }
            if (model.SearchByBiography)
            {
                searchFields |= TraktSearchField.Biography;
            }
            if (model.SearchByDescription)
            {
                searchFields |= TraktSearchField.Description;
            }
            if (model.SearchByName)
            {
                searchFields |= TraktSearchField.Name;
            }
            if (model.SearchByOverview)
            {
                searchFields |= TraktSearchField.Overview;
            }
            if (model.SearchByPeople)
            {
                searchFields |= TraktSearchField.People;
            }
            if (model.SearchByTagline)
            {
                searchFields |= TraktSearchField.Tagline;
            }
            if (model.SearchByTitle)
            {
                searchFields |= TraktSearchField.Title;
            }
            if (model.SearchByTranslations)
            {
                searchFields |= TraktSearchField.Translations;
            }


            var traktShowStatus = new List <TraktNet.Enums.TraktShowStatus>();

            if (model.Filter_Status.Status?.Contains("canceled") == true)
            {
                traktShowStatus.Add(TraktNet.Enums.TraktShowStatus.Canceled);
            }
            if (model.Filter_Status.Status?.Contains("ended") == true)
            {
                traktShowStatus.Add(TraktNet.Enums.TraktShowStatus.Ended);
            }
            if (model.Filter_Status.Status?.Contains("in production") == true)
            {
                traktShowStatus.Add(TraktNet.Enums.TraktShowStatus.InProduction);
            }
            if (model.Filter_Status.Status?.Contains("returning series") == true)
            {
                traktShowStatus.Add(TraktNet.Enums.TraktShowStatus.ReturningSeries);
            }

            while (true)
            {
                var result = await _traktClient.Search.GetTextQueryResultsAsync(
                    TraktSearchResultType.Show,
                    model.Query,
                    searchFields,
                    new TraktSearchFilter(
                        model.Filter_Years.From,
                        model.Filter_Years.To,
                        model.Filter_Genres.Genres,
                        model.Filter_Languages.Languages,
                        model.Filter_Countries.Languages,
                        new Range <int>(
                            model.Filter_Runtimes.From,
                            model.Filter_Runtimes.To
                            ),
                        new Range <int>(
                            model.Filter_Ratings_Trakt.From,
                            model.Filter_Ratings_Trakt.To
                            ),
                        model.Filter_Certifications_Show.Certifications,
                        model.Filter_Networks.Networks,
                        traktShowStatus.Count != 0 ? traktShowStatus.ToArray() : null
                        ), new TraktExtendedInfo().SetFull(),
                    new TraktPagedParameters(page, _traktApiConfiguration.FetchLimitSearch)
                    );


                if (!result.IsSuccess)
                {
                    throw result.Exception;
                }

                var userLimits = _userLimitService.Get(model.Owner.Level);

                foreach (var traktSearchResult in result.Value)
                {
                    if (traktSearchResult.Show?.Votes != null && model.Filter_Ratings_Trakt.Votes > 0)
                    {
                        if (!(traktSearchResult.Show.Votes >= model.Filter_Ratings_Trakt.Votes))
                        {
                            continue;
                        }
                    }

                    if (userLimits.ExclusionFilters)
                    {
                        if (model.ExclusionFilter_Certifications_Show?.Certifications != null && !string.IsNullOrEmpty(traktSearchResult.Show.Certification))
                        {
                            if (model.ExclusionFilter_Certifications_Show.Certifications.Contains(traktSearchResult.Show.Certification))
                            {
                                continue;
                            }
                        }

                        if (model.ExclusionFilter_Countries?.Languages != null && !string.IsNullOrEmpty(traktSearchResult.Show.CountryCode))
                        {
                            if (model.ExclusionFilter_Countries.Languages.Contains(traktSearchResult.Show.CountryCode))
                            {
                                continue;
                            }
                        }

                        if (model.ExclusionFilter_Genres?.Genres != null && traktSearchResult.Show.Genres != null)
                        {
                            if (model.ExclusionFilter_Genres.Genres.Any(traktSearchResult.Show.Genres.Contains))
                            {
                                continue;
                            }
                        }

                        if (model.ExclusionFilter_Languages?.Languages != null && !string.IsNullOrEmpty(traktSearchResult.Show.LanguageCode))
                        {
                            if (model.ExclusionFilter_Languages.Languages.Contains(traktSearchResult.Show.LanguageCode))
                            {
                                continue;
                            }
                        }

                        if (model.ExclusionFilter_Networks?.Networks != null && !string.IsNullOrEmpty(traktSearchResult.Show.Network))
                        {
                            if (model.ExclusionFilter_Networks.Networks.Contains(traktSearchResult.Show.Network))
                            {
                                continue;
                            }
                        }

                        if (model.ExclusionFilter_Status?.Status != null && traktSearchResult.Show.Status != null)
                        {
                            if (model.ExclusionFilter_Status.Status.Contains(traktSearchResult.Show.Status.ObjectName))
                            {
                                continue;
                            }
                        }

                        if (model.ExclusionFilter_Translations?.Translations != null && traktSearchResult.Show.AvailableTranslationLanguageCodes != null)
                        {
                            if (model.ExclusionFilter_Translations.Translations.Any(traktSearchResult.Show.AvailableTranslationLanguageCodes.Contains))
                            {
                                continue;
                            }
                        }

                        var hasKeyword = false;
                        if (model.ExclusionFilter_Keywords != null && model.ExclusionFilter_Keywords.Length > 0)
                        {
                            foreach (var keyWord in model.ExclusionFilter_Keywords)
                            {
                                if (!string.IsNullOrWhiteSpace(keyWord))
                                {
                                    if (traktSearchResult.Show.Title.ToLower().Contains(keyWord.ToLower()))
                                    {
                                        hasKeyword = true;
                                        break;
                                    }
                                }
                            }
                        }
                        if (hasKeyword)
                        {
                            continue;
                        }
                    }

                    if (userLimits.IMDbRatings)
                    {
                        if (model.Filter_Ratings_IMDb != null)
                        {
                            if (!string.IsNullOrEmpty(traktSearchResult.Show.Ids.Imdb))
                            {
                                var imdbRating = await _imDbRepository.Get(traktSearchResult.Show.Ids.Imdb);

                                if (imdbRating != null)
                                {
                                    if (model.Filter_Ratings_IMDb.Votes > 0)
                                    {
                                        if (!(imdbRating.Votes >= model.Filter_Ratings_IMDb.Votes))
                                        {
                                            continue;
                                        }

                                        if (model.Filter_Ratings_IMDb.From > 0)
                                        {
                                            if (!(imdbRating.Rating >= model.Filter_Ratings_IMDb.From))
                                            {
                                                continue;
                                            }
                                        }

                                        if (model.Filter_Ratings_IMDb.To > 0)
                                        {
                                            if (!(imdbRating.Rating <= model.Filter_Ratings_IMDb.To))
                                            {
                                                continue;
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    continue;
                                }
                            }
                            else
                            {
                                continue;
                            }
                        }
                    }

                    if (!list.Contains(traktSearchResult.Show, new TraktShowComparer()))
                    {
                        list.Add(traktSearchResult.Show);
                    }
                }

                if (result.PageCount == page)
                {
                    break;
                }

                page++;

                await Task.Delay(_traktApiConfiguration.DelaySearch);
            }
        }
        public void TestTraktSearchFieldIsTraktEnumeration()
        {
            var enumeration = new TraktSearchField();

            enumeration.Should().BeAssignableTo <TraktEnumeration>();
        }
Exemplo n.º 6
0
        /// <summary>
        /// Searches for movies, shows, episodes, people and / or lists with the given search query.
        /// <para>OAuth authorization not required.</para>
        /// <para>
        /// See <a href="http://docs.trakt.apiary.io/#reference/search/text-query/get-text-query-results">"Trakt API Doc - Search: Text Query"</a> for more information.
        /// </para>
        /// </summary>
        /// <param name="searchResultTypes">
        /// The object type(s), for which will be searched. See also <seealso cref="TraktSearchResultType" />.
        /// Multiple <see cref="TraktSearchResultType" /> values can be combined with a binary operator, like this: TraktSearchResultType.Movie | TraktSearchResultType.Show.
        /// </param>
        /// <param name="searchQuery">The query, for which will be searched.</param>
        /// <param name="searchFields">Determines the text fields, which will be searched. See also <seealso cref="TraktSearchField" />.</param>
        /// <param name="filter">Optional filter for genres, year, runtimes, ratings, etc. See also <seealso cref="TraktSearchFilter" />.</param>
        /// <param name="extendedInfo">
        /// The extended info, which determines how much data about the movies, shows, episodes, people and / or lists should be queried.
        /// See also <seealso cref="TraktExtendedInfo" />.
        /// </param>
        /// <param name="pagedParameters"></param>
        /// <param name="cancellationToken"></param>
        /// <returns>
        /// An <see cref="TraktPagedResponse{ITraktSearchResult}"/> instance containing the found movies, shows, episodes, people and / or lists and which also
        /// contains the queried page number, the page's item count, maximum page count and maximum item count.
        /// <para>
        /// See also <seealso cref="TraktPagedResponse{ListItem}" /> and <seealso cref="ITraktSearchResult" />.
        /// </para>
        /// </returns>
        /// <exception cref="TraktException">Thrown, if the request fails.</exception>
        /// <exception cref="ArgumentException">
        /// Thrown, if the given searchQuery is null, empty or contains spaces.
        /// Thrown, if the given searchResultType is unspecified.
        /// </exception>
        /// <exception cref="ArgumentNullException">Thrown, if the given searchResultType is null</exception>
        public Task <TraktPagedResponse <ITraktSearchResult> > GetTextQueryResultsAsync(TraktSearchResultType searchResultTypes, string searchQuery,
                                                                                        TraktSearchField searchFields        = null, TraktSearchFilter filter = null,
                                                                                        TraktExtendedInfo extendedInfo       = null,
                                                                                        TraktPagedParameters pagedParameters = null,
                                                                                        CancellationToken cancellationToken  = default)
        {
            var requestHandler = new RequestHandler(Client);

            return(requestHandler.ExecutePagedRequestAsync(new SearchTextQueryRequest
            {
                ResultTypes = searchResultTypes,
                Query = searchQuery,
                SearchFields = searchFields,
                Filter = filter,
                ExtendedInfo = extendedInfo,
                Page = pagedParameters?.Page,
                Limit = pagedParameters?.Limit
            },
                                                           cancellationToken));
        }