Example #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();
        }
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();
        }