예제 #1
0
 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);
 }
예제 #2
0
 private IEnumerable<Movie> RefineSearch(IEnumerable<Movie> list, DataSearchRequest q)
 {
     if (!q.Year.HasValue)
     {
         return list;
     }
     return list.Where(m => m.ReleaseYear == q.Year.Value);
 }
예제 #3
0
 public IEnumerable<Movie> GetCachedMovies(DataSearchRequest q)
 {
     CacheInfo cachedResult = _appCache.Get(GetCacheKey(q)) as CacheInfo;
     if (cachedResult == null)
     {
         return new List<Movie>();
     }
     return cachedResult.Movies;
 }
예제 #4
0
 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) };
 }
예제 #5
0
 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);
 }
예제 #6
0
 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() };
 }
예제 #7
0
 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);
     }
 }
예제 #8
0
 private string GetCacheKey(DataSearchRequest q)
 {
     return CAHCE_PREFIX + q.Query + (q.Year.HasValue ? q.Year.Value.ToString() : string.Empty);
 }
예제 #9
0
 public int GetTotalResults(DataSearchRequest q)
 {
     CacheInfo cachedResult = _appCache.Get(GetCacheKey(q)) as CacheInfo;
     return cachedResult == null ? 0 : cachedResult.TotalResults;
 }
예제 #10
0
 public string GetNextPageToken(DataSearchRequest q)
 {
     CacheInfo cachedResult = _appCache.Get(GetCacheKey(q)) as CacheInfo;
     return cachedResult == null ? string.Empty : cachedResult.NextPageToken;
 }