private async Task HandleTvShowSelection(SearchedTvShow searchedTvShow) { var tvShow = await GetTvShow(searchedTvShow); if (!tvShow.Seasons.Any() && tvShow.HasEnded) { await _userInterface.DisplayTvShowDetailsAsync(tvShow); await _userInterface.WarnShowCannotBeRequestedAsync(tvShow); } else if (tvShow.AllSeasonsFullyRequested()) { if (tvShow.Seasons.OfType <FutureTvSeasons>().Any()) { await new FutureSeasonsRequestingWorkflow(_user, _searcher, _requester, _userInterface, _tvShowNotificationWorkflow) .RequestAsync(tvShow, tvShow.Seasons.OfType <FutureTvSeasons>().FirstOrDefault()); } else { await _userInterface.DisplayTvShowDetailsAsync(tvShow); await _userInterface.WarnShowHasEndedAsync(tvShow); } } else if (!tvShow.IsMultiSeasons() && tvShow.Seasons.OfType <NormalTvSeason>().Any()) { await new NormalTvSeasonRequestingWorkflow(_user, _searcher, _requester, _userInterface, _tvShowNotificationWorkflow) .RequestAsync(tvShow, tvShow.Seasons.OfType <NormalTvSeason>().Single()); } else { await RequestTvShowSeason(tvShow); } }
public async Task HandleTvShowSelectionAsync(int tvDbId) { var tvShow = await GetTvShowAsync(tvDbId); if (!tvShow.Seasons.Any() && tvShow.HasEnded) { await _userInterface.WarnShowCannotBeRequestedAsync(tvShow); } else if (tvShow.AllSeasonsFullyRequested()) { if (tvShow.Seasons.OfType <FutureTvSeasons>().Any()) { await HandleSeasonSelectionAsync(tvShow, tvShow.Seasons.OfType <FutureTvSeasons>().Single()); } else { if (tvShow.HasEnded) { await _userInterface.WarnShowHasEndedAsync(tvShow); } else { await _userInterface.WarnAlreadySeasonAlreadyRequestedAsync(tvShow, new FutureTvSeasons()); } } } else if (!tvShow.IsMultiSeasons() && tvShow.Seasons.OfType <NormalTvSeason>().Any()) { await HandleSeasonSelectionAsync(tvShow, tvShow.Seasons.OfType <NormalTvSeason>().Single()); } else { var seasons = GetAvailableTvShowSeasonsBasedOnRestrictions(tvShow); if (seasons.Length == 1) { await HandleSeasonSelectionAsync(tvShow, seasons.Single()); } else { await _userInterface.DisplayMultiSeasonSelectionAsync(new TvShowRequest(_user, _categoryId), tvShow, GetAvailableTvShowSeasonsBasedOnRestrictions(tvShow)); } } }