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;
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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();
        }
Exemple #5
0
        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);
        }