コード例 #1
0
        private void Execute(PluginEnvironment environment, IScriptExecutor executor)
        {
            if (!plugins.Any(plugin => plugin.HasEnvironment(environment)) || !executor.RunFile($"plugins.{environment.GetPluginScriptFile()}"))
            {
                return;
            }

            bool includeDisabled = environment == PluginEnvironment.Browser;

            if (includeDisabled)
            {
                executor.RunScript("gen:pluginconfig", PluginScriptGenerator.GenerateConfig(Config));
            }

            List <string> errors = new List <string>(1);

            foreach (Plugin plugin in Plugins)
            {
                string path = plugin.GetScriptPath(environment);

                if (string.IsNullOrEmpty(path) || (!includeDisabled && !Config.IsEnabled(plugin)) || !plugin.CanRun)
                {
                    continue;
                }

                string script;

                try{
                    script = File.ReadAllText(path);
                }catch (Exception e) {
                    errors.Add($"{plugin.Identifier} ({Path.GetFileName(path)}): {e.Message}");
                    continue;
                }

                executor.RunScript($"plugin:{plugin}", PluginScriptGenerator.GeneratePlugin(plugin.Identifier, script, bridge.GetTokenFromPlugin(plugin), environment));
            }

            Executed?.Invoke(this, new PluginErrorEventArgs(errors));
        }