private void AddSearchParams(Google.Apis.YouTube.v3.SearchResource.ListRequest request, DataSearchRequest q) { if (!q.Year.HasValue) { return; } request.PublishedAfter = new DateTime(q.Year.Value, 1, 1); request.PublishedBefore = new DateTime(q.Year.Value + 1, 1, 1); }
private IEnumerable<Movie> RefineSearch(IEnumerable<Movie> list, DataSearchRequest q) { if (!q.Year.HasValue) { return list; } return list.Where(m => m.ReleaseYear == q.Year.Value); }
public IEnumerable<Movie> GetCachedMovies(DataSearchRequest q) { CacheInfo cachedResult = _appCache.Get(GetCacheKey(q)) as CacheInfo; if (cachedResult == null) { return new List<Movie>(); } return cachedResult.Movies; }
public async Task<DataSearchResponse> Search(DataSearchRequest q, int count) { IEnumerable<Movie> allLoadedMovies = _cache.GetCachedMovies(q); if (allLoadedMovies.Count() < count) { await RequestSearch(q, count); allLoadedMovies = _cache.GetCachedMovies(q); } return new DataSearchResponse() { Movies = allLoadedMovies.Take(count), TotalResults = _cache.GetTotalResults(q) }; }
public void AddMoviesToCache(DataSearchRequest q, IEnumerable<Movie> movieList, int totalResults, string nextPageToken) { CacheInfo cachedResult = _appCache.Get(GetCacheKey(q)) as CacheInfo; if (cachedResult == null) { cachedResult = new CacheInfo() { Movies = new List<Movie>() }; } cachedResult.NextPageToken = nextPageToken; cachedResult.TotalResults = totalResults; cachedResult.Movies.AddRange(movieList); _appCache.Put(GetCacheKey(q), cachedResult); }
public async Task<DataSearchResponse> Search(DataSearchRequest q, int count) { IEnumerable<Movie> searchResult = _appCache.Get(GetCacheKey(q.Query)) as IEnumerable<Movie>; if (searchResult == null) { var response = await _client.RequestSearchResult(q.Query); searchResult = await _parser.ParseListResponse(response); _appCache.Put(GetCacheKey(q.Query), searchResult); } searchResult = RefineSearch(searchResult, q); return new DataSearchResponse() { Movies = searchResult.Take(count), TotalResults = searchResult.Count() }; }
private async Task RequestSearch(DataSearchRequest q, int count) { var loadedMoviesCount = _cache.GetCachedMovies(q).Count(); int needToLoadPageCount = System.Convert.ToInt32(Math.Ceiling(((double)count - loadedMoviesCount) / PAGE_SIZE)); var youtubeService = CreateService(); for (int i = 0; i < needToLoadPageCount; i++) { var searchListRequest = youtubeService.Search.List("snippet"); searchListRequest.Q = GetTrailersQuery(q.Query); searchListRequest.MaxResults = PAGE_SIZE; searchListRequest.Type = "video"; AddSearchParams(searchListRequest, q); searchListRequest.PageToken = _cache.GetNextPageToken(q); var searchResult = await searchListRequest.ExecuteAsync(); var movies = searchResult.Items.Select(_converter.Convert); _cache.AddMoviesToCache(q, movies, searchResult.PageInfo.TotalResults.GetValueOrDefault(0) , searchResult.NextPageToken); } }
private string GetCacheKey(DataSearchRequest q) { return CAHCE_PREFIX + q.Query + (q.Year.HasValue ? q.Year.Value.ToString() : string.Empty); }
public int GetTotalResults(DataSearchRequest q) { CacheInfo cachedResult = _appCache.Get(GetCacheKey(q)) as CacheInfo; return cachedResult == null ? 0 : cachedResult.TotalResults; }
public string GetNextPageToken(DataSearchRequest q) { CacheInfo cachedResult = _appCache.Get(GetCacheKey(q)) as CacheInfo; return cachedResult == null ? string.Empty : cachedResult.NextPageToken; }