public async Task <Recomendations> GetRecommendations(TVDoc mDoc, BackgroundWorker sender, List <MovieConfiguration> movies) { const string lang = "en"; //todo make work with multi language int total = movies.Count; int current = 0; Task <SearchContainer <SearchMovie> > topRated = Client.GetMovieTopRatedListAsync(lang); Task <SearchContainer <SearchMovie> > trending = Client.GetTrendingMoviesAsync(TimeWindow.Week); await topRated; await trending; Recomendations returnValue = new Recomendations(); foreach (var top in topRated.Result.Results) { File(top); returnValue.AddTopRated(top.Id); } foreach (var top in trending.Result.Results) { File(top); returnValue.AddTrending(top.Id); } foreach (var arg in movies) { try { var related = Client.GetMovieRecommendationsAsync(arg.TmdbCode); var similar = Client.GetMovieSimilarAsync(arg.TmdbCode); Task.WaitAll(related, similar); foreach (var movie in related.Result.Results) { File(movie); returnValue.AddRelated(movie.Id, arg); } foreach (var movie in similar.Result.Results) { File(movie); returnValue.AddSimilar(movie.Id, arg); } sender.ReportProgress(100 * current++ / total, arg.CachedMovie?.Name); } catch { //todo - record error, retry etc } } //var related = movies.Select(arg => (arg.TmdbCode,Client.GetMovieRecommendationsAsync(arg.TmdbCode))).ToList(); //var similar = movies.Select(arg => (arg.TmdbCode,Client.GetMovieSimilarAsync(arg.TmdbCode))).ToList(); //Task.WaitAll(related.Select(tuple => tuple.Item2).ToArray()); //Task.WaitAll(similar.Select(tuple => tuple.Item2).ToArray()); return(returnValue); }
public async Task <Recomendations> GetRecommendations(TVDoc mDoc, BackgroundWorker sender, List <ShowConfiguration> shows) { string lang = "en"; int total = shows.Count; int current = 0; Task <SearchContainer <SearchTv> > topRated = Client.GetTvShowTopRatedAsync(); Task <SearchContainer <SearchTv> > trending = Client.GetTrendingTvAsync(TimeWindow.Week); await topRated; await trending; Recomendations returnValue = new Recomendations(); foreach (var top in topRated.Result.Results) { File(top); returnValue.AddTopRated(top.Id); } foreach (var top in trending.Result.Results) { File(top); returnValue.AddTrending(top.Id); } foreach (var arg in shows) { try { AddRecommendationsFrom(arg, returnValue); sender.ReportProgress(100 * current++ / total, arg.CachedShow?.Name); } catch { //todo record and resolve /retry errors } } return(returnValue); }