Finished Project Editor.

Builder now supports parallel building.
This commit is contained in:
Creeper Lv
2026-01-13 03:33:49 +11:00
parent f4b43abc08
commit 04e67074d2
16 changed files with 290 additions and 92 deletions

View File

@@ -1,6 +1,7 @@
using Newtonsoft.Json;
using Progrart.Core.JSExecution;
using Progrart.Core.Storage;
using System.Diagnostics;
namespace Progrart.Core.ProjectSystem
{
@@ -24,8 +25,6 @@ namespace Progrart.Core.ProjectSystem
}
public async Task Execute(BuildConfiguration config, BuildItem item)
{
//FileInfo src = new FileInfo(Path.Combine(basePath, item.Source));
//FileInfo tgt = new FileInfo(Path.Combine(basePath, project.OutputDir, item.Target ?? item.Source + ".png"));
var args = project.Arguments.Clone();
args.MergeFrom(config.Arguments);
args.MergeFrom(item.Arguments);
@@ -41,23 +40,47 @@ namespace Progrart.Core.ProjectSystem
img.DrawingCore.ToData().SaveTo(img_stream);
img_stream.Flush();
}
public async Task Build(string targetConfig)
public async Task Build(string targetConfig, bool isParallel = false)
{
foreach (var config in project.Configurations)
{
Console.WriteLine(config.Name);
if (config.Name == targetConfig)
{
int index = 0;
List<Task> tasks = new List<Task>();
foreach (var item in config.Items)
{
await Execute(config, item);
index++;
OnProgressUpdate?.Invoke(config.Items.Count, index);
if (!isParallel)
{
await Execute(config, item);
index++;
OnProgressUpdate?.Invoke(config.Items.Count, index);
}
else
{
var t = Task.Run(async () =>
{
index++;
int i = index;
await Execute(config, item);
OnProgressUpdate?.Invoke(config.Items.Count, i);
});
tasks.Add(t);
}
}
if (isParallel)
{
await Task.WhenAll(tasks);
}
OnCompleted?.Invoke();
return;
}
}
throw new Exception($"Configuration \"{targetConfig}\" not found!");
}
}
}