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