Search in sources :

Example 26 with SearchRequest

use of org.nzbhydra.searching.searchrequests.SearchRequest in project nzbhydra2 by theotherp.

the class SearchWeb method createSearchRequest.

private SearchRequest createSearchRequest(@RequestBody SearchRequestParameters parameters) {
    Category category = categoryProvider.getByInternalName(parameters.getCategory());
    SearchType searchType = category.getSearchType() == null ? SearchType.SEARCH : category.getSearchType();
    SearchRequest searchRequest = searchRequestFactory.getSearchRequest(searchType, SearchSource.INTERNAL, category, parameters.getSearchRequestId(), parameters.getOffset(), parameters.getLimit());
    searchRequest.setLoadAll(parameters.isLoadAll());
    searchRequest.setIndexers(parameters.getIndexers());
    searchRequest.setQuery(parameters.getQuery());
    searchRequest.setMinage(parameters.getMinage());
    searchRequest.setMaxage(parameters.getMaxage());
    searchRequest.setMinsize(parameters.getMinsize());
    searchRequest.setMaxsize(parameters.getMaxsize());
    if (!Strings.isNullOrEmpty(parameters.getTitle())) {
        searchRequest.setTitle(parameters.getTitle());
    }
    if (!Strings.isNullOrEmpty(parameters.getImdbId())) {
        searchRequest.getIdentifiers().put(IdType.IMDB, parameters.getImdbId());
    }
    if (!Strings.isNullOrEmpty(parameters.getTmdbId())) {
        searchRequest.getIdentifiers().put(IdType.TMDB, parameters.getTmdbId());
    }
    if (!Strings.isNullOrEmpty(parameters.getTvrageId())) {
        searchRequest.getIdentifiers().put(IdType.TVRAGE, parameters.getTvrageId());
    }
    if (!Strings.isNullOrEmpty(parameters.getTvdbId())) {
        searchRequest.getIdentifiers().put(IdType.TVDB, parameters.getTvdbId());
    }
    if (!Strings.isNullOrEmpty(parameters.getTvmazeId())) {
        searchRequest.getIdentifiers().put(IdType.TVMAZE, parameters.getTvmazeId());
    }
    if (parameters.getSeason() != null) {
        searchRequest.setSeason(parameters.getSeason());
    }
    if (!Strings.isNullOrEmpty(parameters.getEpisode())) {
        searchRequest.setEpisode(parameters.getEpisode());
    }
    if (!searchRequest.getIdentifiers().isEmpty() && searchRequest.getQuery().isPresent()) {
        // Add additional restrictions to required words
        logger.debug("Adding additional search terms '{}' to required words", searchRequest.getQuery().get());
        searchRequest.getInternalData().getRequiredWords().addAll(Splitter.on(" ").splitToList(searchRequest.getQuery().get()));
        // Remove query, would be ignored by most indexers anyway
        searchRequest.setQuery(null);
    }
    searchRequest = searchRequestFactory.extendWithSavedIdentifiers(searchRequest);
    // Initialize messages for this search request
    searchStates.put(searchRequest.getSearchRequestId(), new SearchState());
    return searchRequest;
}
Also used : SearchRequest(org.nzbhydra.searching.searchrequests.SearchRequest) Category(org.nzbhydra.config.Category)

Example 27 with SearchRequest

use of org.nzbhydra.searching.searchrequests.SearchRequest in project nzbhydra2 by theotherp.

the class Searcher method getSearchCacheEntry.

protected SearchCacheEntry getSearchCacheEntry(SearchRequest searchRequest) {
    SearchCacheEntry searchCacheEntry;
    if (searchRequest.getOffset().orElse(0) == 0 || !searchRequestCache.containsKey(searchRequest.hashCode())) {
        // New search
        SearchEntity searchEntity = new SearchEntity();
        searchEntity.setSource(searchRequest.getSource());
        searchEntity.setCategoryName(searchRequest.getCategory().getName());
        searchEntity.setQuery(searchRequest.getQuery().orElse(null));
        searchEntity.setIdentifiers(searchRequest.getIdentifiers().entrySet().stream().filter(x -> x.getValue() != null).map(x -> new IdentifierKeyValuePair(x.getKey().name(), x.getValue())).collect(Collectors.toSet()));
        searchEntity.setSeason(searchRequest.getSeason().orElse(null));
        searchEntity.setEpisode(searchRequest.getEpisode().orElse(null));
        searchEntity.setSearchType(searchRequest.getSearchType());
        searchEntity.setTitle(searchRequest.getTitle().orElse(null));
        searchEntity.setAuthor(searchRequest.getAuthor().orElse(null));
        // Extend search request
        searchRequest.extractForbiddenWords();
        searchRepository.save(searchEntity);
        IndexerForSearchSelection pickingResult = indexerPicker.pickIndexers(searchRequest);
        searchCacheEntry = new SearchCacheEntry(searchRequest, pickingResult, searchEntity);
    } else {
        searchCacheEntry = searchRequestCache.get(searchRequest.hashCode());
        searchCacheEntry.setLastAccessed(Instant.now());
        // Update to latest to keep offset and limit updated
        searchCacheEntry.setSearchRequest(searchRequest);
    }
    return searchCacheEntry;
}
Also used : Iterables(com.google.common.collect.Iterables) java.util(java.util) Getter(lombok.Getter) IndexerSearchEntity(org.nzbhydra.indexers.IndexerSearchEntity) Stopwatch(com.google.common.base.Stopwatch) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) SearchSource(org.nzbhydra.searching.searchrequests.SearchRequest.SearchSource) Indexer(org.nzbhydra.indexers.Indexer) ConfigProvider(org.nzbhydra.config.ConfigProvider) ApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher) IndexerSearchRepository(org.nzbhydra.indexers.IndexerSearchRepository) SearchRequest(org.nzbhydra.searching.searchrequests.SearchRequest) Logger(org.slf4j.Logger) java.util.concurrent(java.util.concurrent) ExpiringMap(net.jodah.expiringmap.ExpiringMap) EventListener(org.springframework.context.event.EventListener) IndexerForSearchSelection(org.nzbhydra.searching.IndexerForSearchSelector.IndexerForSearchSelection) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) ShutdownEvent(org.nzbhydra.ShutdownEvent) Component(org.springframework.stereotype.Component) Entry(java.util.Map.Entry) ExpirationPolicy(net.jodah.expiringmap.ExpirationPolicy) MdcThreadPoolExecutor(org.nzbhydra.logging.MdcThreadPoolExecutor) LoggingMarkers(org.nzbhydra.logging.LoggingMarkers) IndexerSearchEntity(org.nzbhydra.indexers.IndexerSearchEntity) IndexerForSearchSelection(org.nzbhydra.searching.IndexerForSearchSelector.IndexerForSearchSelection)

Example 28 with SearchRequest

use of org.nzbhydra.searching.searchrequests.SearchRequest in project nzbhydra2 by theotherp.

the class ExternalApi method buildBaseSearchRequest.

private SearchRequest buildBaseSearchRequest(NewznabParameters params) {
    SearchType searchType = SearchType.valueOf(params.getT().name());
    SearchRequest searchRequest = searchRequestFactory.getSearchRequest(searchType, SearchSource.API, categoryProvider.fromSearchNewznabCategories(params.getCat(), CategoriesConfig.allCategory), random.nextInt(1000000), params.getOffset(), params.getLimit());
    logger.info("Executing new search");
    searchRequest.setQuery(params.getQ());
    searchRequest.setLimit(params.getLimit());
    searchRequest.setOffset(params.getOffset());
    // Not part of spec
    searchRequest.setMinage(params.getMinage());
    searchRequest.setMaxage(params.getMaxage());
    // Not part of spec
    searchRequest.setMinsize(params.getMinsize());
    // Not part of spec
    searchRequest.setMaxsize(params.getMaxsize());
    searchRequest.setAuthor(params.getAuthor());
    searchRequest.setTitle(params.getTitle());
    searchRequest.setSeason(params.getSeason());
    searchRequest.setEpisode(params.getEp());
    if (params.getCat() != null) {
        searchRequest.getInternalData().setNewznabCategories(params.getCat());
    }
    if (!Strings.isNullOrEmpty(params.getTvdbid())) {
        searchRequest.getIdentifiers().put(IdType.TVDB, params.getTvdbid());
    }
    if (!Strings.isNullOrEmpty(params.getTvmazeid())) {
        searchRequest.getIdentifiers().put(IdType.TVMAZE, params.getTvmazeid());
    }
    if (!Strings.isNullOrEmpty(params.getRid())) {
        searchRequest.getIdentifiers().put(IdType.TVRAGE, params.getRid());
    }
    if (!Strings.isNullOrEmpty(params.getImdbid())) {
        searchRequest.getIdentifiers().put(IdType.IMDB, params.getImdbid());
    }
    if (!Strings.isNullOrEmpty(params.getTmdbid())) {
        searchRequest.getIdentifiers().put(IdType.TMDB, params.getTmdbid());
    }
    searchRequest = searchRequestFactory.extendWithSavedIdentifiers(searchRequest);
    return searchRequest;
}
Also used : SearchRequest(org.nzbhydra.searching.searchrequests.SearchRequest) SearchType(org.nzbhydra.searching.SearchType)

Example 29 with SearchRequest

use of org.nzbhydra.searching.searchrequests.SearchRequest in project nzbhydra2 by theotherp.

the class ExternalApi method search.

protected NewznabResponse search(NewznabParameters params) {
    Stopwatch stopwatch = Stopwatch.createStarted();
    SearchRequest searchRequest = buildBaseSearchRequest(params);
    if (isTorznabCall()) {
        searchRequest.setDownloadType(org.nzbhydra.searching.DownloadType.TORRENT);
    } else {
        searchRequest.setDownloadType(org.nzbhydra.searching.DownloadType.NZB);
    }
    SearchResult searchResult = searcher.search(searchRequest);
    NewznabResponse transformedResults = transformResults(searchResult, params, searchRequest);
    logger.info("Search took {}ms. Returning {} results", stopwatch.elapsed(TimeUnit.MILLISECONDS), searchResult.getSearchResultItems().size());
    return transformedResults;
}
Also used : SearchRequest(org.nzbhydra.searching.searchrequests.SearchRequest) Stopwatch(com.google.common.base.Stopwatch) SearchResult(org.nzbhydra.searching.SearchResult) NewznabResponse(org.nzbhydra.mapping.newznab.NewznabResponse)

Example 30 with SearchRequest

use of org.nzbhydra.searching.searchrequests.SearchRequest in project nzbhydra2 by theotherp.

the class NzbsOrgTest method shouldLimitQueryLengthWhenAddingForbiddenWords.

@Test
public void shouldLimitQueryLengthWhenAddingForbiddenWords() throws Exception {
    SearchRequest request = new SearchRequest(SearchSource.INTERNAL, SearchType.SEARCH, 0, 100);
    request.getInternalData().setForbiddenWords(Arrays.asList("characters50sssssssssssssssssssssssssssssssssssss1", "characters50sssssssssssssssssssssssssssssssssssss2", "characters50sssssssssssssssssssssssssssssssssssss3", "characters50sssssssssssssssssssssssssssssssssssss4", "characters40ssssssssssssssssssssssssssss", "aaaaa", "bbbbb"));
    String query = testee.addForbiddenWords(request, "");
    assertThat(query.length()).isLessThan(255);
}
Also used : SearchRequest(org.nzbhydra.searching.searchrequests.SearchRequest) Test(org.junit.Test)

Aggregations

SearchRequest (org.nzbhydra.searching.searchrequests.SearchRequest)48 Test (org.junit.Test)40 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)8 UriComponentsBuilder (org.springframework.web.util.UriComponentsBuilder)8 Stopwatch (com.google.common.base.Stopwatch)5 CoreMatchers.containsString (org.hamcrest.CoreMatchers.containsString)5 IdType (org.nzbhydra.mediainfo.InfoProvider.IdType)4 Iterables (com.google.common.collect.Iterables)3 Sets (com.google.common.collect.Sets)3 Instant (java.time.Instant)3 java.util (java.util)3 HashMap (java.util.HashMap)3 Collectors (java.util.stream.Collectors)3 ConfigProvider (org.nzbhydra.config.ConfigProvider)3 Indexer (org.nzbhydra.indexers.Indexer)3 LoggingMarkers (org.nzbhydra.logging.LoggingMarkers)3 MediaInfo (org.nzbhydra.mediainfo.MediaInfo)3 SearchSource (org.nzbhydra.searching.searchrequests.SearchRequest.SearchSource)3 Logger (org.slf4j.Logger)3 LoggerFactory (org.slf4j.LoggerFactory)3