public bool ExtractDetails(IShowDetailsBasic showDetailsBasic, bool strictSeason)
        {
            // Check if cache directory exists.
            if(!CacheDirectory.Exists)
            {
                CacheDirectory.Create();
            }

            // Initalise cache if needed.
            if(!TVDB.IsCacheInitialised)
            {
                TVDB.InitCache();
            }

            // Get details from the TVDB.
            List<TvdbSearchResult> searchResults;
            try
            {
                searchResults = TVDB.SearchSeries(showDetailsBasic.ShowName);
            }
            catch(Exception E)
            {
                Logger.Log("TVDB").StdOut.WriteLine("Unable to resolve {0} at the TVDB. {1}", showDetailsBasic.ShowName, E.Message);
                return false;
            }

            // If no details found then return false.
            if(searchResults.Count == 0)
            {
                Logger.Log("TVDB").StdOut.WriteLine("Unable to resolve {0} at the TVDB.", showDetailsBasic.ShowName);
                return false;
            }

            // Get details.
            var series = TVDB.GetSeries(
                searchResults[0].Id,
                TvdbLanguage.DefaultLanguage,
                true,
                false,
                true
            );

            // Get episode details and banners.
            TvdbEpisode episode  = null;
            TvdbBanner banner = null;
            if(showDetailsBasic.SeasonNumber == null)
            {
                // Get episode details.
                episode = series.GetEpisodesAbsoluteOrder().FindAll(E=>E.IsSpecial==false)[(int)showDetailsBasic.EpisodeNumber - 1];

                // Poster banner.
                var posterBanner = series.PosterBanners.FirstOrDefault();
                if(banner == null && posterBanner!=null)
                {
                    posterBanner.LoadBanner();
                    banner = posterBanner;
                }
            }
            else
            {
                // Get episode details.
                episode = series.GetEpisodes(showDetailsBasic.SeasonNumber ?? 0).Find(anEpisode => anEpisode.EpisodeNumber == showDetailsBasic.EpisodeNumber);

                // Season banner;
                var seasonBanner = series.SeasonBanners.Where(B=>B.Season==showDetailsBasic.SeasonNumber).FirstOrDefault();
                if(seasonBanner!=null)
                {
                    seasonBanner.LoadBanner();
                    banner = seasonBanner;
                }
            }

            // Set details.
            ShowName = series.SeriesName;
            if(strictSeason)
            {
                SeasonNumber = episode.SeasonNumber;
                EpisodeNumber = episode.EpisodeNumber;
            }
            else
            {
                SeasonNumber = showDetailsBasic.SeasonNumber;
                EpisodeNumber = showDetailsBasic.EpisodeNumber;
            }
            EpisodeName = episode.EpisodeName;
            AiredDate = episode.FirstAired;
            Overview = episode.Overview;
            TVNetwork = series.Network;
            Artworks = (banner==null)?null:new List<FileInfoBase> {GetBannerCacheFile(banner)};
            HasDetails = true;
            return true;
        }
Example #2
0
        public bool ExtractDetails(bool doExhaustiveExtraction, bool strictSeason)
        {
            // 1) Try getting from file name.
            if(showDetailsRegex.HasDetails || showDetailsRegex.ExtractDetails(MediaFile.Name))
            {
                showDetailsBasic = showDetailsRegex;
            }

            // 2) If DoExhaustiveExtraction set then try getting directly from file meta data.
            if(doExhaustiveExtraction && (showDetailsAtomic.HasDetails || showDetailsAtomic.ExtractDetails(MediaFile)))
            {
                showDetailsBasic = showDetailsAtomic;
                showDetailsAdditional = showDetailsAtomic;
            }

            // 3) If HasDetails and DoExhaustiveExtraction then try getting additional details from online.
            try
            {
                if(HasDetails && doExhaustiveExtraction && (showDetailsTVDB.HasDetails || showDetailsTVDB.ExtractDetails(showDetailsBasic, strictSeason)))
                {
                    showDetailsBasic = showDetailsTVDB;
                    showDetailsAdditional = showDetailsTVDB;
                }
            }
            catch
            {
            }

            return HasDetails;
        }