Finished Project Editor.
Builder now supports parallel building.
This commit is contained in:
@@ -44,7 +44,15 @@ namespace Progrart.Core.JSExecution
|
||||
JsObject _obj = new JsObject(Engine);
|
||||
Engine.SetValue("math", _obj);
|
||||
Random r = new Random();
|
||||
|
||||
Engine.SetValue("def", (string k) => { return Symbols.ContainsKey(k); });
|
||||
Engine.SetValue("to_bool", (JsValue v) => { return bool.Parse(v.AsString().ToLower()); });
|
||||
Engine.SetValue("to_float", (JsValue v) => { return float.Parse(v.AsString().ToLower()); });
|
||||
Engine.SetValue("to_int", (JsValue v) => { return int.Parse(v.AsString().ToLower()); });
|
||||
Engine.SetValue("query", (string k, string fallback) =>
|
||||
{
|
||||
if (Symbols.TryGetValue(k, out var val)) return val;
|
||||
return fallback;
|
||||
});
|
||||
_obj.Set("random", JsObject.FromObject(Engine, new Func<double>(() =>
|
||||
{
|
||||
return r.NextDouble();
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace Progrart.Core.JSExecution
|
||||
engine.Engine.SetValue("visual_root", visual_root);
|
||||
engine.Engine.SetValue("line", line);
|
||||
engine.Engine.SetValue("rectangle", rectangle);
|
||||
engine.Engine.SetValue("rectangle", rectangle);
|
||||
engine.Engine.SetValue("roundrect", roundrect);
|
||||
engine.Engine.SetValue("oval", oval);
|
||||
engine.Engine.SetValue("triangle", triangle);
|
||||
engine.Engine.SetValue("path", path);
|
||||
|
||||
@@ -37,7 +37,6 @@ namespace Progrart.Core
|
||||
{
|
||||
Width = W;
|
||||
Height = H;
|
||||
Trace.WriteLine($"Createing Surface as: {W} x {H}");
|
||||
info = new SKImageInfo(W, H);
|
||||
surface = SKSurface.Create(info);
|
||||
canvas = surface.Canvas;
|
||||
|
||||
@@ -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!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,36 +1,43 @@
|
||||
namespace Progrart.Core.Storage
|
||||
{
|
||||
public class ClassicStorageProvider : IStorageProvider
|
||||
{
|
||||
public DirectoryInfo BaseDirectory;
|
||||
public class ClassicStorageProvider : IStorageProvider
|
||||
{
|
||||
public DirectoryInfo BaseDirectory;
|
||||
|
||||
public ClassicStorageProvider(DirectoryInfo baseDirectory)
|
||||
{
|
||||
BaseDirectory = baseDirectory;
|
||||
}
|
||||
public ClassicStorageProvider(DirectoryInfo baseDirectory)
|
||||
{
|
||||
BaseDirectory = baseDirectory;
|
||||
}
|
||||
|
||||
public async Task<Stream?> TryOpenRead(string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
public async Task<Stream?> TryOpenRead(string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
return File.OpenRead(Path.Combine(BaseDirectory.FullName, path));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<Stream?> TryOpenWrite(string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
return File.OpenWrite(Path.Combine(BaseDirectory.FullName, path));
|
||||
}
|
||||
catch (Exception)
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<Stream?> TryOpenWrite(string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
FileInfo fi = new FileInfo(Path.Combine(BaseDirectory.FullName, path));
|
||||
var di = fi.Directory;
|
||||
if (di is not null)
|
||||
{
|
||||
if (!di.Exists)
|
||||
di.Create();
|
||||
}
|
||||
return File.OpenWrite(Path.Combine(BaseDirectory.FullName, path));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user