Exemplo n.º 1
0
        public async Task <TvShowRequestResult> RequestTvShowAsync(TvShowUserRequester requester, TvShow tvShow, TvSeason season)
        {
            try
            {
                var requestedSeasons = season is AllTvSeasons
                                        ? new List <TvSeason>(tvShow.Seasons.OfType <NormalTvSeason>())
                                        : season is FutureTvSeasons
                                            ? new List <TvSeason>()
                                            : new List <TvSeason> {
                    season
                };

                if (string.IsNullOrEmpty(tvShow.DownloadClientId))
                {
                    await CreateSonarrTvSeriesAsync(tvShow, requestedSeasons);
                }
                else
                {
                    await UpdateSonarrTvSeriesAsync(tvShow, requestedSeasons);
                }

                return(new TvShowRequestResult());
            }
            catch (System.Exception ex)
            {
                _logger.LogError(ex, $"An error while requesting tv show \"{tvShow.Title}\" from Sonarr: " + ex.Message);
            }

            throw new System.Exception("An error occurred while requesting a tv show from Sonarr");
        }
 public NormalTvSeasonRequestingWorkflow(
     TvShowUserRequester user,
     ITvShowSearcher searcher,
     ITvShowRequester requester,
     ITvShowUserInterface userInterface,
     TvShowNotificationsRepository tvShowNotificationsRepository)
 {
     _user          = user;
     _searcher      = searcher;
     _requester     = requester;
     _userInterface = userInterface;
     _notificationRequestRepository = tvShowNotificationsRepository;
 }
Exemplo n.º 3
0
 public NormalTvSeasonRequestingWorkflow(
     TvShowUserRequester user,
     ITvShowSearcher searcher,
     ITvShowRequester requester,
     ITvShowUserInterface userInterface,
     ITvShowNotificationWorkflow tvShowNotificationWorkflow)
 {
     _user          = user;
     _searcher      = searcher;
     _requester     = requester;
     _userInterface = userInterface;
     _tvShowNotificationWorkflow = tvShowNotificationWorkflow;
 }
Exemplo n.º 4
0
        async Task <TvShowRequestResult> ITvShowRequester.RequestTvShowAsync(TvShowUserRequester requester, TvShow tvShow, TvSeason season)
        {
            try
            {
                var wantedSeasonIds = season is AllTvSeasons
                    ? new HashSet <int>(tvShow.Seasons.OfType <NormalTvSeason>().Select(x => x.SeasonNumber))
                    : season is FutureTvSeasons
                        ? new HashSet <int>()
                        : new HashSet <int> {
                    season.SeasonNumber
                };

                var overseerrUser = await FindLinkedOverseerUserAsync(requester.UserId, requester.Username);

                var response = await HttpPostAsync(overseerrUser, $"{BaseURL}request", JsonConvert.SerializeObject(new
                {
                    mediaId   = tvShow.TheTvDbId,
                    mediaType = "tv",
                    seasons   = wantedSeasonIds.ToArray(),
                }));

                if (response.StatusCode == System.Net.HttpStatusCode.Forbidden)
                {
                    return(new TvShowRequestResult
                    {
                        WasDenied = true
                    });
                }

                await response.ThrowIfNotSuccessfulAsync("OverseerrRequestTvShowRequest failed", x => x.error);

                return(new TvShowRequestResult());
            }
            catch (System.Exception ex)
            {
                _logger.LogError(ex, $"An error while requesting tv show \"{tvShow.Title}\" from Overseerr: " + ex.Message);
                throw new System.Exception($"An error while requesting tv show \"{tvShow.Title}\" from Overseerr: " + ex.Message);
            }
        }
Exemplo n.º 5
0
        public async Task <TvShowRequestResult> RequestTvShowAsync(TvShowUserRequester requester, TvShow tvShow, TvSeason season)
        {
            var retryCount = 0;

            while (retryCount <= 5)
            {
                try
                {
                    var ombiUser = await FindLinkedOmbiUserAsync(requester.UserId, requester.Username);

                    var jsonTvShow = await FindTvShowByTheTvDbIdAsync(tvShow.TheTvDbId.ToString());

                    var wantedSeasonIds = season is AllTvSeasons
                        ? new HashSet <int>(tvShow.Seasons.OfType <NormalTvSeason>().Select(x => x.SeasonNumber))
                        : season is FutureTvSeasons
                            ? new HashSet <int>()
                            : new HashSet <int> {
                        season.SeasonNumber
                    };

                    var episodeToRequestCount = jsonTvShow.seasonRequests.Sum(s => wantedSeasonIds.Contains(s.seasonNumber) && s.CanBeRequested() ? s.episodes.Where(x => x.CanBeRequested()).Count() : 0);

                    if (ombiUser.CanRequestTvShows && ombiUser.TvEpisodeQuotaRemaining > 0)
                    {
                        var response = await HttpPostAsync(ombiUser, $"{BaseURL}/api/v1/Request/Tv", JsonConvert.SerializeObject(new
                        {
                            tvDbId       = tvShow.TheTvDbId,
                            requestAll   = false,
                            latestSeason = false,
                            firstSeason  = false,
                            seasons      = jsonTvShow.seasonRequests.Select(s =>
                            {
                                var episodes = wantedSeasonIds.Contains(s.seasonNumber) && s.CanBeRequested() ? s.episodes.Where(x => x.CanBeRequested()).Select(e => new JSONTvEpisode {
                                    episodeNumber = e.episodeNumber
                                }) : Array.Empty <JSONTvEpisode>();
                                episodes = episodes.Take(ombiUser.TvEpisodeQuotaRemaining);
                                ombiUser.TvEpisodeQuotaRemaining -= episodes.Count();

                                return(new
                                {
                                    seasonNumber = s.seasonNumber,
                                    episodes = episodes,
                                });
                            }),
                        }));

                        await response.ThrowIfNotSuccessfulAsync("OmbiCreateTvShowRequest failed", x => x.error);

                        return(new TvShowRequestResult());
                    }

                    return(new TvShowRequestResult
                    {
                        WasDenied = true
                    });
                }
                catch (System.Exception ex)
                {
                    _logger.LogError(ex, $"An error while requesting tv show \"{tvShow.Title}\" from Ombi: " + ex.Message);
                    retryCount++;
                    await Task.Delay(1000);
                }
            }

            throw new System.Exception("Something went wrong while requesting a tv show from Ombi");
        }
Exemplo n.º 6
0
 public TvShowRequest(TvShowUserRequester user, int categoryId)
 {
     User       = user;
     CategoryId = categoryId;
 }
Exemplo n.º 7
0
 public Task <TvShowRequestResult> RequestTvShowAsync(TvShowUserRequester requester, TvShow tvShow, TvSeason season)
 {
     return(CreateInstance <ITvShowRequester>().RequestTvShowAsync(requester, tvShow, season));
 }