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);
 }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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;
        }
Esempio n. 6
0
 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();
 }