private void runInitScript(string token, string folder) { if (!Directory.Exists(folder)) return; var initscript = new ScriptFilter() .FilterScripts(Directory.GetFiles(folder, "initialize.*")) .FirstOrDefault(); if (initscript == null) return; Logger.Write("Found init script: " + initscript); var defaultLanguage = getDefaultLanguage(); var enabledLanguages = getEnabledLanguages(); var args = "\"" + token + "\"" + defaultLanguage + enabledLanguages; Logger.Write("Running: " + initscript + " " + args + " at " + folder); var proc = new Process(); proc .Spawn( initscript, args, false, folder); }
private bool cacheIsOutOfDate(string file, DefinitionCache cache) { try { var dir = Path.GetDirectoryName(file); var locations = cache.GetLocations(DefinitionCacheItemType.Script); var scriptPath = Path.Combine(dir, "scripts"); var scripts = new ScriptFilter().GetScripts(scriptPath); if (scripts.Any(x => !locations.Contains(x))) { Logger.Write("New script has been added"); return true; } if (locations.Any(x => !scripts.Contains(x))) { Logger.Write("New script has been added"); return true; } foreach (var script in scripts) { if (isUpdated(script, cache)) return true; } locations = cache.GetLocations(DefinitionCacheItemType.Language); var languagePath = Path.Combine(dir, "languages"); var languages = _languages(languagePath); if (languages.Any(x => !locations.Contains(x.FullPath))) { Logger.Write("New language has been added"); if (Logger.IsEnabled) { foreach (var newLanguage in languages.Where(x => !locations.Contains(x.FullPath))) Logger.Write("\t" + newLanguage.FullPath); } return true; } if (locations.Any(x => !languages.Any(y => y.FullPath == x))) { Logger.Write("Language has been removed"); return true; } foreach (var language in languages) { if (isUpdated(language.FullPath, cache)) return true; var languageScriptPath = Path.Combine( Path.Combine(languagePath, language.GetLanguage() + "-files"), "scripts"); if (Directory.Exists(languageScriptPath)) { locations = cache .GetLocations(DefinitionCacheItemType.LanguageScript) .Where(x => x.StartsWith(languageScriptPath)) .ToArray(); var languageScripts = new ScriptFilter().GetScripts(languageScriptPath); if (languageScripts.Any(x => !locations.Contains(x))) { Logger.Write("Language script has been added"); return true; } if (locations.Any(x => !languageScripts.Contains(x))) { Logger.Write("Language script has been removed"); return true; } foreach (var script in languageScripts) { if (isUpdated(script, cache)) return true; } } } } catch (Exception ex) { Logger.Write(ex.ToString()); return true; } return false; }
private DefinitionCache buildDefinitions(string file) { var cache = new DefinitionCache(); var dir = Path.GetDirectoryName(file); // Add languages var languagePath = Path.Combine(dir, "languages"); LanguagePlugin defaultLanguage = null; foreach (var language in _languages(languagePath)) { var item = cache.Add( DefinitionCacheItemType.Language, language.FullPath, DateTime.Now, false, true, language.GetLanguage(), "Commands for the " + language.GetLanguage() + " plugin"); add(cache, item, language.GetUsages()); var languageScriptPath = Path.Combine( Path.Combine( languagePath, language.GetLanguage() + "-files"), "scripts"); Logger.Write("Adding scripts from " + languageScriptPath); var languageScripts = new ScriptFilter().GetScripts(languageScriptPath); foreach (var scriptFile in languageScripts) { Logger.Write("Script " + scriptFile); var script = new Script(_token, _workingDirectory, scriptFile); var usages = script.Usages; // Description is built when fetching usages var scriptItem = item.Append( DefinitionCacheItemType.LanguageScript, scriptFile, DateTime.Now, false, true, script.Name, script.Description); add(cache, scriptItem, usages); } if (language.GetLanguage() == _defaultLanguage) defaultLanguage = language; } // Add scripts var scriptPath = Path.Combine(dir, "scripts"); Logger.Write("Adding scripts from " + scriptPath); var scripts = new ScriptFilter().GetScripts(scriptPath); foreach (var scriptFile in scripts) { Logger.Write("Adding script " + scriptPath); var script = new Script(_token, _workingDirectory, scriptFile); var usages = script.Usages; // Description is built when fetching usages var item = cache.Add( DefinitionCacheItemType.Script, scriptFile, DateTime.Now, false, true, script.Name, script.Description); add(cache, item, usages); } // Add default language if (defaultLanguage != null) { var parameters = cache.Get(new[] { defaultLanguage.GetLanguage() }).Parameters; foreach (var usage in parameters) { // Don't override existing commands with default language if (cache.Get(new[] { usage.Name }) == null) { var item = cache.Add( usage.Type, usage.Location, DateTime.Now, false, true, usage.Name, usage.Description); add(cache, item, usage.Parameters); } } } writeCache(dir, cache); return cache; }
private bool cacheIsOutOfDate(string file, DefinitionCache cache) { try { var dir = Path.GetDirectoryName(file); var locations = cache.GetLocations(DefinitionCacheItemType.Script).Select(x => x.Location); var scriptPath = Path.Combine(dir, "scripts"); var scripts = new ScriptFilter().GetScripts(scriptPath); if (scripts.Any(x => !locations.Contains(x))) { Logger.Write("New script has been added"); return true; } if (locations.Any(x => !scripts.Contains(x))) { Logger.Write("New script has been added"); return true; } foreach (var script in scripts) { if (isUpdated(script, cache)) return true; } var languagePath = Path.Combine(dir, "languages"); var rawLocations = cache.GetLocations(DefinitionCacheItemType.Language); locations = replacePlaceholderLanguages(languagePath, rawLocations); var languages = _languages(languagePath).Select(x => x.FullPath).ToList(); if (languages.Any(x => !locations.Contains(x))) { Logger.Write("New language has been added"); if (Logger.IsEnabled) { foreach (var newLanguage in languages.Where(x => !locations.Contains(x))) Logger.Write("\t" + newLanguage); } return true; } var removedLangs = locations.Where(x => !languages.Any(y => y == x)); if (removedLangs.Count() > 0) { foreach (var rmLang in removedLangs) { Logger.Write("Language {0} removed?", rmLang); if (!File.Exists(rmLang)) { Logger.Write("Language {0} has been removed", rmLang); return true; } else { Logger.Write("found language {0} on disk, continuing", rmLang); } } } languages = addPlaceholderLanguages(languagePath, languages); foreach (var language in languages) { if (isUpdated(language, cache)) return true; var languageScriptPath = Path.Combine( Path.Combine(languagePath, Path.GetFileNameWithoutExtension(language) + "-files"), "scripts"); if (Directory.Exists(languageScriptPath)) { locations = cache .GetLocations(DefinitionCacheItemType.LanguageScript) .Select(x => x.Location) .Where(x => x.StartsWith(languageScriptPath)) .ToArray(); var languageScripts = new ScriptFilter().GetScripts(languageScriptPath); if (languageScripts.Any(x => !locations.Contains(x))) { Logger.Write("Language script has been added"); return true; } if (locations.Any(x => !languageScripts.Contains(x))) { Logger.Write("Language script has been removed"); return true; } foreach (var script in languageScripts) { if (isUpdated(script, cache)) return true; } } } } catch (Exception ex) { Logger.Write(ex.ToString()); return true; } return false; }
private DefinitionCache buildDefinitions(string file) { var cache = new DefinitionCache(); var dir = Path.GetDirectoryName(file); // Add languages var languagePath = Path.Combine(dir, "languages"); foreach (var language in _languages(languagePath)) { var item = cache.Add( DefinitionCacheItemType.Language, language.FullPath, DateTime.Now, false, true, language.GetLanguage(), "Commands for the " + language.GetLanguage() + " plugin"); add(cache, item, language.GetUsages()); } // Add language scripts var currentLanguages = cache .Definitions .Where(x => x.Type == DefinitionCacheItemType.Language) .ToList(); var otherLocationLanguages = _cache .Definitions .Where(x => x.Type == DefinitionCacheItemType.Language && !currentLanguages.Any(y => y.Name == x.Name)) .ToList(); foreach (var item in currentLanguages) { var languageScriptPath = Path.Combine( Path.Combine( languagePath, item.Name + "-files"), "scripts"); if (!Directory.Exists(languageScriptPath)) continue; Logger.Write("Adding scripts from " + languageScriptPath); var languageScripts = new ScriptFilter().GetScripts(languageScriptPath); foreach (var scriptFile in languageScripts) { Logger.Write("Script " + scriptFile); var script = new Script(_token, _workingDirectory, scriptFile) .SetUsageDispatcher((msg) => { if (msg.StartsWith("error|")) printError(msg); }); var usages = script.Usages; // Description is built when fetching usages var scriptItem = item.Append( DefinitionCacheItemType.LanguageScript, scriptFile, DateTime.Now, false, true, script.Name, script.Description); add(cache, scriptItem, usages); } } foreach (var language in otherLocationLanguages) { var languageScriptPath = Path.Combine( Path.Combine( languagePath, language.Name + "-files"), "scripts"); if (!Directory.Exists(languageScriptPath)) continue; var item = cache.Add( DefinitionCacheItemType.Language, "placehoder-for-language-in-different-location", DateTime.Now, false, true, language.Name, ""); add(cache, item, new BaseCommandHandlerParameter[] {}); Logger.Write("Adding scripts from " + languageScriptPath); var languageScripts = new ScriptFilter().GetScripts(languageScriptPath); foreach (var scriptFile in languageScripts) { Logger.Write("Script " + scriptFile); var script = new Script(_token, _workingDirectory, scriptFile) .SetUsageDispatcher((msg) => { if (msg.StartsWith("error|")) printError(msg); }); var usages = script.Usages; // Description is built when fetching usages var scriptItem = item.Append( DefinitionCacheItemType.LanguageScript, scriptFile, DateTime.Now, false, true, script.Name, script.Description); add(cache, scriptItem, usages); } } // Add scripts var scriptPath = Path.Combine(dir, "scripts"); Logger.Write("Adding scripts from " + scriptPath); var scripts = new ScriptFilter().GetScripts(scriptPath); foreach (var scriptFile in scripts) { Logger.Write("Adding script " + scriptPath); var script = new Script(_token, _workingDirectory, scriptFile) .SetUsageDispatcher((msg) => { if (msg.StartsWith("error|")) printError(msg); }); var usages = script.Usages; // Description is built when fetching usages var item = cache.Add( DefinitionCacheItemType.Script, scriptFile, DateTime.Now, false, true, script.Name, script.Description); add(cache, item, usages); } writeCache(dir, cache); return cache; }
private void runInitScript(string folder) { if (!Directory.Exists(folder)) return; var initscript = new ScriptFilter() .FilterScripts(Directory.GetFiles(folder, "initialize.*")) .FirstOrDefault(); if (initscript == null) return; var defaultLanguage = getDefaultLanguage(); var enabledLanguages = getEnabledLanguages(); var proc = new Process(); proc.StartInfo = new ProcessStartInfo( initscript, "\"" + Environment.CurrentDirectory + "\"" + defaultLanguage + enabledLanguages); proc.StartInfo.CreateNoWindow = true; proc.StartInfo.UseShellExecute = true; proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; proc.StartInfo.WorkingDirectory = folder; proc.Start(); }