/// <summary> /// Returns detailed information for a single <see cref="TvMazeEpisode"/> with given <paramref name="id"/>. This method caches request /// to same episodes using the cache path given in <see cref="TvMazeApiV1"/> constructor. /// </summary> /// <param name="id">TvMaze id of series</param> /// <param name="season">Season number</param> /// <param name="episode">Episode number</param> /// <returns>Episode information</returns> public TvMazeEpisode GetSeriesEpisode(int id, int season, int episode, bool cacheOnly) { if (season == 0) //Does not support special episode requests { return(null); } string cache = CreateAndGetCacheName(id, string.Format("Season{0}_Episode{1}", season, episode)); TvMazeEpisode returnValue = null; if (!string.IsNullOrEmpty(cache) && File.Exists(cache)) { returnValue = _downloader.ReadCache <TvMazeEpisode>(cache); } else { if (cacheOnly) { return(null); } string url = GetUrl(URL_GETEPISODE, id, season, episode); returnValue = _downloader.Download <TvMazeEpisode>(url, cache); } return(returnValue); }
private static void TvSearchHandler(string queryTerm) { TVMazeClient tvMaze = new TVMazeClient(); var result = tvMaze.Serach(queryTerm); if (result.Found) { TvMazeShow show = result.Show; TvMazeEpisode lastEp = show.PrevEpisode; TvMazeEpisode nextEp = show.NextEpisode; string line1 = $" 14{show.name} 15-- {Common.GenerateCommaList(show.schedule?.days)} {show.schedule?.time} 8(14{show.status}8) (14{show.network?.name}8)"; Write(line1); string line2 = $"{CTRLK}14{CTRLB}Prev Episode {CTRLB}{CTRLK}15-- {lastEp?.airdate} {CTRLK}08({CTRLK}14{lastEp?.season}{CTRLK}08x{CTRLK}14{lastEp?.number}{CTRLK}08){CTRLK}14 - {lastEp?.name}"; Write(line2); DateTime airing = Convert.ToDateTime(nextEp?.airstamp); TimeSpan span = airing.Subtract(DateTime.UtcNow); if (nextEp != null && nextEp.HasAirDate) { string line3 = $"{CTRLK}14{CTRLB}Next Episode {CTRLB}{CTRLK}15-- {nextEp.airdate} {CTRLK}08({CTRLK}14{nextEp.season}{CTRLK}08x{CTRLK}14{nextEp.number}{CTRLK}08){CTRLK}14 - {nextEp.name} - Airing in: {CTRLK}08{span.Days}{CTRLK}14 days {CTRLK}08{span.Hours}{CTRLK}14 hours {CTRLK}08{span.Minutes}{CTRLK}14 minutes {CTRLK}08{span.Seconds}{CTRLK}14 seconds"; Write(line3); } } else { Write(result.Message); } }
protected async Task <ApiWrapperImageCollection <TvMazeImageCollection> > GetEpisodeFanArtAsync(EpisodeInfo episode) { if (episode == null || episode.SeriesTvMazeId < 1 || !episode.SeasonNumber.HasValue || episode.EpisodeNumbers.Count == 0) { return(null); } TvMazeEpisode episodeDetail = await _tvMazeHandler.GetSeriesEpisodeAsync(episode.SeriesTvMazeId, episode.SeasonNumber.Value, episode.FirstEpisodeNumber, false).ConfigureAwait(false); if (episodeDetail == null) { return(null); } ApiWrapperImageCollection <TvMazeImageCollection> images = new ApiWrapperImageCollection <TvMazeImageCollection>(); images.Id = episode.SeriesTvMazeId.ToString(); images.Thumbnails.Add(episodeDetail.Images); return(images); }
/// <summary> /// Adds next and previous episode information into the given show /// </summary> /// <param name="show"></param> private void AddEpisodeInfo(TvMazeShow show) { try { if (show?._links != null) { if (!string.IsNullOrWhiteSpace(show._links.previousepisode?.href)) { try { string prevousEpisode = GetResponseFromUrl(show?._links?.previousepisode?.href); TvMazeEpisode previousEpisode = JsonConvert.DeserializeObject <TvMazeEpisode>(prevousEpisode); show.PrevEpisode = previousEpisode; } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } } if (!string.IsNullOrWhiteSpace(show._links.nextepisode?.href)) { try { string nextEpisodeResponse = GetResponseFromUrl(show?._links?.nextepisode?.href); TvMazeEpisode nextEpisode = JsonConvert.DeserializeObject <TvMazeEpisode>(nextEpisodeResponse); show.NextEpisode = nextEpisode; } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } } } } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } }
public UpdateEpisodesServiceTests() { _subscription1 = CreateSubscription(1, 555, "The Stuff", DateTime.Now.AddDays(-2).Date); _subscription2 = CreateSubscription(2, 666, "The Stuff 2", DateTime.Now.AddDays(-3).Date); _regularEpisode1 = CreateRegularEpisode(2, 3, "Stuff happened", DateTime.Now.AddDays(2).Date); _regularEpisode2 = CreateRegularEpisode(2, 4, "Stuff didn't happen", DateTime.Now.AddDays(-1).Date); _regularEpisode3 = CreateRegularEpisode(1, 1, "Stuff 2 stuff", DateTime.Now.AddDays(-1).Date); _regularEpisode4 = CreateRegularEpisode(1, 2, "No stuff", DateTime.Now.AddDays(-3).Date); _regularEpisode5 = CreateRegularEpisode(1, 3, "Oh dear", DateTime.Now.AddDays(-4).Date); _specialEpisode1 = CreateSpecialEpisode(2, "Special stuff", DateTime.Now.AddDays(1).Date); _specialEpisode2 = CreateSpecialEpisode(1, "Stuff 2 Special", DateTime.Now.AddDays(-2).Date); _specialEpisode3 = CreateSpecialEpisode(1, "Stuff 2 Special 2", DateTime.Now.AddDays(-4).Date); _episodeCommandDataSource = Substitute.For <IEpisodeCommandDataSource>(); _tvMazeService = Substitute.For <ITvMazeService>(); _service = new UpdateEpisodesService(_episodeCommandDataSource, _tvMazeService); }
public override async Task <bool> UpdateFromOnlineSeriesEpisodeAsync(EpisodeInfo episode, string language, bool cacheOnly) { try { List <EpisodeInfo> episodeDetails = new List <EpisodeInfo>(); TvMazeEpisode episodeDetail = null; TvMazeSeries seriesDetail = null; if (episode.SeasonNumber.HasValue && episode.EpisodeNumbers.Count > 0) { if (episode.SeriesTvMazeId > 0) { seriesDetail = await _tvMazeHandler.GetSeriesAsync(episode.SeriesTvMazeId, cacheOnly).ConfigureAwait(false); } if (seriesDetail == null && !string.IsNullOrEmpty(episode.SeriesImdbId)) { seriesDetail = await _tvMazeHandler.GetSeriesByImDbAsync(episode.SeriesImdbId, cacheOnly).ConfigureAwait(false); } if (seriesDetail == null && episode.SeriesTvdbId > 0) { seriesDetail = await _tvMazeHandler.GetSeriesByTvDbAsync(episode.SeriesTvdbId, cacheOnly).ConfigureAwait(false); } if (seriesDetail == null) { return(false); } foreach (int episodeNumber in episode.EpisodeNumbers) { episodeDetail = await _tvMazeHandler.GetSeriesEpisodeAsync(episode.SeriesTvMazeId, episode.SeasonNumber.Value, episodeNumber, cacheOnly).ConfigureAwait(false); if (episodeDetail == null) { continue; } if (episodeDetail.EpisodeNumber <= 0) { continue; } EpisodeInfo info = new EpisodeInfo() { TvMazeId = episodeDetail.Id, SeriesTvMazeId = seriesDetail.Id, SeriesImdbId = seriesDetail.Externals.ImDbId, SeriesTvdbId = seriesDetail.Externals.TvDbId ?? 0, SeriesTvRageId = seriesDetail.Externals.TvRageId ?? 0, SeriesName = new SimpleTitle(seriesDetail.Name, true), SeriesFirstAired = seriesDetail.Premiered, SeasonNumber = episodeDetail.SeasonNumber, EpisodeNumbers = new List <int>(new int[] { episodeDetail.EpisodeNumber }), FirstAired = episodeDetail.AirDate, EpisodeName = new SimpleTitle(episodeDetail.Name, true), Summary = new SimpleTitle(episodeDetail.Summary, true), Genres = seriesDetail.Genres.Where(s => !string.IsNullOrEmpty(s?.Trim())).Select(s => new GenreInfo { Name = s.Trim() }).ToList(), DataProviders = new List <string>() { _name } }; if (seriesDetail.Embedded != null && seriesDetail.Embedded.Cast != null) { info.Actors = ConvertToPersons(seriesDetail.Embedded.Cast, PersonAspect.OCCUPATION_ACTOR, seriesDetail.Name); info.Characters = ConvertToCharacters(seriesDetail.Embedded.Cast, seriesDetail.Name); } episodeDetails.Add(info); } } if (!episode.DataProviders.Contains(_name)) { episode.DataProviders.Add(_name); } if (episodeDetails.Count > 1) { SetMultiEpisodeDetails(episode, episodeDetails); return(true); } else if (episodeDetails.Count > 0) { SetEpisodeDetails(episode, episodeDetails[0]); return(true); } return(false); } catch (Exception ex) { ServiceRegistration.Get <ILogger>().Debug("TvMazeWrapper: Exception while processing episode {0}", ex, episode.ToString()); return(false); } }
public override async Task <bool> UpdateFromOnlineSeriesAsync(SeriesInfo series, string language, bool cacheOnly) { try { TvMazeSeries seriesDetail = null; if (series.TvMazeId > 0) { seriesDetail = await _tvMazeHandler.GetSeriesAsync(series.TvMazeId, cacheOnly).ConfigureAwait(false); } if (seriesDetail == null && !string.IsNullOrEmpty(series.ImdbId)) { seriesDetail = await _tvMazeHandler.GetSeriesByImDbAsync(series.ImdbId, cacheOnly).ConfigureAwait(false); } if (seriesDetail == null && series.TvdbId > 0) { seriesDetail = await _tvMazeHandler.GetSeriesByTvDbAsync(series.TvdbId, cacheOnly).ConfigureAwait(false); } if (seriesDetail == null) { return(false); } series.TvMazeId = seriesDetail.Id; series.TvdbId = seriesDetail.Externals.TvDbId ?? 0; series.TvRageId = seriesDetail.Externals.TvRageId ?? 0; series.ImdbId = seriesDetail.Externals.ImDbId; series.SeriesName = new SimpleTitle(seriesDetail.Name, true); series.FirstAired = seriesDetail.Premiered; series.Description = new SimpleTitle(seriesDetail.Summary, true); series.Rating = new SimpleRating(seriesDetail.Rating != null && seriesDetail.Rating.Rating.HasValue ? seriesDetail.Rating.Rating.Value : 0); series.Genres = seriesDetail.Genres.Where(s => !string.IsNullOrEmpty(s?.Trim())).Select(s => new GenreInfo { Name = s.Trim() }).ToList(); series.Networks = ConvertToCompanies(seriesDetail.Network ?? seriesDetail.WebNetwork, CompanyAspect.COMPANY_TV_NETWORK); if (seriesDetail.Status.IndexOf("Ended", StringComparison.InvariantCultureIgnoreCase) >= 0) { series.IsEnded = true; } if (seriesDetail.Embedded != null) { if (seriesDetail.Embedded.Cast != null) { series.Actors = ConvertToPersons(seriesDetail.Embedded.Cast, PersonAspect.OCCUPATION_ACTOR, seriesDetail.Name); series.Characters = ConvertToCharacters(seriesDetail.Embedded.Cast, seriesDetail.Name); } if (seriesDetail.Embedded.Episodes != null) { foreach (TvMazeEpisode episodeDetail in seriesDetail.Embedded.Episodes) { SeasonInfo seasonInfo = new SeasonInfo() { SeriesTvMazeId = seriesDetail.Id, SeriesImdbId = seriesDetail.Externals.ImDbId, SeriesTvdbId = seriesDetail.Externals.TvDbId ?? 0, SeriesTvRageId = seriesDetail.Externals.TvRageId ?? 0, SeriesName = new SimpleTitle(seriesDetail.Name, true), SeasonNumber = episodeDetail.SeasonNumber, FirstAired = episodeDetail.AirDate, TotalEpisodes = seriesDetail.Embedded.Episodes.FindAll(e => e.SeasonNumber == episodeDetail.SeasonNumber).Count, DataProviders = new List <string>() { _name } }; if (!series.Seasons.Contains(seasonInfo)) { series.Seasons.Add(seasonInfo); } EpisodeInfo info = new EpisodeInfo() { TvMazeId = episodeDetail.Id, SeriesTvMazeId = seriesDetail.Id, SeriesImdbId = seriesDetail.Externals.ImDbId, SeriesTvdbId = seriesDetail.Externals.TvDbId ?? 0, SeriesTvRageId = seriesDetail.Externals.TvRageId ?? 0, SeriesName = new SimpleTitle(seriesDetail.Name, true), SeriesFirstAired = seriesDetail.Premiered, SeasonNumber = episodeDetail.SeasonNumber, EpisodeNumbers = new List <int>(new int[] { episodeDetail.EpisodeNumber }), FirstAired = episodeDetail.AirDate, EpisodeName = new SimpleTitle(episodeDetail.Name, true), Summary = new SimpleTitle(episodeDetail.Summary, true), Genres = seriesDetail.Genres.Where(s => !string.IsNullOrEmpty(s?.Trim())).Select(s => new GenreInfo { Name = s.Trim() }).ToList(), DataProviders = new List <string>() { _name } }; info.Actors = series.Actors.ToList(); info.Characters = series.Characters.ToList(); series.Episodes.Add(info); } series.TotalSeasons = series.Seasons.Count; series.TotalEpisodes = series.Episodes.Count; TvMazeEpisode nextEpisode = seriesDetail.Embedded.Episodes.Where(e => e.AirDate > DateTime.Now).FirstOrDefault(); if (nextEpisode != null) { series.NextEpisodeName = new SimpleTitle(nextEpisode.Name, true); series.NextEpisodeAirDate = nextEpisode.AirStamp; series.NextEpisodeSeasonNumber = nextEpisode.SeasonNumber; series.NextEpisodeNumber = nextEpisode.EpisodeNumber; } if (!series.DataProviders.Contains(_name)) { series.DataProviders.Add(_name); } } } return(true); } catch (Exception ex) { ServiceRegistration.Get <ILogger>().Debug("TvMazeWrapper: Exception while processing series {0}", ex, series.ToString()); return(false); } }
public override bool GetFanArt <T>(T infoObject, string language, string fanartMediaType, out ApiWrapperImageCollection <TvMazeImageCollection> images) { images = new ApiWrapperImageCollection <TvMazeImageCollection>(); try { if (fanartMediaType == FanArtMediaTypes.Series) { EpisodeInfo episode = infoObject as EpisodeInfo; SeasonInfo season = infoObject as SeasonInfo; SeriesInfo series = infoObject as SeriesInfo; if (series == null && season != null) { series = season.CloneBasicInstance <SeriesInfo>(); } if (series == null && episode != null) { series = episode.CloneBasicInstance <SeriesInfo>(); } if (series != null && series.TvMazeId > 0) { // Download all image information, filter later! TvMazeSeries seriesDetail = _tvMazeHandler.GetSeries(series.TvMazeId, false); if (seriesDetail != null) { images.Id = series.TvMazeId.ToString(); images.Posters.Add(seriesDetail.Images); return(true); } } } else if (fanartMediaType == FanArtMediaTypes.Episode) { EpisodeInfo episode = infoObject as EpisodeInfo; if (episode != null && episode.SeriesTvMazeId > 0 && episode.SeasonNumber.HasValue && episode.EpisodeNumbers.Count > 0) { // Download all image information, filter later! TvMazeEpisode episodeDetail = _tvMazeHandler.GetSeriesEpisode(episode.SeriesTvMazeId, episode.SeasonNumber.Value, episode.FirstEpisodeNumber, false); if (episodeDetail != null) { images.Id = episode.SeriesTvMazeId.ToString(); images.Thumbnails.Add(episodeDetail.Images); return(true); } } } else if (fanartMediaType == FanArtMediaTypes.Actor) { PersonInfo person = infoObject as PersonInfo; if (person != null && person.TvMazeId > 0) { // Download all image information, filter later! TvMazePerson personDetail = _tvMazeHandler.GetPerson(person.TvMazeId, false); if (personDetail != null) { images.Id = person.TvMazeId.ToString(); images.Thumbnails.Add(personDetail.Images); return(true); } } } else if (fanartMediaType == FanArtMediaTypes.Character) { CharacterInfo character = infoObject as CharacterInfo; if (character != null && character.TvMazeId > 0) { // Download all image information, filter later! TvMazePerson personDetail = _tvMazeHandler.GetCharacter(character.TvMazeId, false); if (personDetail != null) { images.Id = character.TvMazeId.ToString(); images.Thumbnails.Add(personDetail.Images); return(true); } } } else { return(true); } } catch (Exception ex) { ServiceRegistration.Get <ILogger>().Debug(GetType().Name + ": Exception downloading images", ex); } return(false); }