Async core refactor

This commit is contained in:
2022-01-20 18:16:01 +01:00
parent 016100a565
commit 215503a4e3
33 changed files with 761 additions and 463 deletions

View File

@@ -15,63 +15,83 @@ namespace FileTime.ConsoleUI
public class Program
{
static ILogger<Program>? _logger;
static Thread? _renderThread;
public static void Main()
public static async Task Main()
{
var serviceProvider = CreateServiceProvider();
_logger = serviceProvider.GetService<ILogger<Program>>()!;
var coloredConsoleRenderer = serviceProvider.GetService<IColoredConsoleRenderer>()!;
var localContentProvider = serviceProvider.GetService<LocalContentProvider>()!;
var renderSynchronizer = serviceProvider.GetService<RenderSynchronizer>()!;
var currentPath = Environment.CurrentDirectory.Replace(Path.DirectorySeparatorChar, Constants.SeparatorChar);
_logger.LogInformation("Current directory: '{0}'", currentPath);
var currentPossibleDirectory = localContentProvider.GetByPath(currentPath);
var currentPossibleDirectory = await localContentProvider.GetByPath(currentPath);
if (currentPossibleDirectory is IContainer container)
{
serviceProvider.GetService<TopContainer>();
coloredConsoleRenderer.Clear();
Console.CursorVisible = false;
try
{
Console.CursorVisible = false;
}
catch { }
var app = serviceProvider.GetService<Application>()!;
app.SetContainer(container);
app.PrintUI();
await app.SetContainer(container);
renderSynchronizer.NeedsReRender();
_renderThread = new Thread(new ThreadStart(renderSynchronizer.Start));
_renderThread.Start();
while (app.IsRunning)
{
if (app.ProcessKey(Console.ReadKey(true)))
if (await app.ProcessKey(Console.ReadKey(true)))
{
app.PrintUI();
renderSynchronizer.NeedsReRender();
}
}
renderSynchronizer.NeedsReRender();
Console.SetCursorPosition(0, Console.WindowHeight - 1);
Console.CursorVisible = true;
}
else
{
Console.WriteLine("Current working directory is not a directory???");
Console.WriteLine("Current working directory is not a directory??? Possible directory's type is: '" + currentPossibleDirectory?.GetType() + "'");
Thread.Sleep(100);
}
}
private static bool IsAnsiColorSupported()
{
Console.CursorLeft = 0;
Console.CursorTop = 0;
try
{
Console.CursorLeft = 0;
Console.CursorTop = 0;
Console.Write("\u001b[0ma");
Console.Write("\u001b[0ma");
return Console.CursorLeft == 1 && Console.CursorTop == 0;
return Console.CursorLeft == 1 && Console.CursorTop == 0;
}
catch
{
return false;
}
}
private static ServiceProvider CreateServiceProvider()
{
return DependencyInjection.RegisterDefaultServices()
.AddLogging(/* (builder) => builder.AddConsole().AddDebug() */)
//.AddLogging()
.AddLogging((builder) => builder.AddConsole().AddDebug())
.AddSingleton<Application>()
.AddSingleton<RenderSynchronizer>()
.AddSingleton<IStyles>(new Styles(IsAnsiColorSupported()))
.AddSingleton<IColoredConsoleRenderer, ColoredConsoleRenderer>()
.AddSingleton<ConsoleReader>()