public IEnumerable <Common.Models.DTO.Indexer> Indexers([FromQuery(Name = "configured")] bool configured) { var dto = IndexerService.GetAllIndexers().Select(i => new Common.Models.DTO.Indexer(i)); dto = configured ? dto.Where(i => i.configured) : dto; return(dto); }
public async Task <Models.DTO.ManualSearchResult> Results([FromUri] Models.DTO.ApiSearch request) { var trackers = IndexerService.GetAllIndexers().Where(t => t.IsConfigured); if (CurrentIndexer.ID != "all") { trackers = trackers.Where(t => t.ID == CurrentIndexer.ID).ToList(); } trackers = trackers.Where(t => t.IsConfigured && t.CanHandleQuery(CurrentQuery)); var tasks = trackers.ToList().Select(t => t.ResultsForQuery(CurrentQuery)).ToList(); var aggregateTask = Task.WhenAll(tasks); await aggregateTask; var results = tasks.Where(t => t.Status == TaskStatus.RanToCompletion).Where(t => t.Result.Count() > 0).SelectMany(t => { var searchResults = t.Result; var indexer = searchResults.First().Origin; cacheService.CacheRssResults(indexer, searchResults); return(searchResults.Select(result => { var item = AutoMapper.Mapper.Map <TrackerCacheResult>(result); item.Tracker = indexer.DisplayName; item.TrackerId = indexer.ID; item.Peers = item.Peers - item.Seeders; // Use peers as leechers return item; })); }).OrderByDescending(d => d.PublishDate).ToList(); ConfigureCacheResults(results); var manualResult = new Models.DTO.ManualSearchResult() { Results = results, Indexers = trackers.Select(t => t.DisplayName).ToList() }; if (manualResult.Indexers.Count() == 0) { manualResult.Indexers = new List <string>() { "None" } } ; logger.Info(string.Format("Manual search for \"{0}\" on {1} with {2} results.", CurrentQuery.SanitizedSearchTerm, string.Join(", ", manualResult.Indexers), manualResult.Results.Count())); return(manualResult); }
public async Task <Models.DTO.ManualSearchResult> Results([FromUri] Models.DTO.ApiSearch request) { var manualResult = new ManualSearchResult(); var trackers = IndexerService.GetAllIndexers().Where(t => t.IsConfigured); if (request.Tracker != null) { trackers = trackers.Where(t => request.Tracker.Contains(t.ID)); } trackers = trackers.Where(t => t.CanHandleQuery(CurrentQuery)); var tasks = trackers.ToList().Select(t => t.ResultsForQuery(CurrentQuery)).ToList(); try { var aggregateTask = Task.WhenAll(tasks); await aggregateTask; } catch (AggregateException aex) { foreach (var ex in aex.InnerExceptions) { logger.Error(ex); } } catch (Exception ex) { logger.Error(ex); } manualResult.Indexers = tasks.Select(t => { var resultIndexer = new ManualSearchResultIndexer(); IIndexer indexer = null; if (t.Status == TaskStatus.RanToCompletion) { resultIndexer.Status = ManualSearchResultIndexerStatus.OK; resultIndexer.Results = t.Result.Releases.Count(); resultIndexer.Error = null; indexer = t.Result.Indexer; } else if (t.Exception.InnerException is IndexerException) { resultIndexer.Status = ManualSearchResultIndexerStatus.Error; resultIndexer.Results = 0; resultIndexer.Error = ((IndexerException)t.Exception.InnerException).ToString(); indexer = ((IndexerException)t.Exception.InnerException).Indexer; } else { resultIndexer.Status = ManualSearchResultIndexerStatus.Unknown; resultIndexer.Results = 0; resultIndexer.Error = null; } if (indexer != null) { resultIndexer.ID = indexer.ID; resultIndexer.Name = indexer.DisplayName; } return(resultIndexer); }).ToList(); manualResult.Results = tasks.Where(t => t.Status == TaskStatus.RanToCompletion).Where(t => t.Result.Releases.Count() > 0).SelectMany(t => { var searchResults = t.Result.Releases; var indexer = t.Result.Indexer; cacheService.CacheRssResults(indexer, searchResults); return(searchResults.Select(result => { var item = AutoMapper.Mapper.Map <TrackerCacheResult>(result); item.Tracker = indexer.DisplayName; item.TrackerId = indexer.ID; item.Peers = item.Peers - item.Seeders; // Use peers as leechers return item; })); }).OrderByDescending(d => d.PublishDate).ToList(); ConfigureCacheResults(manualResult.Results); logger.Info(string.Format("Manual search for \"{0}\" on {1} with {2} results.", CurrentQuery.SanitizedSearchTerm, string.Join(", ", manualResult.Indexers.Select(i => i.ID)), manualResult.Results.Count())); return(manualResult); }
public IEnumerable <Common.Models.DTO.Indexer> Indexers() { var dto = IndexerService.GetAllIndexers().Select(i => new Common.Models.DTO.Indexer(i)); return(dto); }