68 lines
2.7 KiB
C#
68 lines
2.7 KiB
C#
// Program.cs - Linux platform entry point
|
|
|
|
using Microsoft.Maui.Platform.Linux;
|
|
|
|
namespace TodoApp;
|
|
|
|
class Program
|
|
{
|
|
static void Main(string[] args)
|
|
{
|
|
// Redirect console output to a log file for debugging
|
|
var logPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "todoapp.log");
|
|
using var logWriter = new StreamWriter(logPath, append: false) { AutoFlush = true };
|
|
var multiWriter = new MultiTextWriter(Console.Out, logWriter);
|
|
Console.SetOut(multiWriter);
|
|
Console.SetError(multiWriter);
|
|
|
|
// Global exception handler
|
|
AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
|
|
{
|
|
var ex = e.ExceptionObject as Exception;
|
|
Console.WriteLine($"[FATAL] Unhandled exception: {ex?.GetType().Name}: {ex?.Message}");
|
|
Console.WriteLine($"[FATAL] Stack trace: {ex?.StackTrace}");
|
|
if (ex?.InnerException != null)
|
|
{
|
|
Console.WriteLine($"[FATAL] Inner exception: {ex.InnerException.GetType().Name}: {ex.InnerException.Message}");
|
|
Console.WriteLine($"[FATAL] Inner stack trace: {ex.InnerException.StackTrace}");
|
|
}
|
|
};
|
|
|
|
TaskScheduler.UnobservedTaskException += (sender, e) =>
|
|
{
|
|
Console.WriteLine($"[FATAL] Unobserved task exception: {e.Exception?.GetType().Name}: {e.Exception?.Message}");
|
|
Console.WriteLine($"[FATAL] Stack trace: {e.Exception?.StackTrace}");
|
|
e.SetObserved(); // Prevent crash
|
|
};
|
|
|
|
Console.WriteLine($"[Program] Starting TodoApp at {DateTime.Now}");
|
|
Console.WriteLine($"[Program] Log file: {logPath}");
|
|
|
|
try
|
|
{
|
|
// Create the MAUI app with all handlers registered
|
|
var app = MauiProgram.CreateMauiApp();
|
|
|
|
// Run on Linux platform
|
|
LinuxApplication.Run(app, args);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"[FATAL] Exception in Main: {ex.GetType().Name}: {ex.Message}");
|
|
Console.WriteLine($"[FATAL] Stack trace: {ex.StackTrace}");
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Helper to write to both console and file
|
|
class MultiTextWriter : TextWriter
|
|
{
|
|
private readonly TextWriter[] _writers;
|
|
public MultiTextWriter(params TextWriter[] writers) => _writers = writers;
|
|
public override System.Text.Encoding Encoding => System.Text.Encoding.UTF8;
|
|
public override void Write(char value) { foreach (var w in _writers) w.Write(value); }
|
|
public override void WriteLine(string? value) { foreach (var w in _writers) w.WriteLine(value); }
|
|
public override void Flush() { foreach (var w in _writers) w.Flush(); }
|
|
}
|