Ejemplo n.º 1
0
        private SeriesTag CopySeriesInfos(SeriesTag seriesTag, TvdbSeries series, int seasonIndex, int episodeIndex)
        {
            seriesTag.SeriesName = series.SeriesName;
            seriesTag.IMDB_ID    = series.ImdbId;
            seriesTag.TVDB_ID    = series.Id.ToString();
            // Do not overwrite the index
            //seriesTag.SeasonIndex
            //seriesTag.EpisodeIndexList

            seriesTag.Network          = series.Network;
            seriesTag.Certification    = series.ContentRating;
            seriesTag.SeriesFirstAired = series.FirstAired.ToString("yyyy-MM-dd");
            seriesTag.SeriesOverview   = series.Overview;
            seriesTag.SeriesGenreList  = series.Genre.AsReadOnly();
            seriesTag.SeriesActors     = series.Actors.AsReadOnly();

            TvdbEpisode ep =
                series.Episodes.FirstOrDefault(e => e.SeasonNumber == seasonIndex && e.EpisodeNumber == episodeIndex);

            if (ep == null)
            {
                return(seriesTag);
            }

            seriesTag.EpisodeFirstAired = ep.FirstAired.ToString("yyyy-MM-dd");
            seriesTag.EpisodeTitle      = ep.EpisodeName;
            seriesTag.EpisodeIMDB_ID    = ep.ImdbId;
            seriesTag.EpisodeOverview   = ep.Overview;
            seriesTag.GuestStars        = ep.GuestStars.AsReadOnly();
            seriesTag.Directors         = ep.Directors.AsReadOnly();
            seriesTag.Writers           = ep.Writer.AsReadOnly();

            return(seriesTag);
        }
Ejemplo n.º 2
0
        public string GetNewFilePath(TvdbShow show, TvdbEpisode startEpisode, TvdbEpisode endEpisode, string ext, bool useDvdOrder)
        {
            var seasonNumber       = useDvdOrder ? startEpisode.DvdSeason ?? startEpisode.AiredSeason : startEpisode.AiredSeason;
            var startEpisodeNumber = useDvdOrder ? startEpisode.DvdEpisodeNumber ?? startEpisode.AiredEpisodeNumber : startEpisode.AiredEpisodeNumber;

            var newFileName = $"{show.SeriesName} - s{seasonNumber.PadLeft(2, '0')}e{startEpisodeNumber.PadLeft(2, '0')}";

            if (endEpisode != null)
            {
                var endEpisodeNumber = useDvdOrder ? endEpisode.DvdEpisodeNumber ?? endEpisode.AiredEpisodeNumber : endEpisode.AiredEpisodeNumber;

                newFileName += $"-e{endEpisodeNumber.PadLeft(2, '0')}";
            }

            newFileName += $" - {startEpisode.EpisodeName}";

            if (endEpisode != null)
            {
                newFileName += $" - {endEpisode.EpisodeName}";
            }

            newFileName = $"{newFileName}{ext}".CleanFileName();

            var showFolder   = show.SeriesName.CleanPath();
            var seasonFolder = $"Season {seasonNumber}";

            return(Path.Combine(showFolder, seasonFolder, newFileName));
        }
Ejemplo n.º 3
0
        private void FillEpisodeDetail(TvdbEpisode _episode)
        {
            lbEpisodeInformation.Text = _episode.EpisodeName + "(" + _episode.EpisodeNumber + ")";
            txtEpisodeLanguage.Text   = _episode.Language != null?_episode.Language.ToString() : "";

            txtEpisodeFirstAired.Text = _episode.FirstAired.ToShortDateString();

            lbGuestStars.Items.Clear();
            foreach (String s in _episode.GuestStars)
            {
                lbGuestStars.Items.Add(s.Trim());
            }

            lbDirectors.Items.Clear();
            foreach (String s in _episode.Directors)
            {
                lbDirectors.Items.Add(s.Trim());
            }

            lbWriters.Items.Clear();
            foreach (String s in _episode.Writer)
            {
                lbWriters.Items.Add(s.Trim());
            }

            txtEpisodeProductionCode.Text = _episode.ProductionCode;
            txtEpisodeOverview.Text       = _episode.Overview;
            txtEpisodeDVDId.Text          = _episode.DvdDiscId != -99 ? _episode.DvdDiscId.ToString() : "";
            txtEpisodeDVDSeason.Text      = _episode.DvdSeason != -99 ? _episode.DvdSeason.ToString() : "";
            txtEpisodeDVDNumber.Text      = _episode.DvdEpisodeNumber != -99 ? _episode.DvdEpisodeNumber.ToString() : "";
            txtEpisodeDVDChapter.Text     = _episode.DvdChapter != -99 ? _episode.DvdChapter.ToString() : "";
            txtEpisodeAbsoluteNumber.Text = _episode.AbsoluteNumber != -99 ? _episode.AbsoluteNumber.ToString() : "";
            txtImdbId.Text = _episode.ImdbId;
        }
Ejemplo n.º 4
0
        protected bool TryMatchEpisode(SeriesInfo seriesInfo, TvdbSeries seriesDetail)
        {
            // We deal with two scenarios here:
            //  - Having a real episode title, but the Season/Episode numbers might be wrong (seldom case)
            //  - Having only Season/Episode numbers and we need to fill Episode title (more common)
            TvdbEpisode episode = seriesDetail.Episodes.Find(e => e.EpisodeName == seriesInfo.Episode);

            if (episode != null)
            {
                seriesInfo.SeasonNumber = episode.SeasonNumber;
                seriesInfo.EpisodeNumbers.Clear();
                seriesInfo.EpisodeNumbers.Add(episode.EpisodeNumber);
                SetEpisodeDetails(seriesInfo, episode);
                return(true);
            }

            episode = seriesDetail.Episodes.Find(e => e.EpisodeNumber == seriesInfo.EpisodeNumbers.FirstOrDefault() && e.SeasonNumber == seriesInfo.SeasonNumber);
            if (episode != null)
            {
                seriesInfo.Episode = episode.EpisodeName;
                SetEpisodeDetails(seriesInfo, episode);
                return(true);
            }
            return(false);
        }
        protected bool Matched(GuideEnricherProgram guideProgram, TvdbEpisode episode)
        {
            if (guideProgram == null)
            {
                throw new ArgumentNullException("guideProgram");
            }
            if (episode == null)
            {
                throw new ArgumentNullException("episode");
            }
            //
            this.SuccessfulMatches++;
            guideProgram.EpisodeNumber        = episode.EpisodeNumber;
            guideProgram.SeriesNumber         = episode.SeasonNumber;
            guideProgram.EpisodeNumberDisplay = Enricher.FormatSeasonAndEpisode(episode.SeasonNumber, episode.EpisodeNumber);

            if (bool.Parse(Config.Instance.GetProperty("updateSubtitles")))
            {
                guideProgram.SubTitle = episode.EpisodeName;
            }

            if (bool.Parse(Config.Instance.GetProperty("episodeInDescription")))
            {
                var descriptionWithNoEpisodeNumber = Regex.Replace(guideProgram.Description, "^S[0-9][0-9]E[0-9][0-9] - ", string.Empty);
                guideProgram.Description = string.Format("{0} - {1}", guideProgram.EpisodeNumberDisplay, descriptionWithNoEpisodeNumber);
            }

            this.log.DebugFormat("[{0}] Correctly matched {1} - {2} as {3}", this.MethodName, guideProgram.Title, guideProgram.SubTitle, guideProgram.EpisodeNumberDisplay);
            return(true);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Gets the TVDB representation of this episode.
        /// </summary>
        /// <returns>The TVDB equivilent of this episode.</returns>
        public TvdbEpisode GetTvdbEpisode()
        {
            // Avoid looking up unknown titles
            if (!string.IsNullOrWhiteSpace(TitleVar) || Name == UnknownString || Episode.Count == 0)
            {
                return(null);
            }
            // Return previous lookup if already done
            if (TvdbEpisode != null)
            {
                return(TvdbEpisode);
            }
            // Init API if not done already
            if (TvdbApiManager == null)
            {
                TvdbApiManager = new Tvdb.Tvdb(TvdbApiKey, TvdbCacheType.PersistentMemory,
                                               Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "TitleCleaner"));
            }
            // Search for series
            var seriesList = TvdbApiManager.Search(Name);

            // No selection required, just assume (unless confirmation is always required)
            if (seriesList.Length == 1 && !TvdbLookupConfirm)
            {
                // Get episode
                var seriesId = seriesList[0].TvdbId;
                TvdbEpisode = TvdbApiManager.LookupEpisode(seriesId, Season, Episode[0]);
                // Return episode
                return(TvdbEpisode);
            }
            if (seriesList.Length <= 1 && (!TvdbLookupConfirm || seriesList.Length <= 0))
            {
                return(null);
            }
            // Selection required...
            if (TvdbSearchSelectionCache == null)
            {
                TvdbSearchSelectionCache = new Dictionary <string, uint>();
            }
            var searchCacheName = Name.ToLower();

            Debug.Assert(TvdbSearchSelectionRequired != null, "TvdbSearchSelectionRequired != null");
            var id = TvdbSearchSelectionCache.ContainsKey(searchCacheName) ? TvdbSearchSelectionCache[searchCacheName] : TvdbSearchSelectionRequired.Invoke(seriesList, Name);

            // Add search selection to cache
            if (!TvdbSearchSelectionCache.ContainsKey(searchCacheName))
            {
                TvdbSearchSelectionCache.Add(searchCacheName, id);
            }
            // 0 is a sentinal "none of them" value
            if (id == 0)
            {
                return(null);
            }
            // Get episode
            TvdbEpisode = TvdbApiManager.LookupEpisode(id, Season, Episode[0]);
            // Return episode
            return(TvdbEpisode);
        }
Ejemplo n.º 7
0
 private static void SetEpisodeDetails(SeriesInfo seriesInfo, TvdbEpisode episode)
 {
     seriesInfo.Summary = episode.Overview;
     if (episode.Directors.Count > 0)
     {
         CollectionUtils.AddAll(seriesInfo.Directors, episode.Directors);
     }
     if (episode.GuestStars.Count > 0)
     {
         CollectionUtils.AddAll(seriesInfo.Actors, episode.GuestStars);
     }
 }
Ejemplo n.º 8
0
        public string getTitle(int seriesID, int season, int episode)
        {
            string newTitle = "";

            try
            {
                if (season > 100)
                {
                    TvdbEpisode e = m_tvdbHandler.GetEpisode(seriesID, new DateTime(episode, season / 100, season % 100), TvdbLanguage.DefaultLanguage);
                    newTitle = e.EpisodeName;
                }
                else
                {
                    int seasonScale  = season;
                    int episodeScale = episode;
                    using (var client = new WebClient())
                    {
                        var json = client.DownloadString(String.Format("http://thexem.de/map/all?id={0}&origin=tvdb", seriesID));

                        RootObject m = JsonConvert.DeserializeObject <RootObject>(json);

                        foreach (Datum showData in m.data)
                        {
                            if (showData.scene.episode == episode && showData.scene.season == season)
                            {
                                seasonScale  = showData.tvdb.season;
                                episodeScale = showData.tvdb.episode;
                                break;
                            }
                        }
                    }
                    //if (seasonScale == 0 && episodeScale == 0)
                    //	return "";

                    TvdbSeries s = m_tvdbHandler.GetSeries(seriesID, TvdbLanguage.DefaultLanguage, true, false, false);
                    foreach (TvdbEpisode esp in s.Episodes)
                    {
                        if (seasonScale == esp.SeasonNumber && episodeScale == esp.EpisodeNumber)
                        {
                            newTitle = esp.EpisodeName;
                            break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message.ToString());
            }

            newTitle = newTitle.Replace(":", "").Replace("?", "").Replace("/", "").Replace("<", "").Replace(">", "").Replace("\\", "").Replace("*", "").Replace("|", "").Replace("\"", "");
            return(newTitle);
        }
Ejemplo n.º 9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="_episodeId"></param>
        /// <param name="_language"></param>
        /// <returns></returns>
        public TvdbEpisode GetEpisode(int _episodeId, TvdbLanguage _language)
        {
            TvdbEpisode episode = GetEpisodeFromCache(_episodeId, _language);

            if (episode != null)
            {
                return(episode);
            }
            else
            {
                episode = m_downloader.DownloadEpisode(_episodeId, _language);
                AddEpisodeToCache(episode);
                return(episode);
            }
        }
Ejemplo n.º 10
0
        public string getTitle(int seriesID, int season, int episode)
        {
            string newTitle = null;

            //TvdbEpisode e;
            try
            {
                //if (season > 100) return"";
                if (season > 100)
                {
                    TvdbEpisode e = m_tvdbHandler.GetEpisode(seriesID, new DateTime(episode, season / 100, season % 100), TvdbLanguage.DefaultLanguage);
                    newTitle = e.EpisodeName;
                }
                else
                {
                    TvdbSeries s = m_tvdbHandler.GetSeries(seriesID, TvdbLanguage.DefaultLanguage, true, false, false);
                    foreach (TvdbEpisode esp in s.Episodes)
                    {
                        if (season == esp.SeasonNumber && episode == esp.EpisodeNumber)
                        {
                            newTitle = esp.EpisodeName;
                            break;
                        }
                    }
                }
                //TvdbSeries s = m_tvdbHandler.GetSeries(seriesID, TvdbLanguage.DefaultLanguage, true, false, false);
                ////List<string> epList = new List<string>();

                //foreach (TvdbEpisode esp in s.Episodes)
                //{
                //	if (season == esp.SeasonNumber && episode == esp.EpisodeNumber)
                //	{
                //		newTitle = esp.EpisodeName;
                //		break;
                //	}
                //}
                //newTitle = e.EpisodeName;
            }
            catch (Exception) { }

            if (newTitle == null)
            {
                return("");
            }
            newTitle = newTitle.Replace(":", "").Replace("?", "").Replace("/", "").Replace("<", "").Replace(">", "").Replace("\\", "").Replace("*", "").Replace("|", "").Replace("\"", "");
            return(newTitle);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Update the series with the episode (Add it to the series if it doesn't already exist or update the episode if the current episode is older than the updated one)
        /// </summary>
        /// <param name="s"></param>
        /// <param name="ue"></param>
        private void UpdateEpisode(TvdbSeries s, TvdbEpisode ue)
        {
            List <TvdbEpisode> allEpList = new List <TvdbEpisode>();

            allEpList.AddRange(s.Episodes);
            foreach (TvdbLanguage l in s.GetAvailableLanguages())
            {
                if (s.SeriesTranslations[l].Episodes != null && s.SeriesTranslations[l].Language != s.Language)
                {
                    allEpList.AddRange(s.SeriesTranslations[l].Episodes);
                }
            }

            //check all episodes if the updated episode is in it
            foreach (TvdbEpisode e in allEpList)
            {
                if (e.Id == ue.Id)
                {
                    if (e.LastUpdated < ue.LastUpdated)
                    {
                        //download episode which has been updated
                        TvdbEpisode newEpisode = m_downloader.DownloadEpisode(e.Id, e.Language);

                        //update information of episode with new episodes informations
                        if (newEpisode != null)
                        {
                            newEpisode.LastUpdated = ue.LastUpdated;

                            e.UpdateEpisodeInfo(newEpisode);
                            Log.Info("Updated Episode " + e.Id + " for series " + e.SeriesId);
                        }
                    }
                    return;
                }
            }

            //episode hasn't been found
            foreach (TvdbLanguage l in s.GetAvailableLanguages())
            {
                //hasn't been found -> add it
                TvdbEpisode ep = m_downloader.DownloadEpisode(ue.Id, l);
                AddEpisodeToCache(ep);
                Log.Info("Added Episode " + ep.Id + " for series " + ep.SeriesId);
            }
        }
Ejemplo n.º 12
0
        private void cmdGetEpisodes_Click(object sender, EventArgs e)
        {
            int         sId     = Int32.Parse(txtSeriesId2.Text);
            int         season  = Int32.Parse(txtSeason.Text);
            int         episode = Int32.Parse(txtEpisode.Text);
            TvdbEpisode ep      = m_tvdbHandler.GetEpisode(sId, season, episode,
                                                           (TvdbEpisode.EpisodeOrdering)cbOrdering.SelectedItem,
                                                           TvdbLanguage.DefaultLanguage);

            lvSeries.Items.Clear();
            lvSeries.Items.Add(CreateItem("Series Id", ep.SeriesId.ToString()));
            lvSeries.Items.Add(CreateItem("Episode Id", ep.Id.ToString()));
            lvSeries.Items.Add(CreateItem("Name", ep.EpisodeName));
            lvSeries.Items.Add(CreateItem("Gueststars", ep.GuestStarsString));
            lvSeries.Items.Add(CreateItem("Directors", ep.DirectorsString));
            lvSeries.Items.Add(CreateItem("Writer", ep.WriterString));
            lvSeries.Items.Add(CreateItem("Overview", ep.Overview));
            lvSeries.Items.Add(CreateItem("Imdb Id", ep.ImdbId));
        }
Ejemplo n.º 13
0
 private static void SetEpisodeDetails(SeriesInfo seriesInfo, TvdbEpisode episode)
 {
     seriesInfo.TotalRating = episode.Rating;
     seriesInfo.Summary     = episode.Overview;
     // Don't clear seriesInfo.Actors again. It's already been filled with actors from series details.
     if (episode.GuestStars.Count > 0)
     {
         CollectionUtils.AddAll(seriesInfo.Actors, episode.GuestStars);
     }
     seriesInfo.Directors.Clear();
     if (episode.Directors.Count > 0)
     {
         CollectionUtils.AddAll(seriesInfo.Directors, episode.Directors);
     }
     seriesInfo.Writers.Clear();
     if (episode.Writer.Count > 0)
     {
         CollectionUtils.AddAll(seriesInfo.Writers, episode.Writer);
     }
 }
Ejemplo n.º 14
0
        private void cmdGetEpisodeAired_Click(object sender, EventArgs e)
        {
            TvdbEpisode ep = m_tvdbHandler.GetEpisode(Int32.Parse(txtSeriesEpisodeAiredId.Text), dateTimePickerEpAired.Value, TvdbLanguage.DefaultLanguage);

            if (ep != null)
            {
                lvSeries.Items.Clear();
                lvSeries.Items.Add(CreateItem("Series Id", ep.SeriesId.ToString()));
                lvSeries.Items.Add(CreateItem("Episode Id", ep.Id.ToString()));
                lvSeries.Items.Add(CreateItem("Name", ep.EpisodeName));
                lvSeries.Items.Add(CreateItem("Gueststars", ep.GuestStarsString));
                lvSeries.Items.Add(CreateItem("Directors", ep.DirectorsString));
                lvSeries.Items.Add(CreateItem("Writer", ep.WriterString));
                lvSeries.Items.Add(CreateItem("Overview", ep.Overview));
                lvSeries.Items.Add(CreateItem("Imdb Id", ep.ImdbId));
            }
            else
            {
                MessageBox.Show("Nothing found");
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="_epList"></param>
        private void AddEpisodeToCache(TvdbEpisode e)
        {
            bool seriesFound = false;

            foreach (TvdbSeries s in m_loadedData.SeriesList)
            {
                if (s.Id == e.SeriesId)
                {//series for ep found
                    seriesFound = true;
                    Util.AddEpisodeToSeries(e, s);
                    break;
                }
            }
            if (!seriesFound)
            {//the series doesn't exist yet -> add episode to dummy series
                TvdbSeries newSeries = new TvdbSeries();
                newSeries.LastUpdated = new DateTime(1, 1, 1);
                newSeries.Episodes.Add(e);
                m_loadedData.SeriesList.Add(newSeries);
            }
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Add the episode to the series
        /// </summary>
        /// <param name="episode"></param>
        /// <param name="series"></param>
        internal static void AddEpisodeToSeries(TvdbEpisode episode, TvdbSeries series)
        {
            bool episodeFound = false;

            for (int i = 0; i < series.Episodes.Count; i++)
            {
                if (series.Episodes[i].Id == episode.Id)
                {//we have already stored this episode -> overwrite it
                    series.Episodes[i].UpdateEpisodeInfo(episode);
                    episodeFound = true;
                    break;
                }
            }
            if (!episodeFound)
            {//the episode doesn't exist yet
                series.Episodes.Add(episode);
                if (!series.EpisodesLoaded)
                {
                    series.EpisodesLoaded = true;
                }
            }
        }
Ejemplo n.º 17
0
        /// <summary>
        /// Add this episode to the proper cached series
        /// </summary>
        /// <param name="_episode">Episode to add to cache</param>
        private void AddEpisodeToCache(TvdbEpisode _episode)
        {
            bool seriesFound = false;

            foreach (TvdbSeries s in m_loadedData.SeriesList)
            {
                if (s.Id == _episode.SeriesId)
                {//series for ep found
                    seriesFound = true;
                    Util.AddEpisodeToSeries(_episode, s);
                    break;
                }
            }

            //todo: maybe skip this since downloading an episode is no biggie
            if (!seriesFound)
            {//the series doesn't exist yet -> add episode to dummy series
                TvdbSeries newSeries = new TvdbSeries();
                newSeries.LastUpdated = new DateTime(1, 1, 1);
                newSeries.Episodes.Add(_episode);
                m_loadedData.SeriesList.Add(newSeries);
            }
        }
Ejemplo n.º 18
0
        protected async Task <ApiWrapperImageCollection <TvdbBanner> > GetEpisodeFanArtAsync(EpisodeInfo episode, TvdbLanguage language)
        {
            if (episode == null || (episode.SeriesTvdbId < 1 && string.IsNullOrEmpty(episode.SeriesImdbId)) || !episode.SeasonNumber.HasValue || episode.EpisodeNumbers.Count == 0)
            {
                return(null);
            }
            TvdbSeries seriesDetail = null;

            if (episode.SeriesTvdbId > 0)
            {
                seriesDetail = await _tvdbHandler.GetSeriesAsync(episode.SeriesTvdbId, language, true, false, true).ConfigureAwait(false);
            }
            if (seriesDetail == null && !string.IsNullOrEmpty(episode.SeriesImdbId))
            {
                TvdbSearchResult foundSeries = await _tvdbHandler.GetSeriesByRemoteIdAsync(ExternalId.ImdbId, episode.SeriesImdbId).ConfigureAwait(false);

                if (foundSeries != null)
                {
                    seriesDetail = await _tvdbHandler.GetSeriesAsync(foundSeries.Id, language, true, false, true).ConfigureAwait(false);
                }
            }
            if (seriesDetail == null)
            {
                return(null);
            }
            TvdbEpisode episodeDetail = seriesDetail.Episodes.Find(e => e.SeasonNumber == episode.SeasonNumber.Value && e.EpisodeNumber == episode.FirstEpisodeNumber);

            if (episodeDetail == null)
            {
                return(null);
            }
            ApiWrapperImageCollection <TvdbBanner> images = new ApiWrapperImageCollection <TvdbBanner>();

            images.Id = episode.TvdbId.ToString();
            images.Thumbnails.AddRange(new TvdbBanner[] { episodeDetail.Banner });
            return(images);
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Retrieve the episode with the given parameters
        /// </summary>
        /// <param name="_seriesId">id of the series</param>
        /// <param name="_seasonNr">season number of the episode</param>
        /// <param name="_episodeNr">number of the episode</param>
        /// <param name="_language">language of the episode</param>
        /// <param name="_order">The sorting order that should be user when downloading the episode</param>
        /// <returns>The retrieved episode</returns>
        public TvdbEpisode GetEpisode(int _seriesId, int _seasonNr, int _episodeNr,
                                      TvdbEpisode.EpisodeOrdering _order, TvdbLanguage _language)
        {
            String order = null;

            switch (_order)
            {
            case TvdbEpisode.EpisodeOrdering.AbsoluteOrder:
                order = "absolut";
                break;

            case TvdbEpisode.EpisodeOrdering.DefaultOrder:
                order = "default";
                break;

            case TvdbEpisode.EpisodeOrdering.DvdOrder:
                order = "dvd";
                break;
            }

            TvdbEpisode episode = m_downloader.DownloadEpisode(_seriesId, _seasonNr, _episodeNr, order, _language);

            return(episode);
        }
Ejemplo n.º 20
0
        private void tvEpisodes_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (tvEpisodes.SelectedNode != null && tvEpisodes.SelectedNode.Tag != null)
            {
                int selectedSeason = 0;
                if (tvEpisodes.SelectedNode.Tag.GetType() == typeof(TvdbEpisode))
                {//episode node
                    TvdbEpisode ep = (TvdbEpisode)tvEpisodes.SelectedNode.Tag;
                    FillEpisodeDetail(ep);

                    //load episode image
                    if (ep.Banner != null)
                    {
                        bcEpisodeBanner.BannerImage = ep.Banner;
                    }
                    else
                    {
                        bcEpisodeBanner.ClearControl();
                    }
                    selectedSeason = ep.SeasonNumber;
                }
                else if (tvEpisodes.SelectedNode.Tag.GetType() == typeof(SeasonTag))
                {//season node
                    SeasonTag tag = (SeasonTag)tvEpisodes.SelectedNode.Tag;
                    selectedSeason = tag.SeasonNumber;
                    ClearEpisodeDetail();
                    lbEpisodeInformation.Text = "Season " + tag.SeasonNumber;
                }
                else
                {//shouldn't happen at all
                    return;
                }

                if (bcSeasonBanner.Tag == null || selectedSeason != (int)bcSeasonBanner.Tag)
                {
                    List <TvdbBanner> seasonList     = new List <TvdbBanner>();
                    List <TvdbBanner> seasonWideList = new List <TvdbBanner>();

                    if (m_currentSeries.SeasonBanners != null && m_currentSeries.SeasonBanners.Count > 0)
                    {
                        foreach (TvdbSeasonBanner b in m_currentSeries.SeasonBanners)
                        {
                            if (b.Season == selectedSeason)
                            {
                                if (b.BannerType == TvdbSeasonBanner.Type.season)
                                {
                                    if (b.Language == null || b.Language.Abbriviation.Equals(m_currentLanguage.Abbriviation))
                                    {
                                        seasonList.Add(b);
                                    }
                                }

                                if (b.BannerType == TvdbSeasonBanner.Type.seasonwide)
                                {
                                    if (b.Language == null || b.Language.Abbriviation.Equals(m_currentLanguage.Abbriviation))
                                    {
                                        seasonWideList.Add(b);
                                    }
                                }
                            }
                        }
                    }
                    if (seasonList.Count > 0)
                    {
                        bcSeasonBanner.BannerImages = seasonList;
                    }
                    else
                    {
                        bcSeasonBanner.ClearControl();
                    }
                    bcSeasonBanner.Tag = selectedSeason;

                    if (seasonWideList.Count > 0)
                    {
                        bcSeasonBannerWide.BannerImages = seasonWideList;
                    }
                    else
                    {
                        bcSeasonBannerWide.ClearControl();
                    }

                    bcSeasonBannerWide.Tag = selectedSeason;
                }
            }
        }
Ejemplo n.º 21
0
        /// <summary>
        /// Extract a list of episodes from the given data when the data has the following format:
        /// <![CDATA[
        ///  <?xml version="1.0" encoding="UTF-8" ?>
        ///  <Episode>
        ///      <id>332179</id>
        ///      <DVD_chapter></DVD_chapter>
        ///      <DVD_discid></DVD_discid>
        ///      <DVD_episodenumber></DVD_episodenumber>
        ///      <DVD_season></DVD_season>
        ///      <Director>|Joseph McGinty Nichol|</Director>
        ///      <EpisodeName>Chuck Versus the World</EpisodeName>
        ///      <EpisodeNumber>1</EpisodeNumber>
        ///      <FirstAired>2007-09-24</FirstAired>
        ///      <GuestStars>|Julia Ling|Vik Sahay|Mieko Hillman|</GuestStars>
        ///      <IMDB_ID></IMDB_ID>
        ///      <Language>English</Language>
        ///      <Overview>Chuck Bartowski is an average computer geek...</Overview>
        ///      <ProductionCode></ProductionCode>
        ///      <Rating>9.0</Rating>
        ///      <SeasonNumber>1</SeasonNumber>
        ///      <Writer>|Josh Schwartz|Chris Fedak|</Writer>
        ///      <absolute_number></absolute_number>
        ///      <airsafter_season></airsafter_season>
        ///      <airsbefore_episode></airsbefore_episode>
        ///      <airsbefore_season></airsbefore_season>
        ///      <filename>episodes/80348-332179.jpg</filename>
        ///      <lastupdated>1201292806</lastupdated>
        ///      <seasonid>27985</seasonid>
        ///      <seriesid>80348</seriesid>
        ///  </Episode>
        ///  ]]>
        /// </summary>
        /// <param name="_data"></param>
        /// <returns></returns>
        internal List <TvdbEpisode> ExtractEpisodes(String _data)
        {
            //Stopwatch watch = new Stopwatch();
            //watch.Start();
            XDocument xml         = XDocument.Parse(_data);
            var       allEpisodes = from episode in xml.Descendants("Episode")
                                    select new
            {
                Id = episode.Element("id").Value,
                Combined_episodenumber = episode.Elements("Combined_episodenumber").Count() == 1
                                                 ? episode.Element("Combined_episodenumber").Value : "0",
                Combined_season = episode.Elements("Combined_season").Count() == 1
                                          ? episode.Element("Combined_season").Value : "0",
                DVD_chapter       = episode.Element("DVD_chapter").Value,
                DVD_discid        = episode.Element("DVD_discid").Value,
                DVD_episodenumber = episode.Element("DVD_episodenumber").Value,
                DVD_season        = episode.Elements("DVD_season").Count() == 1
                                       ? episode.Element("DVD_season").Value : episode.Element("DVD_Season").Value,
                Director      = episode.Element("Director").Value,
                EpisodeName   = episode.Element("EpisodeName").Value,
                EpisodeNumber = episode.Element("EpisodeNumber").Value,
                FirstAired    = episode.Element("FirstAired").Value,
                GuestStars    = episode.Element("GuestStars").Value,
                IMDB_ID       = episode.Element("IMDB_ID").Value,
                Language      = episode.Elements("Language").Count() == 1
                                     ? episode.Element("Language").Value : "en",
                Overview         = episode.Element("Overview").Value,
                ProductionCode   = episode.Element("ProductionCode").Value,
                Rating           = episode.Element("Rating").Value,
                SeasonNumber     = episode.Element("SeasonNumber").Value,
                Writer           = episode.Element("Writer").Value,
                absolute_number  = episode.Element("absolute_number").Value,
                filename         = episode.Element("filename").Value,
                lastupdated      = episode.Element("lastupdated").Value,
                seasonid         = episode.Element("seasonid").Value,
                seriesid         = episode.Element("seriesid").Value,
                airsafter_season = episode.Elements("airsafter_season").Count() == 1
                                           ? episode.Element("airsafter_season").Value : Util.NO_VALUE.ToString(),
                airsbefore_episode = episode.Elements("airsbefore_episode").Count() == 1
                                             ? episode.Element("airsbefore_episode").Value : Util.NO_VALUE.ToString(),
                airsbefore_season = episode.Elements("airsbefore_season").Count() == 1
                                            ? episode.Element("airsbefore_season").Value : Util.NO_VALUE.ToString()
            };
            //Log.Debug("Parsed xml file in  " + watch.ElapsedMilliseconds + " milliseconds");
            List <TvdbEpisode> retList = new List <TvdbEpisode>();

            foreach (var e in allEpisodes)
            {
                int id = Util.Int32Parse(e.Id);
                if (id == Util.NO_VALUE)
                {
                    continue;
                }
                TvdbEpisode ep = new TvdbEpisode
                {
                    Id = id,
                    CombinedEpisodeNumber = Util.DoubleParse(e.Combined_episodenumber),
                    CombinedSeason        = Util.DoubleParse(e.Combined_season),
                    DvdChapter            = Util.Int32Parse(e.DVD_chapter),
                    DvdDiscId             = Util.Int32Parse(e.DVD_discid),
                    DvdEpisodeNumber      = Util.DoubleParse(e.DVD_episodenumber),
                    DvdSeason             = Util.Int32Parse(e.DVD_season),
                    Directors             = Util.SplitTvdbString(e.Director, true),
                    EpisodeName           = e.EpisodeName,
                    EpisodeNumber         = Util.Int32Parse(e.EpisodeNumber),
                    AirsAfterSeason       = Util.Int32Parse(e.airsafter_season),
                    AirsBeforeEpisode     = Util.Int32Parse(e.airsbefore_episode),
                    AirsBeforeSeason      = Util.Int32Parse(e.airsbefore_season),
                    GuestStars            = Util.SplitTvdbString(e.GuestStars, true),
                    ImdbId         = e.IMDB_ID,
                    Language       = TvDbUtils.ParseLanguage(e.Language),
                    Overview       = e.Overview,
                    ProductionCode = e.ProductionCode,
                    Rating         = Util.DoubleParse(e.Rating),
                    SeasonNumber   = Util.Int32Parse(e.SeasonNumber),
                    Writer         = Util.SplitTvdbString(e.Writer, true),
                    AbsoluteNumber = Util.Int32Parse(e.absolute_number),
                    BannerPath     = e.filename,
                    LastUpdated    = Util.UnixToDotNet(e.lastupdated),
                    SeasonId       = Util.Int32Parse(e.seasonid),
                    SeriesId       = Util.Int32Parse(e.seriesid),
                    Banner         = new TvdbEpisodeBanner(id, e.filename)
                };
                DateTime firstAired;
                ep.FirstAired = DateTime.TryParse(e.FirstAired, out firstAired) ? firstAired : DateTime.MinValue;
                retList.Add(ep);
            }

            //watch.Stop();
            //Log.Debug("Extracted " + retList.Count + " Episodes in " + watch.ElapsedMilliseconds + " milliseconds");
            return(retList);
        }
Ejemplo n.º 22
0
        /// <summary>
        /// Extract a list of episodes from the given data when the data has the following format:
        /// <![CDATA[
        ///  <?xml version="1.0" encoding="UTF-8" ?>
        ///  <Episode>
        ///      <id>332179</id>
        ///      <DVD_chapter></DVD_chapter>
        ///      <DVD_discid></DVD_discid>
        ///      <DVD_episodenumber></DVD_episodenumber>
        ///      <DVD_season></DVD_season>
        ///      <Director>|Joseph McGinty Nichol|</Director>
        ///      <EpisodeName>Chuck Versus the World</EpisodeName>
        ///      <EpisodeNumber>1</EpisodeNumber>
        ///      <FirstAired>2007-09-24</FirstAired>
        ///      <GuestStars>|Julia Ling|Vik Sahay|Mieko Hillman|</GuestStars>
        ///      <IMDB_ID></IMDB_ID>
        ///      <Language>English</Language>
        ///      <Overview>Chuck Bartowski is an average computer geek...</Overview>
        ///      <ProductionCode></ProductionCode>
        ///      <Rating>9.0</Rating>
        ///      <SeasonNumber>1</SeasonNumber>
        ///      <Writer>|Josh Schwartz|Chris Fedak|</Writer>
        ///      <absolute_number></absolute_number>
        ///      <airsafter_season></airsafter_season>
        ///      <airsbefore_episode></airsbefore_episode>
        ///      <airsbefore_season></airsbefore_season>
        ///      <filename>episodes/80348-332179.jpg</filename>
        ///      <lastupdated>1201292806</lastupdated>
        ///      <seasonid>27985</seasonid>
        ///      <seriesid>80348</seriesid>
        ///  </Episode>
        ///  ]]>
        /// </summary>
        /// <param name="_data"></param>
        /// <returns></returns>
        internal List <TvdbEpisode> ExtractEpisodes(String _data)
        {
            //Stopwatch watch = new Stopwatch();
            //watch.Start();
            XDocument xml         = XDocument.Parse(_data);
            var       allEpisodes = from episode in xml.Descendants("Episode")
                                    select new
            {
                Id = episode.Element("id").Value,
                Combined_episodenumber = episode.Elements("Combined_episodenumber").Count() == 1
                                                 ? episode.Element("Combined_episodenumber").Value : "0",
                Combined_season = episode.Elements("Combined_season").Count() == 1
                                          ? episode.Element("Combined_season").Value : "0",
                DVD_chapter       = episode.Element("DVD_chapter").Value,
                DVD_discid        = episode.Element("DVD_discid").Value,
                DVD_episodenumber = episode.Element("DVD_episodenumber").Value,
                DVD_season        = episode.Elements("DVD_season").Count() == 1
                                       ? episode.Element("DVD_season").Value : episode.Element("DVD_Season").Value,
                Director      = episode.Element("Director").Value,
                EpisodeName   = episode.Element("EpisodeName").Value,
                EpisodeNumber = episode.Element("EpisodeNumber").Value,
                FirstAired    = episode.Element("FirstAired").Value,
                GuestStars    = episode.Element("GuestStars").Value,
                IMDB_ID       = episode.Element("IMDB_ID").Value,
                Language      = episode.Elements("Language").Count() == 1
                                     ? episode.Element("Language").Value : "en",
                Overview         = episode.Element("Overview").Value,
                ProductionCode   = episode.Element("ProductionCode").Value,
                Rating           = episode.Element("Rating").Value,
                SeasonNumber     = episode.Element("SeasonNumber").Value,
                Writer           = episode.Element("Writer").Value,
                absolute_number  = episode.Element("absolute_number").Value,
                filename         = episode.Element("filename").Value,
                lastupdated      = episode.Element("lastupdated").Value,
                seasonid         = episode.Element("seasonid").Value,
                seriesid         = episode.Element("seriesid").Value,
                airsafter_season = episode.Elements("airsafter_season").Count() == 1
                                           ? episode.Element("airsafter_season").Value : "-99",
                airsbefore_episode = episode.Elements("airsbefore_episode").Count() == 1
                                             ? episode.Element("airsbefore_episode").Value : "-99",
                airsbefore_season = episode.Elements("airsbefore_season").Count() == 1
                                            ? episode.Element("airsbefore_season").Value : "-99"
            };
            //Log.Debug("Parsed xml file in  " + watch.ElapsedMilliseconds + " milliseconds");
            List <TvdbEpisode> retList = new List <TvdbEpisode>();

            foreach (var e in allEpisodes)
            {
                TvdbEpisode ep = new TvdbEpisode();
                ep.Id = Util.Int32Parse(e.Id);
                ep.CombinedEpisodeNumber = Util.DoubleParse(e.Combined_episodenumber);
                ep.CombinedSeason        = Util.DoubleParse(e.Combined_season);
                ep.DvdChapter            = Util.Int32Parse(e.DVD_chapter);
                ep.DvdDiscId             = Util.Int32Parse(e.DVD_discid);
                ep.DvdEpisodeNumber      = Util.DoubleParse(e.DVD_episodenumber);
                ep.DvdSeason             = Util.Int32Parse(e.DVD_season);
                ep.Directors             = Util.SplitTvdbString(e.Director);
                ep.EpisodeName           = e.EpisodeName;
                ep.EpisodeNumber         = Util.Int32Parse(e.EpisodeNumber);
                ep.AirsAfterSeason       = Util.Int32Parse(e.airsafter_season);
                ep.AirsBeforeEpisode     = Util.Int32Parse(e.airsbefore_episode);
                ep.AirsBeforeSeason      = Util.Int32Parse(e.airsbefore_season);
                try
                {
                    ep.FirstAired = e.FirstAired.Equals("") ? new DateTime(1, 1, 1) : DateTime.Parse(e.FirstAired);
                }
                catch (Exception)
                {
                    ep.FirstAired = new DateTime();
                }
                ep.GuestStars     = Util.SplitTvdbString(e.GuestStars);
                ep.ImdbId         = e.IMDB_ID;
                ep.Language       = Util.ParseLanguage(e.Language);
                ep.Overview       = e.Overview;
                ep.ProductionCode = e.ProductionCode;
                ep.Rating         = Util.DoubleParse(e.Rating);
                ep.SeasonNumber   = Util.Int32Parse(e.SeasonNumber);
                ep.Writer         = Util.SplitTvdbString(e.Writer);
                ep.AbsoluteNumber = Util.Int32Parse(e.absolute_number);
                ep.BannerPath     = e.filename;
                ep.Banner         = new TvdbEpisodeBanner(ep.Id, ep.BannerPath);
                ep.LastUpdated    = Util.UnixToDotNet(e.lastupdated);
                ep.SeasonId       = Util.Int32Parse(e.seasonid);
                ep.SeriesId       = Util.Int32Parse(e.seriesid);

                if (ep.Id != -99)
                {
                    retList.Add(ep);
                }
            }

            //watch.Stop();
            //Log.Debug("Extracted " + retList.Count + " Episodes in " + watch.ElapsedMilliseconds + " milliseconds");
            return(retList);
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Retrieve the episode with the given parameters
        /// </summary>
        /// <param name="_seriesId">id of the series</param>
        /// <param name="_airDate">When did the episode air</param>
        /// <param name="_language">language of the episode</param>
        /// <exception cref="TvdbInvalidApiKeyException">The given api key is not valid</exception>
        /// <returns>The retrieved episode</returns>
        public TvdbEpisode GetEpisode(int _seriesId, DateTime _airDate, TvdbLanguage _language)
        {
            TvdbEpisode ep = m_downloader.DownloadEpisode(_seriesId, _airDate, _language);

            return(ep);
        }
Ejemplo n.º 24
0
        public override async Task <bool> UpdateFromOnlineSeriesEpisodeAsync(EpisodeInfo episode, TvdbLanguage language, bool cacheOnly)
        {
            try
            {
                language = language ?? PreferredLanguage;

                List <EpisodeInfo> episodeDetails = new List <EpisodeInfo>();
                TvdbSeries         seriesDetail   = null;
                TvdbEpisode        episodeDetail  = null;

                if ((episode.SeriesTvdbId > 0 || !string.IsNullOrEmpty(episode.SeriesImdbId)) && episode.SeasonNumber.HasValue && episode.EpisodeNumbers.Count > 0)
                {
                    if (episode.SeriesTvdbId > 0)
                    {
                        seriesDetail = await _tvdbHandler.GetSeriesAsync(episode.SeriesTvdbId, language, true, true, true).ConfigureAwait(false);
                    }
                    if (seriesDetail == null && !cacheOnly && !string.IsNullOrEmpty(episode.SeriesImdbId))
                    {
                        TvdbSearchResult foundSeries = await _tvdbHandler.GetSeriesByRemoteIdAsync(ExternalId.ImdbId, episode.SeriesImdbId).ConfigureAwait(false);

                        if (foundSeries != null)
                        {
                            seriesDetail = await _tvdbHandler.GetSeriesAsync(foundSeries.Id, language, true, true, true).ConfigureAwait(false);
                        }
                    }
                    if (seriesDetail == null)
                    {
                        return(false);
                    }

                    bool isFirstEpisode = true;
                    foreach (int episodeNumber in episode.EpisodeNumbers)
                    {
                        episodeDetail = seriesDetail.Episodes.Where(e => e.EpisodeNumber == episodeNumber &&
                                                                    e.SeasonNumber == episode.SeasonNumber.Value).OrderByDescending(e => e.Id).FirstOrDefault();
                        if (episodeDetail == null)
                        {
                            continue;
                        }

                        EpisodeInfo info = new EpisodeInfo()
                        {
                            TvdbId = episodeDetail.Id,

                            SeriesTvdbId     = seriesDetail.Id,
                            SeriesImdbId     = seriesDetail.ImdbId,
                            SeriesName       = new SimpleTitle(seriesDetail.SeriesName, false),
                            SeriesFirstAired = seriesDetail.FirstAired,

                            ImdbId         = episodeDetail.ImdbId,
                            SeasonNumber   = episodeDetail.SeasonNumber,
                            EpisodeNumbers = new List <int>(new int[] { episodeDetail.EpisodeNumber }),
                            FirstAired     = episodeDetail.FirstAired,
                            EpisodeName    = new SimpleTitle(episodeDetail.EpisodeName, false),
                            Summary        = new SimpleTitle(episodeDetail.Overview, false),
                            Genres         = seriesDetail.Genre.Where(s => !string.IsNullOrEmpty(s?.Trim())).Select(s => new GenreInfo {
                                Name = s.Trim()
                            }).ToList(),
                            Rating = new SimpleRating(episodeDetail.Rating, episodeDetail.RatingCount),
                        };

                        if (episodeDetail.DvdEpisodeNumber > 0)
                        {
                            info.DvdEpisodeNumbers = new List <double>(new double[] { episodeDetail.DvdEpisodeNumber });
                        }

                        info.Actors = ConvertToPersons(seriesDetail.TvdbActors, PersonAspect.OCCUPATION_ACTOR, episodeDetail.EpisodeName, seriesDetail.SeriesName);
                        //info.Actors.AddRange(ConvertToPersons(episodeDetail.GuestStars, PersonAspect.OCCUPATION_ACTOR, info.Actors.Count));
                        info.Characters = ConvertToCharacters(seriesDetail.TvdbActors, episodeDetail.EpisodeName, seriesDetail.SeriesName);
                        info.Directors  = ConvertToPersons(episodeDetail.Directors, PersonAspect.OCCUPATION_DIRECTOR, 0, episodeDetail.EpisodeName, seriesDetail.SeriesName);
                        info.Writers    = ConvertToPersons(episodeDetail.Writer, PersonAspect.OCCUPATION_WRITER, 0, episodeDetail.EpisodeName, seriesDetail.SeriesName);
                        info.Languages.Add(episodeDetail.Language.Abbriviation);

                        if (isFirstEpisode && !episode.HasThumbnail && episodeDetail.Banner != null)
                        {
                            info.Thumbnail = await episodeDetail.Banner.LoadImageDataAsync().ConfigureAwait(false);
                        }

                        episodeDetails.Add(info);
                        isFirstEpisode = false;
                    }
                }

                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("TvDbWrapper: Exception while processing episode {0}", ex, episode.ToString());
                return(false);
            }
        }
Ejemplo n.º 25
0
        public override async Task <bool> UpdateFromOnlineSeriesAsync(SeriesInfo series, TvdbLanguage language, bool cacheOnly)
        {
            try
            {
                language = language ?? PreferredLanguage;

                TvdbSeries seriesDetail = null;
                if (series.TvdbId > 0)
                {
                    seriesDetail = await _tvdbHandler.GetSeriesAsync(series.TvdbId, language, true, true, false).ConfigureAwait(false);
                }
                if (seriesDetail == null && !cacheOnly && !string.IsNullOrEmpty(series.ImdbId))
                {
                    TvdbSearchResult foundSeries = await _tvdbHandler.GetSeriesByRemoteIdAsync(ExternalId.ImdbId, series.ImdbId).ConfigureAwait(false);

                    if (foundSeries != null)
                    {
                        seriesDetail = await _tvdbHandler.GetSeriesAsync(foundSeries.Id, language, true, true, false).ConfigureAwait(false);
                    }
                }
                if (seriesDetail == null)
                {
                    return(false);
                }

                series.TvdbId = seriesDetail.Id;
                series.ImdbId = seriesDetail.ImdbId;

                series.SeriesName  = new SimpleTitle(seriesDetail.SeriesName, false);
                series.FirstAired  = seriesDetail.FirstAired;
                series.Description = new SimpleTitle(seriesDetail.Overview, false);
                series.Rating      = new SimpleRating(seriesDetail.Rating, seriesDetail.RatingCount);
                series.Genres      = seriesDetail.Genre.Where(s => !string.IsNullOrEmpty(s?.Trim())).Select(s => new GenreInfo {
                    Name = s.Trim()
                }).ToList();
                series.Networks = ConvertToCompanies(seriesDetail.NetworkID, seriesDetail.Network, CompanyAspect.COMPANY_TV_NETWORK);
                if (seriesDetail.Status.IndexOf("Ended", StringComparison.InvariantCultureIgnoreCase) >= 0)
                {
                    series.IsEnded = true;
                }

                CertificationMapping certification = null;
                if (CertificationMapper.TryFindMovieCertification(seriesDetail.ContentRating, out certification))
                {
                    series.Certification = certification.CertificationId;
                }

                series.Actors     = ConvertToPersons(seriesDetail.TvdbActors, PersonAspect.OCCUPATION_ACTOR, null, seriesDetail.SeriesName);
                series.Characters = ConvertToCharacters(seriesDetail.TvdbActors, null, seriesDetail.SeriesName);

                foreach (TvdbActor actor in seriesDetail.TvdbActors)
                {
                    _seriesToActorMap.StoreMappedId(actor.Id.ToString(), seriesDetail.Id.ToString());
                }

                foreach (TvdbEpisode episodeDetail in seriesDetail.Episodes.OrderByDescending(e => e.Id))
                {
                    SeasonInfo seasonInfo = new SeasonInfo()
                    {
                        TvdbId = episodeDetail.SeasonId,

                        SeriesTvdbId = seriesDetail.Id,
                        SeriesImdbId = seriesDetail.ImdbId,
                        SeriesName   = new SimpleTitle(seriesDetail.SeriesName, false),
                        SeasonNumber = episodeDetail.SeasonNumber,
                    };
                    if (!series.Seasons.Contains(seasonInfo))
                    {
                        series.Seasons.Add(seasonInfo);
                    }

                    EpisodeInfo episodeInfo = new EpisodeInfo()
                    {
                        TvdbId = episodeDetail.Id,

                        SeriesTvdbId     = seriesDetail.Id,
                        SeriesImdbId     = seriesDetail.ImdbId,
                        SeriesName       = new SimpleTitle(seriesDetail.SeriesName, false),
                        SeriesFirstAired = seriesDetail.FirstAired,

                        ImdbId         = episodeDetail.ImdbId,
                        SeasonNumber   = episodeDetail.SeasonNumber,
                        EpisodeNumbers = new List <int>(new int[] { episodeDetail.EpisodeNumber }),
                        FirstAired     = episodeDetail.FirstAired,
                        EpisodeName    = new SimpleTitle(episodeDetail.EpisodeName, false),
                        Summary        = new SimpleTitle(episodeDetail.Overview, false),
                        Genres         = seriesDetail.Genre.Where(s => !string.IsNullOrEmpty(s?.Trim())).Select(s => new GenreInfo {
                            Name = s.Trim()
                        }).ToList(),
                        Rating = new SimpleRating(episodeDetail.Rating, episodeDetail.RatingCount),
                    };

                    if (episodeDetail.DvdEpisodeNumber > 0)
                    {
                        episodeInfo.DvdEpisodeNumbers = new List <double>(new double[] { episodeDetail.DvdEpisodeNumber });
                    }

                    episodeInfo.Actors = ConvertToPersons(seriesDetail.TvdbActors, PersonAspect.OCCUPATION_ACTOR, episodeDetail.EpisodeName, seriesDetail.SeriesName);
                    //info.Actors.AddRange(ConvertToPersons(episodeDetail.GuestStars, PersonAspect.OCCUPATION_ACTOR, info.Actors.Count));
                    episodeInfo.Characters = ConvertToCharacters(seriesDetail.TvdbActors, episodeDetail.EpisodeName, seriesDetail.SeriesName);
                    episodeInfo.Directors  = ConvertToPersons(episodeDetail.Directors, PersonAspect.OCCUPATION_DIRECTOR, 0, episodeDetail.EpisodeName, seriesDetail.SeriesName);
                    episodeInfo.Writers    = ConvertToPersons(episodeDetail.Writer, PersonAspect.OCCUPATION_WRITER, 0, episodeDetail.EpisodeName, seriesDetail.SeriesName);
                    episodeInfo.Languages.Add(episodeDetail.Language.Abbriviation);

                    if (!series.Episodes.Contains(episodeInfo))
                    {
                        series.Episodes.Add(episodeInfo);
                    }
                }
                series.Episodes.Sort();
                series.TotalEpisodes = series.Episodes.Count;

                for (int index = 0; index < series.Seasons.Count; index++)
                {
                    series.Seasons[index].FirstAired    = series.Episodes.Find(e => e.SeasonNumber == series.Seasons[index].SeasonNumber).FirstAired;
                    series.Seasons[index].TotalEpisodes = series.Episodes.FindAll(e => e.SeasonNumber == series.Seasons[index].SeasonNumber).Count;
                }
                series.Seasons.Sort();
                series.TotalSeasons = series.Seasons.Count;

                TvdbEpisode nextEpisode = seriesDetail.Episodes.Where(e => e.FirstAired > DateTime.Now).OrderBy(e => e.FirstAired)
                                          .ThenByDescending(p => p.Id).FirstOrDefault();
                if (nextEpisode != null)
                {
                    series.NextEpisodeName         = new SimpleTitle(nextEpisode.EpisodeName, false);
                    series.NextEpisodeAirDate      = nextEpisode.FirstAired;
                    series.NextEpisodeSeasonNumber = nextEpisode.SeasonNumber;
                    series.NextEpisodeNumber       = nextEpisode.EpisodeNumber;
                }

                return(true);
            }
            catch (Exception ex)
            {
                ServiceRegistration.Get <ILogger>().Debug("TvDbWrapper: Exception while processing series {0}", ex, series.ToString());
                return(false);
            }
        }
Ejemplo n.º 26
0
        public override bool GetFanArt <T>(T infoObject, TvdbLanguage language, string fanartMediaType, out ApiWrapperImageCollection <TvdbBanner> images)
        {
            images = new ApiWrapperImageCollection <TvdbBanner>();

            try
            {
                try
                {
                    TvdbSeries seriesDetail = null;
                    language = language ?? PreferredLanguage;

                    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.TvdbId > 0)
                        {
                            seriesDetail = _tvdbHandler.GetSeries(series.TvdbId, language, false, true, true);

                            if (seriesDetail != null)
                            {
                                images.Id = series.TvdbId.ToString();
                                images.Posters.AddRange(seriesDetail.PosterBanners.OrderBy(b => b.Language != language));
                                images.Banners.AddRange(seriesDetail.SeriesBanners.OrderBy(b => b.Language != language));
                                images.Backdrops.AddRange(seriesDetail.FanartBanners.OrderBy(b => b.Language != language));
                                return(true);
                            }
                        }
                    }
                    else if (fanartMediaType == FanArtMediaTypes.SeriesSeason)
                    {
                        EpisodeInfo episode = infoObject as EpisodeInfo;
                        SeasonInfo  season  = infoObject as SeasonInfo;
                        if (season == null && episode != null)
                        {
                            season = episode.CloneBasicInstance <SeasonInfo>();
                        }
                        if (season != null && season.SeriesTvdbId > 0 && season.SeasonNumber.HasValue)
                        {
                            seriesDetail = _tvdbHandler.GetSeries(season.SeriesTvdbId, language, false, false, true);

                            if (seriesDetail != null)
                            {
                                images.Id = season.TvdbId.ToString();

                                var seasonLookup = seriesDetail.SeasonBanners.Where(s => s.Season == season.SeasonNumber).ToLookup(s => string.Format("{0}_{1}", s.Season, s.BannerType), v => v);
                                foreach (IGrouping <string, TvdbSeasonBanner> tvdbSeasonBanners in seasonLookup)
                                {
                                    images.Banners.AddRange(seasonLookup[tvdbSeasonBanners.Key].Where(b => b.BannerPath.Contains("wide")).OrderBy(b => b.Language != language));
                                    images.Posters.AddRange(seasonLookup[tvdbSeasonBanners.Key].Where(b => !b.BannerPath.Contains("wide")).OrderBy(b => b.Language != language));
                                }
                                return(true);
                            }
                        }
                    }
                    else if (fanartMediaType == FanArtMediaTypes.Episode)
                    {
                        EpisodeInfo episode = infoObject as EpisodeInfo;
                        if (episode != null && episode.SeriesTvdbId > 0 && episode.SeasonNumber.HasValue && episode.EpisodeNumbers.Count > 0)
                        {
                            seriesDetail = _tvdbHandler.GetSeries(episode.SeriesTvdbId, language, true, false, true);

                            if (seriesDetail != null)
                            {
                                images.Id = episode.TvdbId.ToString();

                                TvdbEpisode episodeDetail = seriesDetail.Episodes.Find(e => e.SeasonNumber == episode.SeasonNumber.Value && e.EpisodeNumber == episode.FirstEpisodeNumber);
                                if (episodeDetail != null)
                                {
                                    images.Thumbnails.AddRange(new TvdbBanner[] { episodeDetail.Banner });
                                }
                                return(true);
                            }
                        }
                    }
                    else if (fanartMediaType == FanArtMediaTypes.Actor)
                    {
                        PersonInfo person   = infoObject as PersonInfo;
                        string     seriesId = null;
                        _seriesToActorMap.GetMappedId(person.TvdbId.ToString(), out seriesId);
                        int seriesTvdbId = 0;
                        if (int.TryParse(seriesId, out seriesTvdbId))
                        {
                            seriesDetail = _tvdbHandler.GetSeries(seriesTvdbId, language, false, true, true);
                            if (seriesDetail != null)
                            {
                                foreach (TvdbActor actor in seriesDetail.TvdbActors)
                                {
                                    if (actor.Id == person.TvdbId)
                                    {
                                        images.Id = actor.Id.ToString();
                                        images.Thumbnails.AddRange(new TvdbBanner[] { actor.ActorImage });
                                        return(true);
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        return(true);
                    }
                }
                catch (Exception ex)
                {
                    ServiceRegistration.Get <ILogger>().Error("TvDbWrapper: Error getting fan art for scope {0}", ex, fanartMediaType);
                }
            }
            catch (Exception ex)
            {
                ServiceRegistration.Get <ILogger>().Debug(GetType().Name + ": Exception downloading images", ex);
            }
            return(false);
        }