public PluginCompilationEngine( [NotNull] IStrategiesSourceRepository pluginSourceRepository, [NotNull] ICodeEditorService codeEditor, [NotNull] IPluginCompiler pluginCompiler, [NotNull] IPluginLocator pluginLocator) { if (pluginSourceRepository == null) { throw new ArgumentNullException(nameof(pluginSourceRepository)); } if (codeEditor == null) { throw new ArgumentNullException(nameof(codeEditor)); } if (pluginCompiler == null) { throw new ArgumentNullException(nameof(pluginCompiler)); } if (pluginLocator == null) { throw new ArgumentNullException(nameof(pluginLocator)); } _pluginSourceRepository = pluginSourceRepository; _codeEditor = codeEditor; _pluginCompiler = pluginCompiler; _pluginLocator = pluginLocator; }
private List <PluginWrapper> UpdateSinglePlugin( SinglePluginUpdateSettings plugin, PluginSourceDownloader pluginSourceDownloader, PluginFilter pluginFilter, IPluginCompiler pluginCompiler, string rootDirectory, PluginLoader pluginLoader ) { pluginSourceDownloader.Update(plugin); var sourcePluginDirectory = new DirectoryInfo(Path.Combine(SourcePluginsDirectory, plugin.Name?.Value)); var compiledPluginDirectory = new DirectoryInfo(Path.Combine(CompiledPluginsDirectory, plugin.Name?.Value)); if (!pluginFilter.ShouldCompilePlugin(sourcePluginDirectory, compiledPluginDirectory)) { return(null); } var dependencyTasks = PluginCopyFiles.CopyDependencies(sourcePluginDirectory, compiledPluginDirectory); var settingsTasks = PluginCopyFiles.CopySettings(sourcePluginDirectory, compiledPluginDirectory); var staticFilesTasks = PluginCopyFiles.CopyStaticFiles(sourcePluginDirectory, compiledPluginDirectory); /*var txtJsonFilesTask = PluginCopyFiles.CopyTxtAndJsonFromRoot(sourcePluginDirectory, compiledPluginDirectory);*/ if (dependencyTasks != null) { Task.WaitAll(dependencyTasks.ToArray()); } var csProjFiles = sourcePluginDirectory .GetFiles("*.csproj", SearchOption.AllDirectories) .Where(f => f.Extension == ".csproj"); foreach (var csProjFile in csProjFiles) { pluginCompiler.CompilePlugin( csProjFile, compiledPluginDirectory.FullName, new DirectoryInfo(rootDirectory) ); } if (settingsTasks != null) { Task.WaitAll(settingsTasks.ToArray()); } if (staticFilesTasks != null) { Task.WaitAll(staticFilesTasks.ToArray()); } /*txtJsonFilesTask.Wait();*/ var pluginWrapper = pluginLoader.Load(compiledPluginDirectory); return(pluginWrapper); }
public PluginManager(IPluginCompiler PluginCompiler, IPluginLoader PluginLoader, IAssetManager AssetManager) { this.PluginCompiler = PluginCompiler; this.PluginLoader = PluginLoader; this.AssetManager = AssetManager; AssetManager.AssetCreated += AddPathToList; AssetManager.AssetUpdated += AddPathToList; AssetManager.AssetDeleted += AddPathToList; AssetManager.RefreshFinished += OnAssetRefreshFinished; PluginCompiler.ScriptsRecompiled += OnScriptsRecompiled; AddReferencesForCompilerParameter(); }
private List <PluginWrapper> UpdateSinglePlugin( SinglePluginUpdateSettings plugin, PluginSourceDownloader pluginSourceDownloader, PluginFilter pluginFilter, IPluginCompiler pluginCompiler, string rootDirectory, PluginLoader pluginLoader ) { var sourcePluginDirectory = new DirectoryInfo(Path.Combine(SourcePluginsDirectory, plugin.Name?.Value)); var compiledPluginDirectory = new DirectoryInfo(Path.Combine(CompiledPluginsDirectory, plugin.Name?.Value)); try { pluginSourceDownloader.Update(plugin); if (!pluginFilter.ShouldCompilePlugin(sourcePluginDirectory, compiledPluginDirectory)) { return(null); } var dependencyTasks = PluginCopyFiles.CopyDependencies(sourcePluginDirectory, compiledPluginDirectory); var settingsTasks = PluginCopyFiles.CopySettings(sourcePluginDirectory, compiledPluginDirectory); var staticFilesTasks = PluginCopyFiles.CopyStaticFiles(sourcePluginDirectory, compiledPluginDirectory); var txtJsonFilesTask = PluginCopyFiles.CopyTxtAndJsonFromRoot(sourcePluginDirectory, compiledPluginDirectory); var txtJsonDefaultFilesTask = PluginCopyFiles.CopyTxtAndJsonDefaultFiles(sourcePluginDirectory, compiledPluginDirectory); if (dependencyTasks != null) { Task.WaitAll(dependencyTasks.ToArray()); } var csProjFiles = sourcePluginDirectory .GetFiles("*.csproj", SearchOption.AllDirectories) .Where(f => f.Extension == ".csproj"); foreach (var csProjFile in csProjFiles) { pluginCompiler.CompilePlugin( csProjFile, compiledPluginDirectory.FullName, new DirectoryInfo(rootDirectory) ); } var remainingTasks = new List <Task>(); remainingTasks.AddRange(settingsTasks); remainingTasks.AddRange(staticFilesTasks); remainingTasks.AddRange(txtJsonFilesTask); remainingTasks.AddRange(txtJsonDefaultFilesTask); if (remainingTasks != null) { Task.WaitAll(remainingTasks.ToArray()); } } catch (Exception e) { DebugWindow.LogError($"PluginUpdater -> UpdateSinglePlugin \"{plugin.Name?.Value}\" failed."); DebugWindow.LogError($"PluginUpdater -> {e}"); } var pluginWrapper = pluginLoader.Load(compiledPluginDirectory); return(pluginWrapper); }