using EchoHub.Client; using EchoHub.Client.Config; using EchoHub.Client.Themes; using Microsoft.Extensions.Configuration; using Serilog; using Terminal.Gui.App; var appSettingsPath = Path.Combine(AppContext.BaseDirectory, "appsettings.json"); if (!File.Exists(appSettingsPath)) { using var stream = typeof(AppOrchestrator).Assembly .GetManifestResourceStream("EchoHub.Client.appsettings.example.json"); if (stream is not null) { using var file = File.Create(appSettingsPath); stream.CopyTo(file); } } var configuration = new ConfigurationBuilder() .SetBasePath(AppContext.BaseDirectory) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: false) .Build(); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .CreateLogger(); Log.Information("EchoHub client starting"); try { var config = ConfigManager.Load(); Log.Information("Configuration loaded, active theme: {Theme}", config.ActiveTheme); var app = Application.Create().Init(); var theme = ThemeManager.GetTheme(config.ActiveTheme); ThemeManager.ApplyTheme(theme); using var orchestrator = new AppOrchestrator(app, config); app.Run(orchestrator.MainWindow); app.Dispose(); } catch (Exception ex) { Log.Fatal(ex, "EchoHub client crashed"); throw; } finally { Log.Information("EchoHub client shutting down"); Log.CloseAndFlush(); }