Esempio n. 1
0
        /// <summary>
        /// Gets the requests.
        /// </summary>
        /// <param name="count">The count.</param>
        /// <param name="position">The position.</param>
        /// <returns></returns>
        public async Task <IEnumerable <MovieRequests> > GetRequests(int count, int position)
        {
            var allRequests = await MovieRepository.GetWithUser().Skip(position).Take(count).ToListAsync();

            allRequests.ForEach(x =>
            {
                x.PosterPath = PosterPathHelper.FixPosterPath(x.PosterPath);
            });
            return(allRequests);
        }
Esempio n. 2
0
        /// <summary>
        /// Searches the movie request.
        /// </summary>
        /// <param name="search">The search.</param>
        /// <returns></returns>
        public async Task <IEnumerable <MovieRequests> > SearchMovieRequest(string search)
        {
            var allRequests = await MovieRepository.GetWithUser().ToListAsync();

            var results = allRequests.Where(x => x.Title.Contains(search, CompareOptions.IgnoreCase)).ToList();

            results.ForEach(x =>
            {
                x.PosterPath = PosterPathHelper.FixPosterPath(x.PosterPath);
            });
            return(results);
        }
Esempio n. 3
0
        public async Task<TvRequests> UpdateTvRequest(TvRequests request)
        {
            await Audit.Record(AuditType.Updated, AuditArea.TvRequest, $"Updated Request {request.Title}", Username);
            var allRequests = TvRepository.Get();
            var results = await allRequests.FirstOrDefaultAsync(x => x.Id == request.Id);

            results.TvDbId = request.TvDbId;
            results.ImdbId = request.ImdbId;
            results.Overview = request.Overview;
            results.PosterPath = PosterPathHelper.FixPosterPath(request.PosterPath);
            results.QualityOverride = request.QualityOverride;
            results.RootFolder = request.RootFolder;
            
            await TvRepository.Update(results);
            return results;
        }
Esempio n. 4
0
        public async Task <TvRequests> UpdateTvRequest(TvRequests request)
        {
            var allRequests = TvRepository.Get();
            var results     = await allRequests.FirstOrDefaultAsync(x => x.Id == request.Id);

            results.TvDbId          = request.TvDbId;
            results.ImdbId          = request.ImdbId;
            results.Overview        = request.Overview;
            results.PosterPath      = PosterPathHelper.FixPosterPath(request.PosterPath);
            results.Background      = PosterPathHelper.FixBackgroundPath(request.Background);
            results.QualityOverride = request.QualityOverride;
            results.RootFolder      = request.RootFolder;

            await TvRepository.Update(results);

            return(results);
        }
Esempio n. 5
0
        /// <summary>
        /// Gets the requests.
        /// </summary>
        /// <param name="count">The count.</param>
        /// <param name="position">The position.</param>
        /// <returns></returns>
        public async Task <IEnumerable <MovieRequests> > GetRequests(int count, int position)
        {
            var shouldHide = await HideFromOtherUsers();

            List <MovieRequests> allRequests;

            if (shouldHide.Hide)
            {
                allRequests = await MovieRepository.GetWithUser(shouldHide.UserId).Skip(position).Take(count).ToListAsync();
            }
            else
            {
                allRequests = await MovieRepository.GetWithUser().Skip(position).Take(count).ToListAsync();
            }
            allRequests.ForEach(x =>
            {
                x.PosterPath = PosterPathHelper.FixPosterPath(x.PosterPath);
            });
            return(allRequests);
        }
Esempio n. 6
0
        /// <summary>
        /// Gets the requests.
        /// </summary>
        /// <param name="count">The count.</param>
        /// <param name="position">The position.</param>
        /// <returns></returns>
        public async Task <IEnumerable <MovieRequests> > GetRequests(int count, int position)
        {
            var shouldHide = await HideFromOtherUsers();

            List <MovieRequests> allRequests;

            if (shouldHide.Hide)
            {
                allRequests = await MovieRepository.GetWithUser(shouldHide.UserId).Skip(position).Take(count).OrderByDescending(x => x.ReleaseDate).ToListAsync();
            }
            else
            {
                allRequests = await MovieRepository.GetWithUser().Skip(position).Take(count).OrderByDescending(x => x.ReleaseDate).ToListAsync();
            }
            allRequests.ForEach(async x =>
            {
                x.PosterPath = PosterPathHelper.FixPosterPath(x.PosterPath);
                await CheckForSubscription(shouldHide, x);
            });
            return(allRequests);
        }
Esempio n. 7
0
        private async Task CheckForSubscription(HideResult shouldHide, List <MovieRequests> movieRequests)
        {
            var requestIds = movieRequests.Select(x => x.Id);
            var sub        = await _subscriptionRepository.GetAll().Where(s =>
                                                                          s.UserId == shouldHide.UserId && requestIds.Contains(s.RequestId) && s.RequestType == RequestType.Movie)
                             .ToListAsync();

            foreach (var x in movieRequests)
            {
                x.PosterPath = PosterPathHelper.FixPosterPath(x.PosterPath);
                if (shouldHide.UserId == x.RequestedUserId)
                {
                    x.ShowSubscribe = false;
                }
                else
                {
                    x.ShowSubscribe = true;
                    var hasSub = sub.FirstOrDefault(r => r.RequestId == x.Id);
                    x.Subscribed = hasSub != null;
                }
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Updates the movie request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public async Task <MovieRequests> UpdateMovieRequest(MovieRequests request)
        {
            var allRequests = await MovieRepository.GetWithUser().ToListAsync();

            var results = allRequests.FirstOrDefault(x => x.Id == request.Id);

            results.Approved         = request.Approved;
            results.Available        = request.Available;
            results.Denied           = request.Denied;
            results.DeniedReason     = request.DeniedReason;
            results.ImdbId           = request.ImdbId;
            results.IssueId          = request.IssueId;
            results.Issues           = request.Issues;
            results.Overview         = request.Overview;
            results.PosterPath       = PosterPathHelper.FixPosterPath(request.PosterPath);
            results.QualityOverride  = request.QualityOverride;
            results.RootPathOverride = request.RootPathOverride;

            await MovieRepository.Update(results);

            return(results);
        }
Esempio n. 9
0
        /// <summary>
        /// Gets the requests.
        /// </summary>
        /// <returns></returns>
        public async Task <IEnumerable <MovieRequests> > GetRequests()
        {
            var shouldHide = await HideFromOtherUsers();

            List <MovieRequests> allRequests;

            if (shouldHide.Hide)
            {
                allRequests = await MovieRepository.GetWithUser(shouldHide.UserId).ToListAsync();
            }
            else
            {
                allRequests = await MovieRepository.GetWithUser().ToListAsync();
            }

            allRequests.ForEach(async x =>
            {
                x.PosterPath = PosterPathHelper.FixPosterPath(x.PosterPath);
                await CheckForSubscription(shouldHide, x);
            });
            return(allRequests);
        }
Esempio n. 10
0
        /// <summary>
        /// Searches the movie request.
        /// </summary>
        /// <param name="search">The search.</param>
        /// <returns></returns>
        public async Task <IEnumerable <MovieRequests> > SearchMovieRequest(string search)
        {
            var shouldHide = await HideFromOtherUsers();

            List <MovieRequests> allRequests;

            if (shouldHide.Hide)
            {
                allRequests = await MovieRepository.GetWithUser(shouldHide.UserId).ToListAsync();
            }
            else
            {
                allRequests = await MovieRepository.GetWithUser().ToListAsync();
            }
            var results = allRequests.Where(x => x.Title.Contains(search, CompareOptions.IgnoreCase)).ToList();

            results.ForEach(x =>
            {
                x.PosterPath = PosterPathHelper.FixPosterPath(x.PosterPath);
            });
            return(results);
        }
Esempio n. 11
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));
        }
Esempio n. 12
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));
        }
Esempio n. 13
0
        /// <summary>
        /// Gets the requests.
        /// </summary>
        /// <param name="count">The count.</param>
        /// <param name="position">The position.</param>
        /// <param name="orderFilter">The order/filter type.</param>
        /// <returns></returns>
        public async Task <RequestsViewModel <MovieRequests> > GetRequests(int count, int position,
                                                                           OrderFilterModel orderFilter)
        {
            var shouldHide = await HideFromOtherUsers();

            IQueryable <MovieRequests> allRequests;

            if (shouldHide.Hide)
            {
                allRequests =
                    MovieRepository.GetWithUser(shouldHide
                                                .UserId); //.Skip(position).Take(count).OrderByDescending(x => x.ReleaseDate).ToListAsync();
            }
            else
            {
                allRequests =
                    MovieRepository
                    .GetWithUser();     //.Skip(position).Take(count).OrderByDescending(x => x.ReleaseDate).ToListAsync();
            }

            switch (orderFilter.AvailabilityFilter)
            {
            case FilterType.None:
                break;

            case FilterType.Available:
                allRequests = allRequests.Where(x => x.Available);
                break;

            case FilterType.NotAvailable:
                allRequests = allRequests.Where(x => !x.Available);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            switch (orderFilter.StatusFilter)
            {
            case FilterType.None:
                break;

            case FilterType.Approved:
                allRequests = allRequests.Where(x => x.Approved);
                break;

            case FilterType.Processing:
                allRequests = allRequests.Where(x => x.Approved && !x.Available);
                break;

            case FilterType.PendingApproval:
                allRequests = allRequests.Where(x => !x.Approved && !x.Available && !(x.Denied ?? false));
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            var total = allRequests.Count();

            var requests = await(OrderMovies(allRequests, orderFilter.OrderType)).Skip(position).Take(count)
                           .ToListAsync();

            requests.ForEach(async x =>
            {
                x.PosterPath = PosterPathHelper.FixPosterPath(x.PosterPath);
                await CheckForSubscription(shouldHide, x);
            });
            return(new RequestsViewModel <MovieRequests>
            {
                Collection = requests,
                Total = total
            });
        }
Esempio n. 14
0
 public string PostPathTest(string posterPath)
 {
     return(PosterPathHelper.FixPosterPath(posterPath));
 }