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; }
public NormalTvSeasonRequestingWorkflow( TvShowUserRequester user, ITvShowSearcher searcher, ITvShowRequester requester, ITvShowUserInterface userInterface, ITvShowNotificationWorkflow tvShowNotificationWorkflow) { _user = user; _searcher = searcher; _requester = requester; _userInterface = userInterface; _tvShowNotificationWorkflow = tvShowNotificationWorkflow; }
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); } }
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"); }
public TvShowRequest(TvShowUserRequester user, int categoryId) { User = user; CategoryId = categoryId; }
public Task <TvShowRequestResult> RequestTvShowAsync(TvShowUserRequester requester, TvShow tvShow, TvSeason season) { return(CreateInstance <ITvShowRequester>().RequestTvShowAsync(requester, tvShow, season)); }