private static void LoadScripts() { try { _metadataExtractorCustomCategories = new ConcurrentBag <string>(); //Load latest version of scripts Assembly assembly = Assembly.GetExecutingAssembly(); Dictionary <string, List <ScriptableScraperMovieMatcher> > matchers = new Dictionary <string, List <ScriptableScraperMovieMatcher> >(); List <string> categories = new List <string>(); Dictionary <int, ScriptableScript> scripts = new Dictionary <int, ScriptableScript>(); foreach (var file in Directory.EnumerateFiles(Path.Combine(Path.GetDirectoryName(assembly.Location), "MovieScraperScripts\\"), "*.xml")) { var script = new ScriptableScript(); if (script.Load(file)) { if (string.IsNullOrEmpty(script.Category)) { script.Category = MEDIA_CATEGORY_NAME_MOVIE; } if (!scripts.ContainsKey(script.ScriptID)) { scripts.Add(script.ScriptID, script); } else if (Version.TryParse(scripts[script.ScriptID].Version, out var curVer) && Version.TryParse(script.Version, out var newVer) && newVer > curVer) { scripts[script.ScriptID] = script; } } } //Categorize scripts foreach (var script in scripts.Values) { if (!matchers.ContainsKey(script.Category)) { matchers.Add(script.Category, new List <ScriptableScraperMovieMatcher>()); } matchers[script.Category].Add(new ScriptableScraperMovieMatcher(script)); } //Register movie matchers foreach (var matcher in matchers) { if (!matcher.Key.Equals(MEDIA_CATEGORY_NAME_MOVIE, StringComparison.OrdinalIgnoreCase)) { if (!categories.Contains(matcher.Key)) { //Store custom MDE movie category categories.Add(matcher.Key); _metadataExtractorCustomCategories.Add(matcher.Key); } } OnlineMatcherService.RegisterMovieMatchers(matcher.Value.ToArray(), matcher.Key); } } catch (Exception ex) { ServiceRegistration.Get <ILogger>().Error("ScriptableMetadataExtractor: Error initializing scripts", ex); } }
public static void Launch(ScriptableScript script) { Instance.Run(script.Get()); }