Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        /// <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);
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
        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);
        }