private Response ProcessMovies(MovieSearchType searchType, string searchTerm)
        {
            var taskList = new List <Task>();

            var apiMovies = new List <MovieResult>();

            taskList.Add(Task.Factory.StartNew(() =>
            {
                switch (searchType)
                {
                case MovieSearchType.Search:
                    return(MovieApi.SearchMovie(searchTerm).Result.Select(x => new MovieResult()
                    {
                        Adult = x.Adult,
                        BackdropPath = x.BackdropPath,
                        GenreIds = x.GenreIds,
                        Id = x.Id,
                        OriginalLanguage = x.OriginalLanguage,
                        OriginalTitle = x.OriginalTitle,
                        Overview = x.Overview,
                        Popularity = x.Popularity,
                        PosterPath = x.PosterPath,
                        ReleaseDate = x.ReleaseDate,
                        Title = x.Title,
                        Video = x.Video,
                        VoteAverage = x.VoteAverage,
                        VoteCount = x.VoteCount
                    }).ToList());

                case MovieSearchType.CurrentlyPlaying:
                    return(MovieApi.GetCurrentPlayingMovies().Result.ToList());

                case MovieSearchType.Upcoming:
                    return(MovieApi.GetUpcomingMovies().Result.ToList());

                default:
                    return(new List <MovieResult>());
                }
            }).ContinueWith((t) =>
            {
                apiMovies = t.Result;
            }));

            Dictionary <int, RequestedModel> dbMovies = new Dictionary <int, RequestedModel>();

            taskList.Add(Task.Factory.StartNew(() =>
            {
                return(RequestService.GetAll().Where(x => x.Type == RequestType.Movie));
            }).ContinueWith((t) =>
            {
                var distinctResults = t.Result.DistinctBy(x => x.ProviderId);
                dbMovies            = distinctResults.ToDictionary(x => x.ProviderId);
            }));

            Task.WaitAll(taskList.ToArray());

            var cpCached   = CpCacher.QueuedIds();
            var plexMovies = Checker.GetPlexMovies();
            var settings   = PrService.GetSettings();
            var viewMovies = new List <SearchMovieViewModel>();

            foreach (MovieResult movie in apiMovies)
            {
                var viewMovie = new SearchMovieViewModel
                {
                    Adult            = movie.Adult,
                    BackdropPath     = movie.BackdropPath,
                    GenreIds         = movie.GenreIds,
                    Id               = movie.Id,
                    OriginalLanguage = movie.OriginalLanguage,
                    OriginalTitle    = movie.OriginalTitle,
                    Overview         = movie.Overview,
                    Popularity       = movie.Popularity,
                    PosterPath       = movie.PosterPath,
                    ReleaseDate      = movie.ReleaseDate,
                    Title            = movie.Title,
                    Video            = movie.Video,
                    VoteAverage      = movie.VoteAverage,
                    VoteCount        = movie.VoteCount
                };
                var canSee = CanUserSeeThisRequest(viewMovie.Id, settings.UsersCanViewOnlyOwnRequests, dbMovies);
                if (Checker.IsMovieAvailable(plexMovies.ToArray(), movie.Title, movie.ReleaseDate?.Year.ToString()))
                {
                    viewMovie.Available = true;
                }
                else if (dbMovies.ContainsKey(movie.Id) && canSee) // compare to the requests db
                {
                    var dbm = dbMovies[movie.Id];

                    viewMovie.Requested = true;
                    viewMovie.Approved  = dbm.Approved;
                    viewMovie.Available = dbm.Available;
                }
                else if (cpCached.Contains(movie.Id) && canSee) // compare to the couchpotato db
                {
                    viewMovie.Requested = true;
                }

                viewMovies.Add(viewMovie);
            }

            return(Response.AsJson(viewMovies));
        }
Example #2
0
        // This function also searches for movies but is used to show them in a more user-friendly manner
        public static DataTable SearchForMovieDisplay(MovieSearchType type, MoviesToShow moviesToShow, string input)
        {
            string sql;

            if (input == "")
            {
                type = MovieSearchType.None;
            }

            if (moviesToShow == MoviesToShow.AllMovies)
            {
                switch (type)
                {
                case MovieSearchType.None:
                {
                    sql = SqlProcedures.RetrieveMoviesDisplay();
                    return(Call(sql));
                }

                case MovieSearchType.MovieTitle:
                {
                    sql = SqlProcedures.GetMoviesByTitleDisplay(input);
                    return(Call(sql));
                }

                case MovieSearchType.MovieGenre:
                {
                    sql = SqlProcedures.GetMoviesByGenreDisplay(input);
                    return(Call(sql));
                }

                case MovieSearchType.MovieDirector:
                {
                    sql = SqlProcedures.GetMoviesByDirectorDisplay(input);
                    return(Call(sql));
                }
                }
            }
            else
            {
                bool isRemoved = (moviesToShow == MoviesToShow.OnlyUnavailable);

                switch (type)
                {
                case MovieSearchType.None:
                {
                    sql = SqlProcedures.GetFilteredMoviesDisplay(isRemoved);
                    return(Call(sql));
                }

                case MovieSearchType.MovieTitle:
                {
                    sql = SqlProcedures.GetFilteredMoviesByTitleDisplay(input, isRemoved);
                    return(Call(sql));
                }

                case MovieSearchType.MovieGenre:
                {
                    sql = SqlProcedures.GetFilteredMoviesByGenreDisplay(input, isRemoved);
                    return(Call(sql));
                }

                case MovieSearchType.MovieDirector:
                {
                    sql = SqlProcedures.GetFilteredMoviesByDirectorDisplay(input, isRemoved);
                    return(Call(sql));
                }
                }
            }

            return(null);
        }