public ActionResult CreateMovie(MovieRequestViewModel movieRequest)
        {
            if (ModelState.IsValid)
            {
                var         movie = movieRequest.Movie;
                Translation translation;
                Request     req = null;

                // Check if the movie the user is trying to create a request for already exists.
                var movieToCheckFor = _unitOfWork.MovieRepository.Get()
                                      .Where(m => m.Title == movie.Title)
                                      .Where(m => m.ReleaseYear == movie.ReleaseYear)
                                      .SingleOrDefault();
                // If the movie doesn't exists, insert the movie and request to the database.
                if (movieToCheckFor == null)
                {
                    _unitOfWork.MovieRepository.Insert(movieRequest.Movie);
                    _unitOfWork.RequestRepository.Insert(movieRequest.Request);
                    _unitOfWork.Save();
                    TempData["UserMessage"] = "Beiðnin var stofnuð";
                    return(RedirectToAction("Index", "Request"));
                }
                // If the movie exists we need to check if it already has the translation or the request
                else if ((translation = _unitOfWork.TranslationRepository.Get()
                                        .Where(t => t.MediaID == movieToCheckFor.ID)
                                        .Where(t => t.LanguageID == movieRequest.Request.LanguageID)
                                        .SingleOrDefault()) == null &&
                         (req = _unitOfWork.RequestRepository.Get()
                                .Where(r => r.MediaID == movieToCheckFor.ID)
                                .Where(r => r.LanguageID == movieRequest.Request.LanguageID)
                                .SingleOrDefault()) == null)
                {
                    // If not we insert the request.
                    movieRequest.Request.MediaID = movieToCheckFor.ID;
                    _unitOfWork.RequestRepository.Insert(movieRequest.Request);
                    _unitOfWork.Save();
                    TempData["UserMessage"] = "Beiðnin var stofnuð";
                    return(RedirectToAction("Index", "Request"));
                }
                movieRequest.Movie = movieToCheckFor;
                if (req != null)
                {
                    ViewBag.Errormsg = "Þessi beiðni er nú þegar til.";
                    ViewBag.ReqExist = true;
                }
                else
                {
                    ViewBag.Errormsg      = "Þessi þýðing er nú þegar til.";
                    ViewBag.ReqExist      = false;
                    ViewBag.TranslationID = translation.ID;
                }
            }
            ViewBag.SubCategories = new SelectList(_unitOfWork.CategoryRepository.Get(), "ID", "Name", movieRequest.Movie.CategoryID);
            ViewBag.Languages     = new SelectList(_unitOfWork.LanguageRepository.Get(), "ID", "Name");
            return(View("RequestMovie"));
        }
Beispiel #2
0
        public async Task <RequestEngineResult> RequestMovie([FromBody] MovieRequestViewModel movie)
        {
            var result = await MovieRequestEngine.RequestMovie(movie);

            if (result.Result)
            {
                var voteResult = await VoteEngine.UpVote(result.RequestId, RequestType.Movie);

                if (voteResult.IsError)
                {
                    Log.LogError("Couldn't automatically add the vote for the movie {0} because {1}", movie.TheMovieDbId, voteResult.ErrorMessage);
                }
            }

            return(result);
        }
Beispiel #3
0
        /// <summary>
        /// Requests the movie.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <returns></returns>
        public async Task <RequestEngineResult> RequestMovie(MovieRequestViewModel model)
        {
            var movieInfo = await MovieApi.GetMovieInformationWithExtraInfo(model.TheMovieDbId, model.LanguageCode);

            if (movieInfo == null || movieInfo.Id == 0)
            {
                return(new RequestEngineResult
                {
                    Result = false,
                    Message = "There was an issue adding this movie!",
                    ErrorMessage = $"Please try again later"
                });
            }

            var fullMovieName =
                $"{movieInfo.Title}{(!string.IsNullOrEmpty(movieInfo.ReleaseDate) ? $" ({DateTime.Parse(movieInfo.ReleaseDate).Year})" : string.Empty)}";

            var userDetails = await GetUser();

            var canRequestOnBehalf = model.RequestOnBehalf.HasValue();

            var isAdmin = await UserManager.IsInRoleAsync(userDetails, OmbiRoles.PowerUser) || await UserManager.IsInRoleAsync(userDetails, OmbiRoles.Admin);

            if (canRequestOnBehalf && !isAdmin)
            {
                return(new RequestEngineResult
                {
                    Result = false,
                    Message = "You do not have the correct permissions to request on behalf of users!",
                    ErrorMessage = $"You do not have the correct permissions to request on behalf of users!"
                });
            }

            if ((model.RootFolderOverride.HasValue || model.QualityPathOverride.HasValue) && !isAdmin)
            {
                return(new RequestEngineResult
                {
                    Result = false,
                    Message = "You do not have the correct permissions!",
                    ErrorMessage = $"You do not have the correct permissions!"
                });
            }

            var requestModel = new MovieRequests
            {
                TheMovieDbId = movieInfo.Id,
                RequestType  = RequestType.Movie,
                Overview     = movieInfo.Overview,
                ImdbId       = movieInfo.ImdbId,
                PosterPath   = PosterPathHelper.FixPosterPath(movieInfo.PosterPath),
                Title        = movieInfo.Title,
                ReleaseDate  = !string.IsNullOrEmpty(movieInfo.ReleaseDate)
                    ? DateTime.Parse(movieInfo.ReleaseDate)
                    : DateTime.MinValue,
                Status           = movieInfo.Status,
                RequestedDate    = DateTime.UtcNow,
                Approved         = false,
                RequestedUserId  = canRequestOnBehalf ? model.RequestOnBehalf : userDetails.Id,
                Background       = movieInfo.BackdropPath,
                LangCode         = model.LanguageCode,
                RequestedByAlias = model.RequestedByAlias,
                RootPathOverride = model.RootFolderOverride.GetValueOrDefault(),
                QualityOverride  = model.QualityPathOverride.GetValueOrDefault()
            };

            var usDates = movieInfo.ReleaseDates?.Results?.FirstOrDefault(x => x.IsoCode == "US");

            requestModel.DigitalReleaseDate = usDates?.ReleaseDate
                                              ?.FirstOrDefault(x => x.Type == ReleaseDateType.Digital)?.ReleaseDate;

            var ruleResults       = (await RunRequestRules(requestModel)).ToList();
            var ruleResultInError = ruleResults.Find(x => !x.Success);

            if (ruleResultInError != null)
            {
                return(new RequestEngineResult
                {
                    ErrorMessage = ruleResultInError.Message,
                    ErrorCode = ruleResultInError.ErrorCode
                });
            }

            if (requestModel.Approved) // The rules have auto approved this
            {
                var requestEngineResult = await AddMovieRequest(requestModel, fullMovieName, model.RequestOnBehalf);

                if (requestEngineResult.Result)
                {
                    var result = await ApproveMovie(requestModel);

                    if (result.IsError)
                    {
                        Logger.LogWarning("Tried auto sending movie but failed. Message: {0}", result.Message);
                        return(new RequestEngineResult
                        {
                            Message = result.Message,
                            ErrorMessage = result.Message,
                            Result = false
                        });
                    }

                    return(requestEngineResult);
                }

                // If there are no providers then it's successful but movie has not been sent
            }

            return(await AddMovieRequest(requestModel, fullMovieName, model.RequestOnBehalf));
        }
Beispiel #4
0
 public async Task <RequestEngineResult> RequestMovie([FromBody] MovieRequestViewModel movie)
 {
     return(await MovieRequestEngine.RequestMovie(movie));
 }
Beispiel #5
0
        /// <summary>
        /// Requests the movie.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <returns></returns>
        public async Task <RequestEngineResult> RequestMovie(MovieRequestViewModel model)
        {
            var movieInfo = await MovieApi.GetMovieInformationWithExtraInfo(model.TheMovieDbId);

            if (movieInfo == null || movieInfo.Id == 0)
            {
                return(new RequestEngineResult
                {
                    Result = false,
                    Message = "There was an issue adding this movie!",
                    ErrorMessage = $"Please try again later"
                });
            }

            var fullMovieName =
                $"{movieInfo.Title}{(!string.IsNullOrEmpty(movieInfo.ReleaseDate) ? $" ({DateTime.Parse(movieInfo.ReleaseDate).Year})" : string.Empty)}";

            var userDetails = await GetUser();

            var requestModel = new MovieRequests
            {
                TheMovieDbId = movieInfo.Id,
                RequestType  = RequestType.Movie,
                Overview     = movieInfo.Overview,
                ImdbId       = movieInfo.ImdbId,
                PosterPath   = PosterPathHelper.FixPosterPath(movieInfo.PosterPath),
                Title        = movieInfo.Title,
                ReleaseDate  = !string.IsNullOrEmpty(movieInfo.ReleaseDate)
                    ? DateTime.Parse(movieInfo.ReleaseDate)
                    : DateTime.MinValue,
                Status          = movieInfo.Status,
                RequestedDate   = DateTime.UtcNow,
                Approved        = false,
                RequestedUserId = userDetails.Id,
                Background      = movieInfo.BackdropPath
            };

            var usDates = movieInfo.ReleaseDates?.Results?.FirstOrDefault(x => x.IsoCode == "US");

            requestModel.DigitalReleaseDate = usDates?.ReleaseDate
                                              ?.FirstOrDefault(x => x.Type == ReleaseDateType.Digital)?.ReleaseDate;

            var ruleResults = (await RunRequestRules(requestModel)).ToList();

            if (ruleResults.Any(x => !x.Success))
            {
                return(new RequestEngineResult
                {
                    ErrorMessage = ruleResults.FirstOrDefault(x => x.Message.HasValue()).Message
                });
            }

            if (requestModel.Approved) // The rules have auto approved this
            {
                var requestEngineResult = await AddMovieRequest(requestModel, fullMovieName);

                if (requestEngineResult.Result)
                {
                    var result = await ApproveMovie(requestModel);

                    if (result.IsError)
                    {
                        Logger.LogWarning("Tried auto sending movie but failed. Message: {0}", result.Message);
                        return(new RequestEngineResult
                        {
                            Message = result.Message,
                            ErrorMessage = result.Message,
                            Result = false
                        });
                    }

                    return(requestEngineResult);
                }

                // If there are no providers then it's successful but movie has not been sent
            }

            return(await AddMovieRequest(requestModel, fullMovieName));
        }