Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }