Пример #1
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();
        }
Пример #2
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;
        }
Пример #3
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);
        }
Пример #4
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();
        }