private void MirrorPlexSeasons(PlexMediaItemRow plexItem, TvRequestRow request, bool createExtraSeason, bool createExtraEpisode)
        {
            foreach (var season in plexItem.PlexSeasons)
            {
                var requestSeason = new TvRequestSeasonRow
                {
                    SeasonIndex       = season.Season,
                    TvRequestEpisodes = new List <TvRequestEpisodeRow>()
                };

                foreach (var episode in season.PlexEpisodes)
                {
                    var requestEpisode = new TvRequestEpisodeRow
                    {
                        EpisodeIndex = episode.Episode
                    };

                    requestSeason.TvRequestEpisodes.Add(requestEpisode);
                }

                request.TvRequestSeasons.Add(requestSeason);
            }

            if (createExtraSeason)
            {
                var season = new TvRequestSeasonRowBuilder().Build();
                request.TvRequestSeasons.Add(season);
            }

            if (createExtraEpisode)
            {
                var episode = new TvRequestEpisodeRowBuilder().Build();
                request.TvRequestSeasons.ElementAt(0).TvRequestEpisodes.Add(episode);
            }
        }
        private async Task <TvRequestRow> CreateRequest(CreateTvRequestCommand request)
        {
            var tvDetails   = _theMovieDbService.GetTvDetails(request.TheMovieDbId);
            var externalIds = _theMovieDbService.GetTvExternalIds(request.TheMovieDbId);

            await Task.WhenAll(tvDetails, externalIds);

            var tvRequest = new TvRequestRow
            {
                RequestStatus = RequestStatuses.PendingApproval,
                Title         = tvDetails.Result.Name,
                AirDateUtc    = DateTime.Parse(tvDetails.Result.First_Air_Date),
                ImagePath     = tvDetails.Result.Poster_Path,
                Track         = request.TrackShow,
                TheMovieDbId  = request.TheMovieDbId
            };

            tvRequest.TvRequestAgents.Add(new TvRequestAgentRow(AgentTypes.TheMovieDb, request.TheMovieDbId.ToString()));

            if (!string.IsNullOrEmpty(externalIds.Result.TvDb_Id))
            {
                tvRequest.TvRequestAgents.Add(new TvRequestAgentRow(AgentTypes.TheTvDb, externalIds.Result.TvDb_Id));
            }

            await _requestService.Add(tvRequest);

            return(tvRequest);
        }
Пример #3
0
        private void PartialReject(TvRequestRow request, Dictionary <int, List <int> > episodesBySeason)
        {
            if (episodesBySeason == null)
            {
                return;
            }

            foreach (var season in request.TvRequestSeasons)
            {
                if (episodesBySeason.TryGetValue(season.SeasonIndex, out var requestEpisodes))
                {
                    if (requestEpisodes == null)
                    {
                        continue;
                    }

                    foreach (var episode in season.TvRequestEpisodes)
                    {
                        if (requestEpisodes.Contains(episode.EpisodeIndex))
                        {
                            RejectEpisode(episode);
                        }
                    }
                }
            }
        }
Пример #4
0
        private void AutoCompleteTvSeasonEpisodes(TvRequestRow incompleteRequest, PlexMediaItemRow plexMediaItem)
        {
            foreach (var season in incompleteRequest.TvRequestSeasons)
            {
                var matchingSeason = plexMediaItem.PlexSeasons.FirstOrDefault(x => x.Season == season.SeasonIndex);

                if (matchingSeason == null)
                {
                    continue;
                }

                season.PlexSeason = matchingSeason;

                foreach (var episode in season.TvRequestEpisodes)
                {
                    if (episode.RequestStatus == RequestStatuses.Completed)
                    {
                        continue;
                    }

                    var matchingEpisode = matchingSeason.PlexEpisodes.FirstOrDefault(x => x.Episode == episode.EpisodeIndex);

                    if (matchingEpisode == null)
                    {
                        continue;
                    }

                    episode.PlexEpisode   = matchingEpisode;
                    episode.RequestStatus = RequestStatuses.Completed;
                }
            }

            _requestService.SetAggregatedStatus(incompleteRequest);
        }
Пример #5
0
        private void GivenOneEpisodeOfStatus(RequestStatuses status, RequestStatuses allOtherEpisodeStatus)
        {
            _request = new TvRequestRowBuilder().WithTrack(false).Build();

            SetEpisodeStatuses(allOtherEpisodeStatus);

            _request.TvRequestSeasons.ElementAt(0).TvRequestEpisodes.ElementAt(0).RequestStatus = status;
        }
        private void GivenARequestIsFound()
        {
            _request = new TvRequestRowBuilder().WithRequestStatus(RequestStatuses.PendingApproval).WithTrack(false).Build();

            SetEpisodeStatus(_request, RequestStatuses.PendingApproval);

            _requestService.GetRequestById(Arg.Any <int>()).Returns(_request);
        }
 private static void SetEpisodeStatus(TvRequestRow request, RequestStatuses status)
 {
     foreach (var season in request.TvRequestSeasons)
     {
         foreach (var episode in season.TvRequestEpisodes)
         {
             episode.RequestStatus = status;
         }
     }
 }
        private void GivenARequestIsFoundWithACompletedEpisode()
        {
            _request = new TvRequestRowBuilder().WithRequestStatus(RequestStatuses.PendingApproval).WithTrack(false).Build();

            SetEpisodeStatus(_request, RequestStatuses.PendingApproval);

            _request.TvRequestSeasons.ElementAt(0).TvRequestEpisodes.ElementAt(0).RequestStatus = RequestStatuses.Completed;

            _requestService.GetRequestById(Arg.Any <int>()).Returns(_request);
        }
Пример #9
0
 private static void ApproveAllEpisodes(TvRequestRow request)
 {
     foreach (var season in request.TvRequestSeasons)
     {
         foreach (var episode in season.TvRequestEpisodes)
         {
             ApproveEpisode(episode);
         }
     }
 }
Пример #10
0
 private void RejectAll(TvRequestRow request)
 {
     foreach (var season in request.TvRequestSeasons)
     {
         foreach (var episode in season.TvRequestEpisodes)
         {
             RejectEpisode(episode);
         }
     }
 }
Пример #11
0
        private static void ApproveEpisodes(TvRequestRow request, IReadOnlyDictionary <int, List <int> > commandEpisodesBySeason)
        {
            foreach (var season in request.TvRequestSeasons)
            {
                if (!commandEpisodesBySeason.TryGetValue(season.SeasonIndex, out var commandEpisodes))
                {
                    continue;
                }

                foreach (var episode in season.TvRequestEpisodes)
                {
                    if (!commandEpisodes.Contains(episode.EpisodeIndex))
                    {
                        continue;
                    }

                    ApproveEpisode(episode);
                }
            }
        }
        private void AddUserRequests(TvRequestRow existingRequest, List <TvRequestSeasonRow> seasonsToRequest)
        {
            var userId = _claimsPrincipalAccessor.UserId;

            foreach (var seasonToRequest in seasonsToRequest)
            {
                var userRequest = new TvRequestUserRow
                {
                    UserId = userId,
                    Season = seasonToRequest.SeasonIndex
                };

                foreach (var episodeToRequest in seasonToRequest.TvRequestEpisodes)
                {
                    userRequest.Episode = episodeToRequest.EpisodeIndex;
                }

                existingRequest.TvRequestUsers.Add(userRequest);
            }
        }
        private void GivenAMatchingTvRequestWithAllMatchingEpisodes(bool istracked)
        {
            var plexItem = _agentsForPlexItems.First().Value;

            _request = new TvRequestRowBuilder().Build();
            _request.TvRequestAgents.Add(GetMatchingAgent());
            _request.TvRequestSeasons = new List <TvRequestSeasonRow>();
            _request.Track            = istracked;

            if (!istracked)
            {
                MirrorPlexSeasons(plexItem, _request, false, false);
            }

            _tvRequests = new List <TvRequestRow> {
                _request
            };

            _requestService.GetIncompleteRequests().Returns(_tvRequests);
        }
        private async Task AddNewRootLevelRequests(TvRequestRow existingRequest, List <TvRequestSeasonRow> seasonsToRequest)
        {
            foreach (var seasonToRequest in seasonsToRequest)
            {
                var seasonDetails = await _theMovieDbService.GetTvSeasonDetails(existingRequest.TheMovieDbId, seasonToRequest.SeasonIndex);

                var rootSeason = existingRequest.TvRequestSeasons.FirstOrDefault(x => x.SeasonIndex == seasonToRequest.SeasonIndex);
                if (seasonDetails != null && rootSeason == null)
                {
                    rootSeason = new TvRequestSeasonRow
                    {
                        AirDateUtc    = DateTime.Parse(seasonDetails.Air_Date),
                        Title         = seasonDetails.Name,
                        ImagePath     = seasonDetails.Poster_Path,
                        RequestStatus = RequestStatuses.PendingApproval
                    };
                }

                SetEpisodeDetails(rootSeason, seasonToRequest.TvRequestEpisodes, seasonDetails);

                existingRequest.TvRequestSeasons.Add(rootSeason);
            }
        }
Пример #15
0
        public void SetAggregatedStatus(TvRequestRow request)
        {
            if (request.Track)
            {
                return;
            }

            var allStatusCounts = _allStatuses.ToDictionary(status => status, count => 0);

            foreach (var season in request.TvRequestSeasons)
            {
                var seasonStatusCounts = _allStatuses.ToDictionary(status => status, count => 0);

                foreach (var episode in season.TvRequestEpisodes)
                {
                    allStatusCounts[episode.RequestStatus]++;
                    seasonStatusCounts[episode.RequestStatus]++;
                }

                season.RequestStatus = CalculateStatus(seasonStatusCounts);
            }

            request.RequestStatus = CalculateStatus(allStatusCounts);
        }
Пример #16
0
 public async Task Add(TvRequestRow request)
 {
     await _requestRepository.Add(request);
 }
Пример #17
0
 private void GivenAllRequestEpisodesOfStatus(RequestStatuses status)
 {
     _request = new TvRequestRowBuilder().WithTrack(false).Build();
     SetEpisodeStatuses(status);
 }
Пример #18
0
 private void GivenTrackedRequest(RequestStatuses status)
 {
     _request = new TvRequestRowBuilder().WithTrack(true).WithRequestStatus(status).Build();
 }
Пример #19
0
 public async Task Add(TvRequestRow request)
 {
     await base.Add(request);
 }
Пример #20
0
 public void SetAggregatedStatus(TvRequestRow request)
 {
     _requestHelper.SetAggregatedStatus(request);
 }
 private void GivenARequestIsFound()
 {
     _request = new TvRequestRowBuilder().Build();
     _requestService.GetRequestById(Arg.Any <int>()).Returns(_request);
 }