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); }
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(); }
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]+\. ))(.*?)</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); } }
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); }
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; }
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(); }
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); }
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); }
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; }