Example #1
0
        public TvShowMeta LoadShowMeta(TvdbLib.TvdbHandler tvdbHandler)
        {
            if (this.TvShow == null)
            {
                FileInfo fileInfo = new FileInfo(this.Filename);
                string   showPath = fileInfo.Directory.FullName;
                // get directory of show.
                if (Regex.IsMatch(fileInfo.Directory.Name, "(Season|Series|Specials)", RegexOptions.IgnoreCase))
                {
                    showPath = fileInfo.Directory.Parent.FullName;
                }

                this.TvShow = TvShowMeta.Load(tvdbHandler, this.ShowTitle, Path.Combine(showPath, "tvshow.nfo"));
            }
            return(this.TvShow);
        }
Example #2
0
        protected override void Scan_Executing(object oFolders = null)
        {
            TriggerStatusUpdated("Searching for TV Episodes...");
            string[] Folders = oFolders as string[];
            if (Folders == null)
            {
                Folders = Settings.TvFolders;
            }
            string[] extensions = Settings.VideoExtensions;

            #region get files
            List <Meta> newItems = new List <Meta>();
            // tv shows must be in the format: [Show]\[Season \d]\[Episodes]
            Regex rgxTvShow = new Regex(Settings.TvRegularExpression, RegexOptions.IgnoreCase);
            foreach (string folder in Folders)
            {
                try
                {
                    List <string> knownFiles = new List <string>();
                    foreach (List <Metadata.TvFileMeta> eplist in Shows.Values)
                    {
                        knownFiles.AddRange(from ep in eplist select ep.Filename.ToLower());
                    }
                    string[] files = System.IO.Directory.GetFiles(folder, "*", System.IO.SearchOption.AllDirectories);
                    foreach (string file in files)
                    {
                        if (this.Items.ContainsKey(file.ToLower()) || knownFiles.Contains(file.ToLower()))
                        {
                            continue;
                        }
                        string ext = file.Substring(file.LastIndexOf(".") + 1).ToLower();
                        if (!extensions.Contains(ext))
                        {
                            continue;
                        }
                        FileInfo fileInfo = new FileInfo(file);
                        // incase the year is in the file remove it, as the year can be picked up as the season and ep number
                        string strRgxfiletest = Regex.Replace(file, @"([\d]{4}\-[\d]{2}\-[\d]{2})|(720p)|(1080p)|(480p)", "");
                        if (!rgxTvShow.IsMatch(strRgxfiletest))
                        {
                            continue;
                        }
                        Metadata.TvFileMeta meta = new Metadata.TvFileMeta(file);
                        newItems.Add(meta);
                        AddItem(meta);

                        if (!Shows.ContainsKey(meta.ShowTitle))
                        {
                            Shows.Add(meta.ShowTitle, new List <TvFileMeta>());
                        }
                        Shows[meta.ShowTitle].Add(meta);
                    }
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
                }
            }
            #endregion

            foreach (string key in Shows.Keys)
            {
                Shows[key].Sort(delegate(Metadata.TvFileMeta a, Metadata.TvFileMeta b)
                {
                    if (a == null && b == null)
                    {
                        return(0);
                    }
                    else if (a == null)
                    {
                        return(1);
                    }
                    else if (b == null)
                    {
                        return(-1);
                    }
                    if (a.Season != b.Season)
                    {
                        return(a.Season.CompareTo(b.Season));
                    }
                    return(a.EpisodeNumbers[0].CompareTo(b.EpisodeNumbers[0]));
                });
            }

            TriggerAllItemsFound(newItems.ToArray());

            #region constructor TheTvdb Handler
            string cacheDirectory = Path.Combine(Settings.CachePath, "TheTvDb");
            if (!Directory.Exists(cacheDirectory))
            {
                Directory.CreateDirectory(cacheDirectory);
            }

            TvdbLib.Cache.ICacheProvider cacheProvider = new TvdbLib.Cache.XmlCacheProvider(cacheDirectory);
            TvdbLib.TvdbHandler          tvdbHandler   = new TvdbLib.TvdbHandler(cacheProvider, Settings.TvdbApiKey);
            #endregion

            foreach (Metadata.TvFileMeta meta in newItems.OrderBy(x => ((TvFileMeta)x).ExistingNfoFile ? 1 : 0))
            {
                TriggerScanningItem(meta);
                int result = meta.Load();
                TriggerUpdated(meta, result);
            }

            TriggerCompleted();
        }
Example #3
0
        public static TvShowMeta Load(TvdbLib.TvdbHandler tvdbHandler, string ShowName, string NfoFile)
        {
            try
            {
                TvShowMeta meta = new TvShowMeta(new FileInfo(NfoFile).Directory.FullName);
                if (!File.Exists(NfoFile))
                {
                    if (tvdbHandler == null)
                    {
                        return(null);
                    }
                    // try download it
                    List <TvdbLib.Data.TvdbSearchResult> results = tvdbHandler.SearchSeries(ShowName);
                    if (results == null || results.Count == 0)
                    {
                        Trace.WriteLine(String.Format("Unable to find show '{0}'", ShowName));
                        return(null);
                    }
                    TvdbLib.Data.TvdbSearchResult showMatch = null;
                    foreach (TvdbLib.Data.TvdbSearchResult result in results)
                    {
                        if (showMatch == null || Regex.Replace(result.SeriesName, "[^a-zA-Z0-9]", "").ToLower() == Regex.Replace(ShowName, "[^a-zA-Z0-9]", "").ToLower())
                        {
                            showMatch = result;
                        }
                    }
                    if (showMatch == null)
                    {
                        return(null);
                    }
                    TvdbLib.Data.TvdbSeries series = tvdbHandler.GetSeries(showMatch.Id, TvdbLib.Data.TvdbLanguage.DefaultLanguage, false, true, true);
                    // save the nfo
                    meta.Id           = series.Id;
                    meta.Title        = series.SeriesName;
                    meta.Plot         = series.Overview;
                    meta.Premiered    = series.FirstAired.ToString("yyyy-MM-dd");
                    meta.Rating       = (float)series.Rating;
                    meta.Status       = series.Status;
                    meta.Genres       = series.Genre.ToArray();
                    meta.Year         = series.FirstAired.Year;
                    meta.Mpaa         = series.ContentRating;
                    meta.Studio       = series.Network;
                    meta.Runtime      = (int)series.Runtime;
                    meta.EpisodeGuide = String.Format("http://www.thetvdb.com/api/{0}/series/{1}/all/en.zip", Settings.TvdbApiKey, series.Id);
                    meta.Actors       = (from a in series.TvdbActors select new KeyValuePair <string, string>(a.Name, a.Role)).ToArray();
                    meta.Thumb        = (from t in series.SeriesBanners orderby t.Rating descending, t.RatingCount descending select String.Format("http://thetvdb.com/banners/{0}", t.BannerPath)).ToArray();

                    foreach (int season in (from t in series.SeasonBanners orderby t.Season select t.Season).Distinct())
                    {
                        meta.SeasonBanners.Add(season, (from t in series.SeasonBanners orderby t.Rating descending, t.RatingCount descending where t.Season == season select String.Format("http://thetvdb.com/banners/{0}", t.BannerPath)).ToArray());
                    }
                    meta.FanArt = (from f in series.FanartBanners
                                   orderby f.Rating descending, f.RatingCount descending
                                   select new FanArtImage()
                    {
                        Colors = String.Format("|{0},{1},{2}|{3},{4},{5}|{6},{7},{8}|", f.Color1.R, f.Color1.G, f.Color1.B, f.Color2.R, f.Color2.G, f.Color2.B, f.Color3.R, f.Color3.G, f.Color3.B),
                        Dimensions = String.Format("{0}x{1}", f.Resolution.X, f.Resolution.Y),
                        Url = f.BannerPath,
                        PreviewUrl = f.ThumbPath
                    }).ToArray();

                    meta.PosterUrl = (from p in series.PosterBanners orderby p.Resolution.X descending, p.Resolution.Y descending, p.Rating descending, p.RatingCount descending select String.Format("http://thetvdb.com/banners/{0}", p.BannerPath)).FirstOrDefault();
                    meta.BannerUrl = (from b in series.SeriesBanners orderby(b.BannerType == TvdbLib.Data.Banner.TvdbSeriesBanner.Type.graphical ? 0 : 1), b.Rating descending, b.RatingCount descending select String.Format("http://thetvdb.com/banners/{0}", b.BannerPath)).FirstOrDefault();
                    meta.FanArtUrl = (from b in series.FanartBanners orderby b.Resolution.Y descending, b.Resolution.X descending, b.Rating descending, b.RatingCount descending select String.Format("http://thetvdb.com/banners/{0}", b.BannerPath)).FirstOrDefault();
                    foreach (int season in (from b in series.SeasonBanners where b.BannerType == TvdbLib.Data.Banner.TvdbSeasonBanner.Type.season select b.Season).Distinct())
                    {
                        meta.SeasonPosters[season] = (from b in series.SeasonBanners where b.Season == season && b.BannerType == TvdbLib.Data.Banner.TvdbSeasonBanner.Type.season orderby b.Rating descending, b.RatingCount descending select String.Format("http://thetvdb.com/banners/{0}", b.BannerPath)).FirstOrDefault();
                    }
                    // get the all seasons season poster
                    meta.SeasonPosters[-1] = (from b in series.PosterBanners orderby b.Rating descending, b.RatingCount descending select String.Format("http://thetvdb.com/banners/{0}", b.BannerPath)).FirstOrDefault();

                    // get the clearart
                    try
                    {
                        XDocument xmlClearArt = XDocument.Load("http://fanart.tv/api/fanart.php?id=" + series.Id);
                        if (xmlClearArt.Element("fanart").Element("clearlogos") != null && xmlClearArt.Element("fanart").Element("clearlogos").Element("clearlogo") != null)
                        {
                            meta.ClearLogoUrl = xmlClearArt.Element("fanart").Element("clearlogos").Element("clearlogo").Attribute("url").Value;
                        }
                        if (xmlClearArt.Element("fanart").Element("cleararts") != null && xmlClearArt.Element("fanart").Element("cleararts").Element("clearart") != null)
                        {
                            meta.ClearArtUrl = xmlClearArt.Element("fanart").Element("cleararts").Element("clearart").Attribute("url").Value;
                        }
                    }
                    catch (Exception) { }

                    // get the tv tune
                    try
                    {
                        string tvTunePage = WebHelper.GetWebResponse(String.Format("http://www.televisiontunes.com/search.php?searWords={0}&search=", meta.Title));
                        string content    = Regex.Match(tvTunePage, "(?<=(<h1>Search</h1>))(.*?)(?=((<a href=\"search)|(</td>)))", RegexOptions.IgnoreCase | RegexOptions.Singleline).Value;
                        Dictionary <string, string> matches = new Dictionary <string, string>();
                        foreach (Match match in Regex.Matches(content, @"(?<=([\d]+\.&nbsp;))(.*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Singleline))
                        {
                            string name = Regex.Match(match.Value, @"(?<=(>))[^<]+").Value;
                            string url  = Regex.Match(match.Value, @"(?<=(href=""))[^""]+").Value;
                            matches.Add(url, name);
                        }
                        string themeUrlPage = null;
                        foreach (string url in matches.Keys)
                        {
                            if (Regex.Replace(meta.Title, "[^0-9a-zA-Z]", "").ToLower() == Regex.Replace(matches[url], "[^0-9a-zA-Z]", "").ToLower())
                            {
                                Trace.WriteLine("Found theme song: " + url);

                                themeUrlPage = url;
                                break;
                            }
                            else if (matches[url].IndexOf(" - ") > 0 && Regex.Replace(meta.Title, "[^0-9a-zA-Z]", "").ToLower() == Regex.Replace(matches[url].Substring(0, matches[url].IndexOf(" - ")), "[^0-9a-zA-Z]", "").ToLower()) // look for a close match, eg "Come fly with Me - Openning"
                            {
                                Trace.WriteLine("Found close theme song: " + url);

                                themeUrlPage = url;
                            }
                        }

                        if (!String.IsNullOrEmpty(themeUrlPage))
                        {
                            string themeSongPage = WebHelper.GetWebResponse(themeUrlPage);
                            Match  themeUrlMatch = Regex.Match(themeSongPage, "/themesongs/(.*?).mp3", RegexOptions.IgnoreCase);
                            if (themeUrlMatch.Success)
                            {
                                meta.TvTuneUrl = "http://www.televisiontunes.com" + themeUrlMatch.Value;
                            }
                        }
                    }
                    catch (Exception) { }

                    meta.Save(new FileInfo(NfoFile).Directory.FullName);
                    return(meta);
                }

                XElement root = XDocument.Load(NfoFile).Element("tvshow");
                int      id   = 0;
                if (int.TryParse(root.Element("id") != null ? root.Element("id").Value : "0", out id))
                {
                    meta.Id = id;
                }
                meta.Title = root.Element("title") != null?root.Element("title").Value : "";

                meta.Tagline = root.Element("tagline") != null?root.Element("tagline").Value : "";

                meta.Outline = root.Element("outline") != null?root.Element("outline").Value : "";

                meta.Plot = root.Element("plot") != null?root.Element("plot").Value : "";

                meta.Premiered = root.Element("premiered") != null?root.Element("premiered").Value : "";

                meta.Mpaa = root.Element("mpaa") != null?root.Element("mpaa").Value : "";

                float rating = 0;
                if (float.TryParse(root.Element("rating") != null ? root.Element("rating").Value : "0", out rating))
                {
                    meta.Rating = rating;
                }
                meta.Status = root.Element("status") != null?root.Element("status").Value : "";

                meta.Studio = root.Element("studio") != null?root.Element("studio").Value : "";

                int year = 0;
                if (int.TryParse(root.Element("year") != null ? root.Element("year").Value : "0", out year))
                {
                    meta.Year = year;
                }
                meta.Genres = (from g in root.Elements("genre") select g.Value).ToArray();
                if (root.Element("episodeguide") != null && root.Element("episodeguide").Element("url") != null)
                {
                    meta.EpisodeGuide = root.Element("episodeguide").Element("url").Value;
                }

                return(meta);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
                return(null);
            }
        }
Example #4
0
        private bool LoadFromTheTvDb()
        {
            FileInfo fileInfo = new FileInfo(Filename);

            #region constructor TheTvdb Handler
            string cacheDirectory = Path.Combine(Settings.CachePath, "TheTvDb");
            if (!Directory.Exists(cacheDirectory))
            {
                Directory.CreateDirectory(cacheDirectory);
            }

            TvdbLib.Cache.ICacheProvider cacheProvider = new TvdbLib.Cache.XmlCacheProvider(cacheDirectory);
            TvdbLib.TvdbHandler          tvdbHandler   = new TvdbLib.TvdbHandler(cacheProvider, Settings.TvdbApiKey);
            #endregion

            LoadShowMeta(tvdbHandler);
            if (this.TvShow == null)
            {
                Trace.WriteLine(String.Format("Failed to find tv show '{0}' for file: {1}", this.ShowTitle, this.Filename));
                return(false);
            }

            TvdbLib.Data.TvdbEpisode.EpisodeOrdering ordering = TvdbLib.Data.TvdbEpisode.EpisodeOrdering.DefaultOrder;
            if (this.Filename.ToUpper().Contains("[DVD]") && this.Season > 0) // specials dont use dvd order... i think...
            {
                ordering = TvdbLib.Data.TvdbEpisode.EpisodeOrdering.DvdOrder;
            }

            int epbookmark    = 0;
            int episodeLength = 0;
            if (this.FileInfo != null && this.FileInfo.Video != null)
            {
                episodeLength = this.FileInfo.Video.DurationInSeconds / this.EpisodeNumbers.Length;
            }

            if (this.Episodes == null || this.Episodes.Length != this.EpisodeNumbers.Length)
            {
                this.Episodes = new TvEpisodeMeta[this.EpisodeNumbers.Length];
            }

            int index = 0;
            foreach (int epNumber in this.EpisodeNumbers)
            {
                TvdbLib.Data.TvdbEpisode tvdbEpisode = null;
                try
                {
                    tvdbEpisode = tvdbHandler.GetEpisode(this.TvShow.Id, this.Season, epNumber, ordering, TvdbLib.Data.TvdbLanguage.DefaultLanguage);
                }
                catch (Exception)
                {
                    if (ordering == TvdbLib.Data.TvdbEpisode.EpisodeOrdering.DvdOrder) // fail back to default ordering, incase there is no dvd ordering available (eg Sliders Season 3)
                    {
                        tvdbEpisode = tvdbHandler.GetEpisode(this.TvShow.Id, this.Season, epNumber, TvdbLib.Data.TvdbEpisode.EpisodeOrdering.DefaultOrder, TvdbLib.Data.TvdbLanguage.DefaultLanguage);
                    }
                }
                if (tvdbEpisode == null)
                {
                    continue;
                }
                if (this.Episodes[index] == null)
                {
                    this.Episodes[index] = new TvEpisodeMeta(this.Filename);
                }

                TvEpisodeMeta meta = this.Episodes[index];
                meta.TvdbId         = tvdbEpisode.Id;
                meta.TvdbSeriesId   = tvdbEpisode.SeriesId;
                meta.Actors         = (from gs in tvdbEpisode.GuestStars select new KeyValuePair <string, string>(gs, null)).ToArray();
                meta.Aired          = tvdbEpisode.FirstAired;
                meta.Directors      = tvdbEpisode.Directors.ToArray();
                meta.DisplayEpisode = tvdbEpisode.AirsBeforeEpisode >= 0 ? tvdbEpisode.AirsBeforeEpisode : -1;
                meta.DisplaySeason  = tvdbEpisode.AirsBeforeSeason >= 0 ? tvdbEpisode.AirsBeforeSeason : -1;
                meta.Episode        = tvdbEpisode.EpisodeNumber;
                meta.Season         = tvdbEpisode.SeasonNumber;
                meta.Plot           = tvdbEpisode.Overview;
                meta.Premiered      = tvdbEpisode.FirstAired;
                meta.Rating         = (float)tvdbEpisode.Rating;
                meta.ShowTitle      = this.TvShow.Title;
                meta.Mpaa           = this.TvShow.Mpaa;
                meta.Studio         = this.TvShow.Studio;
                meta.EpBookmark     = epbookmark;
                if (!String.IsNullOrEmpty(tvdbEpisode.BannerPath))
                {
                    meta.Thumb = "http://thetvdb.com/banners/" + tvdbEpisode.BannerPath;
                }
                meta.Title   = tvdbEpisode.EpisodeName;
                meta.Writers = tvdbEpisode.Writer.ToArray();
                epbookmark  += episodeLength; // not perfect, but good starting point.

                if (ordering == TvdbLib.Data.TvdbEpisode.EpisodeOrdering.DvdOrder)
                {
                    meta.Episode = (int)tvdbEpisode.DvdEpisodeNumber;
                    meta.Season  = tvdbEpisode.DvdSeason;
                }

                index++;
            }
            return(true);
        }
Example #5
0
        private bool LoadFromTheTvDb()
        {
            FileInfo fileInfo = new FileInfo(Filename);

            #region constructor TheTvdb Handler
            string cacheDirectory = Path.Combine(Settings.CachePath, "TheTvDb");
            if (!Directory.Exists(cacheDirectory))
                Directory.CreateDirectory(cacheDirectory);

            TvdbLib.Cache.ICacheProvider cacheProvider = new TvdbLib.Cache.XmlCacheProvider(cacheDirectory);
            TvdbLib.TvdbHandler tvdbHandler = new TvdbLib.TvdbHandler(cacheProvider, Settings.TvdbApiKey);
            #endregion

            LoadShowMeta(tvdbHandler);
            if (this.TvShow == null)
            {
                Trace.WriteLine(String.Format("Failed to find tv show '{0}' for file: {1}", this.ShowTitle, this.Filename));
                return false;
            }

            TvdbLib.Data.TvdbEpisode.EpisodeOrdering ordering = TvdbLib.Data.TvdbEpisode.EpisodeOrdering.DefaultOrder;
            if (this.Filename.ToUpper().Contains("[DVD]") && this.Season > 0) // specials dont use dvd order... i think...
                ordering = TvdbLib.Data.TvdbEpisode.EpisodeOrdering.DvdOrder;

            int epbookmark = 0;
            int episodeLength = 0;
            if(this.FileInfo != null && this.FileInfo.Video != null)
                episodeLength = this.FileInfo.Video.DurationInSeconds / this.EpisodeNumbers.Length;

            if(this.Episodes== null || this.Episodes.Length != this.EpisodeNumbers.Length)
                this.Episodes = new TvEpisodeMeta[this.EpisodeNumbers.Length];

            int index = 0;
            foreach (int epNumber in this.EpisodeNumbers)
            {
                TvdbLib.Data.TvdbEpisode tvdbEpisode = null;
                try
                {
                    tvdbEpisode = tvdbHandler.GetEpisode(this.TvShow.Id, this.Season, epNumber, ordering, TvdbLib.Data.TvdbLanguage.DefaultLanguage);
                }
                catch (Exception)
                {
                    if(ordering == TvdbLib.Data.TvdbEpisode.EpisodeOrdering.DvdOrder) // fail back to default ordering, incase there is no dvd ordering available (eg Sliders Season 3)
                        tvdbEpisode = tvdbHandler.GetEpisode(this.TvShow.Id, this.Season, epNumber, TvdbLib.Data.TvdbEpisode.EpisodeOrdering.DefaultOrder, TvdbLib.Data.TvdbLanguage.DefaultLanguage);
                }
                if (tvdbEpisode == null)
                    continue;
                if(this.Episodes[index] == null)
                    this.Episodes[index] = new TvEpisodeMeta(this.Filename);

                TvEpisodeMeta meta = this.Episodes[index];
                meta.TvdbId = tvdbEpisode.Id;
                meta.TvdbSeriesId = tvdbEpisode.SeriesId;
                meta.Actors = (from gs in tvdbEpisode.GuestStars select new KeyValuePair<string, string>(gs, null)).ToArray();
                meta.Aired = tvdbEpisode.FirstAired;
                meta.Directors = tvdbEpisode.Directors.ToArray();
                meta.DisplayEpisode = tvdbEpisode.AirsBeforeEpisode >= 0 ? tvdbEpisode.AirsBeforeEpisode : -1;
                meta.DisplaySeason = tvdbEpisode.AirsBeforeSeason >= 0 ? tvdbEpisode.AirsBeforeSeason : -1;
                meta.Episode = tvdbEpisode.EpisodeNumber;
                meta.Season = tvdbEpisode.SeasonNumber;
                meta.Plot = tvdbEpisode.Overview;
                meta.Premiered = tvdbEpisode.FirstAired;
                meta.Rating = (float)tvdbEpisode.Rating;
                meta.ShowTitle = this.TvShow.Title;
                meta.Mpaa = this.TvShow.Mpaa;
                meta.Studio = this.TvShow.Studio;
                meta.EpBookmark = epbookmark;
                if (!String.IsNullOrEmpty(tvdbEpisode.BannerPath))
                    meta.Thumb = "http://thetvdb.com/banners/" + tvdbEpisode.BannerPath;
                meta.Title = tvdbEpisode.EpisodeName;
                meta.Writers = tvdbEpisode.Writer.ToArray();
                epbookmark += episodeLength; // not perfect, but good starting point.

                if (ordering == TvdbLib.Data.TvdbEpisode.EpisodeOrdering.DvdOrder)
                {
                    meta.Episode = (int)tvdbEpisode.DvdEpisodeNumber;
                    meta.Season = tvdbEpisode.DvdSeason;
                }

                index++;
            }
            return true;
        }
Example #6
0
        protected override void Scan_Executing(object oFolders = null)
        {
            TriggerStatusUpdated("Searching for TV Episodes...");
            string[] Folders = oFolders as string[];
            if (Folders == null)
                Folders = Settings.TvFolders;
            string[] extensions = Settings.VideoExtensions;

            #region get files
            List<Meta> newItems = new List<Meta>();
            // tv shows must be in the format: [Show]\[Season \d]\[Episodes]
            Regex rgxTvShow = new Regex(Settings.TvRegularExpression, RegexOptions.IgnoreCase);
            foreach (string folder in Folders)
            {
                try
                {
                    List<string> knownFiles = new List<string>();
                    foreach (List<Metadata.TvFileMeta> eplist in Shows.Values)
                        knownFiles.AddRange(from ep in eplist select ep.Filename.ToLower());
                    string[] files = System.IO.Directory.GetFiles(folder, "*", System.IO.SearchOption.AllDirectories);
                    foreach (string file in files)
                    {
                        if (this.Items.ContainsKey(file.ToLower()) || knownFiles.Contains(file.ToLower()))
                            continue;
                        string ext = file.Substring(file.LastIndexOf(".") + 1).ToLower();
                        if (!extensions.Contains(ext))
                            continue;
                        FileInfo fileInfo = new FileInfo(file);
                        // incase the year is in the file remove it, as the year can be picked up as the season and ep number
                        string strRgxfiletest = Regex.Replace(file, @"([\d]{4}\-[\d]{2}\-[\d]{2})|(720p)|(1080p)|(480p)", "");
                        if (!rgxTvShow.IsMatch(strRgxfiletest))
                            continue;
                        Metadata.TvFileMeta meta = new Metadata.TvFileMeta(file);
                        newItems.Add(meta);
                        AddItem(meta);

                        if(!Shows.ContainsKey(meta.ShowTitle))
                            Shows.Add(meta.ShowTitle, new List<TvFileMeta>());
                        Shows[meta.ShowTitle].Add(meta);
                    }
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
                }
            }
            #endregion

            foreach(string key in Shows.Keys)
            {
                Shows[key].Sort(delegate(Metadata.TvFileMeta a, Metadata.TvFileMeta b)
                               {
                                    if(a == null && b == null)
                                        return 0;
                                    else if (a == null) return 1;
                                    else if (b == null) return -1;
                                    if(a.Season != b.Season) return a.Season.CompareTo(b.Season);
                                    return a.EpisodeNumbers[0].CompareTo(b.EpisodeNumbers[0]);
                               });
            }

            TriggerAllItemsFound(newItems.ToArray());

            #region constructor TheTvdb Handler
            string cacheDirectory = Path.Combine(Settings.CachePath, "TheTvDb");
            if (!Directory.Exists(cacheDirectory))
                Directory.CreateDirectory(cacheDirectory);

            TvdbLib.Cache.ICacheProvider cacheProvider = new TvdbLib.Cache.XmlCacheProvider(cacheDirectory);
            TvdbLib.TvdbHandler tvdbHandler = new TvdbLib.TvdbHandler(cacheProvider, Settings.TvdbApiKey);
            #endregion

            foreach (Metadata.TvFileMeta meta in newItems.OrderBy(x => ((TvFileMeta)x).ExistingNfoFile ? 1 : 0))
            {
                TriggerScanningItem(meta);
                int result = meta.Load();
                TriggerUpdated(meta, result);
            }

            TriggerCompleted();
        }
Example #7
0
        private static void GetArtwork(int ourSeriesId, int tvdbSeriesId)
        {
            var tvdb = new TvdbLib.TvdbHandler("1DAE8DAAB6FCA0AE");
            var series = tvdb.GetSeries(tvdbSeriesId, TvdbLanguage.DefaultLanguage, false, false, true, true);
            GetArtwork(ourSeriesId, series);

            fanart.tv_api.Configuration.ApiKey = "f4e2662645d3a080f32bef35aa7b4ca6";
            var s = fanart.tv_api.Series.Get(tvdbSeriesId);
            GetArtwork(ourSeriesId, s);
        }
Example #8
0
 private static void GetActors(int ourSeriesId, int seriesId)
 {
     var tvdb = new TvdbLib.TvdbHandler("1DAE8DAAB6FCA0AE");
     var series = tvdb.GetSeries(seriesId, TvdbLanguage.DefaultLanguage, false, true, false, true);
     GetActors(ourSeriesId, series);
 }
Example #9
0
        public static int? LookupSeries(string seriesName)
        {
            Logger.Info("Looking up Series: {0}", seriesName);

            // TODO: Remove the API Key
            var tvdb = new TvdbLib.TvdbHandler("1DAE8DAAB6FCA0AE");
            var results = tvdb.SearchSeries(seriesName);

            Logger.Debug("Lookup Results: {0}: {1}", seriesName, results.Count);

            switch (results.Count)
            {
                case 0:
                    Logger.Info("No results.");
                    break;
                case 1:
                        Logger.Info("Got single match.");
                        var result = results.First();
                        var series = tvdb.GetBasicSeries(result.Id, TvdbLanguage.DefaultLanguage, false);
                        var ourSeriesId = Series.AddBasicInfo(series);
                        GetArtwork(ourSeriesId, series.Id);
                        GetActors(ourSeriesId, series.Id);
                        return ourSeriesId;
                default:
                        Logger.Info("Got multiple matches.");
                        foreach (var match in results)
                        {
                            Logger.Debug("Got series: {0}", match.SeriesName);
                        }

                        var orderedCandidates = new List<TvdbSearchResult>();
                        var weChoose = RankSearchResults(seriesName, results, out orderedCandidates);
                        if (weChoose != null)
                        {
                            Logger.Info("We would chose: {0}", weChoose.SeriesName);
                            series = tvdb.GetBasicSeries(weChoose.Id, TvdbLanguage.DefaultLanguage, false);

                            ourSeriesId = Series.AddBasicInfo(series);
                            GetArtwork(ourSeriesId, series.Id);
                            GetActors(ourSeriesId, series.Id);
                            return ourSeriesId;
                        }

                    break;
            }

            return null;
        }