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); }
private void AddRecommendationsFrom(ShowConfiguration arg, Recomendations returnValue) { if (arg.TmdbCode == 0) { string?imdb = arg.CachedShow?.Imdb; if (!imdb.HasValue()) { return; } int?tmdbcode = LookupTvbdIdByImdb(imdb !, false); if (!tmdbcode.HasValue) { return; } arg.TmdbCode = tmdbcode.Value; } Task <SearchContainer <SearchTv> >?related = Client.GetTvShowRecommendationsAsync(arg.TmdbCode); Task <SearchContainer <SearchTv> >?similar = Client.GetTvShowSimilarAsync(arg.TmdbCode); Task.WaitAll(related, similar); if (related.Result != null) { foreach (var s in related.Result.Results) { File(s); returnValue.AddRelated(s.Id, arg); } } if (similar.Result != null) { foreach (var s in similar.Result.Results) { File(s); returnValue.AddSimilar(s.Id, arg); } } }