diff --git a/OF DL.Core/Helpers/ExitHelper.cs b/OF DL.Core/Helpers/ExitHelper.cs new file mode 100644 index 0000000..146df9a --- /dev/null +++ b/OF DL.Core/Helpers/ExitHelper.cs @@ -0,0 +1,22 @@ +using OF_DL.Services; +using Serilog; + +namespace OF_DL.Helpers; + +public class ExitHelper(IDownloadEventHandler eventHandler) +{ + private readonly IDownloadEventHandler _eventHandler = eventHandler; + + public void ExitWithCode(int exitCode) + { + Console.WriteLine(); + + _eventHandler?.OnMessage($"Exiting run with Code '{exitCode}'.."); + + Log.CloseAndFlush(); + Log.CloseAndFlush(); + Task.Delay(3000).GetAwaiter().GetResult(); + + Environment.Exit(exitCode); + } +} diff --git a/OF DL/Program.cs b/OF DL/Program.cs index f43d269..6a54546 100644 --- a/OF DL/Program.cs +++ b/OF DL/Program.cs @@ -9,6 +9,7 @@ using OF_DL.Models.Entities.Users; using OF_DL.Services; using Serilog; using Spectre.Console; +using OF_DL.Helpers; namespace OF_DL; @@ -59,7 +60,7 @@ public class Program(IServiceProvider serviceProvider) AnsiConsole.MarkupLine("[red]Press any key to exit.[/]"); Log.Error("auth invalid after attempt to get auth from browser"); - Environment.Exit(2); + serviceProvider.GetRequiredService().ExitWithCode(2); } await authService.SaveToFileAsync(); @@ -85,11 +86,12 @@ public class Program(IServiceProvider serviceProvider) ServiceCollection services = new(); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(new ExitHelper(new SpectreDownloadEventHandler())); ServiceProvider tempServiceProvider = services.BuildServiceProvider(); ILoggingService loggingService = tempServiceProvider.GetRequiredService(); IConfigService configService = tempServiceProvider.GetRequiredService(); - + ExitHelper exitHelper = tempServiceProvider.GetRequiredService(); if (!await configService.LoadConfigurationAsync(args)) { @@ -100,7 +102,7 @@ public class Program(IServiceProvider serviceProvider) Console.ReadKey(); } - Environment.Exit(3); + exitHelper.ExitWithCode(3); } AnsiConsole.Markup("[green]config.conf located successfully!\n[/]"); @@ -109,6 +111,7 @@ public class Program(IServiceProvider serviceProvider) services = []; services.AddSingleton(loggingService); services.AddSingleton(configService); + services.AddSingleton(exitHelper); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); @@ -152,7 +155,7 @@ public class Program(IServiceProvider serviceProvider) Console.ReadKey(); } - Environment.Exit(1); + serviceProvider.GetRequiredService().ExitWithCode(1); } if (!startupResult.FfmpegFound) @@ -169,7 +172,7 @@ public class Program(IServiceProvider serviceProvider) "[red]Cannot locate FFmpeg; please modify config.conf with the correct path.[/]"); } - Environment.Exit(4); + serviceProvider.GetRequiredService().ExitWithCode(4); } // Auth flow @@ -220,7 +223,7 @@ public class Program(IServiceProvider serviceProvider) Console.ReadKey(); } - Environment.Exit(2); + serviceProvider.GetRequiredService().ExitWithCode(2); } } @@ -249,7 +252,7 @@ public class Program(IServiceProvider serviceProvider) Console.ReadKey(); } - Environment.Exit(5); + serviceProvider.GetRequiredService().ExitWithCode(5); } } @@ -746,7 +749,7 @@ public class Program(IServiceProvider serviceProvider) AnsiConsole.MarkupLine( "[red]You may also want to try using the browser extension which is documented here:[/]\n"); AnsiConsole.MarkupLine("[link]https://docs.ofdl.tools/config/auth/#legacy-methods[/]"); - Environment.Exit(2); + serviceProvider.GetRequiredService().ExitWithCode(2); } if (!configService.CurrentConfig.DisableBrowserAuth) @@ -775,7 +778,7 @@ public class Program(IServiceProvider serviceProvider) } } - private static void ShowAuthMissingError(bool nonInteractiveMode) + private void ShowAuthMissingError(bool nonInteractiveMode) { AnsiConsole.MarkupLine( "\n[red]auth.json is missing. The file can be generated automatically when OF-DL is run in the standard, interactive mode.[/]\n"); @@ -789,7 +792,7 @@ public class Program(IServiceProvider serviceProvider) Console.ReadKey(); } - Environment.Exit(2); + serviceProvider.GetRequiredService().ExitWithCode(2); } private static void DisplayVersionResult(VersionCheckResult result) @@ -879,7 +882,7 @@ public class Program(IServiceProvider serviceProvider) } } - private static void DisplayRulesJsonResult(StartupResult result, IConfigService configService) + private void DisplayRulesJsonResult(StartupResult result, IConfigService configService) { if (result.RulesJsonExists) { @@ -899,7 +902,7 @@ public class Program(IServiceProvider serviceProvider) Console.ReadKey(); } - Environment.Exit(2); + serviceProvider.GetRequiredService().ExitWithCode(2); } } }