53 lines
1.6 KiB
C#
53 lines
1.6 KiB
C#
using System;
|
|
using Avalonia;
|
|
using Avalonia.Controls;
|
|
using Avalonia.Controls.ApplicationLifetimes;
|
|
using Avalonia.Markup.Xaml;
|
|
using ClaudeDo.Ui.Services;
|
|
using ClaudeDo.Ui.ViewModels;
|
|
using ClaudeDo.Ui.Views;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace ClaudeDo.App;
|
|
|
|
public partial class App : Application
|
|
{
|
|
private readonly IServiceProvider? _services;
|
|
|
|
// Parameterless ctor is required by the XAML previewer / designer.
|
|
public App() { }
|
|
|
|
public App(IServiceProvider services) => _services = services;
|
|
|
|
public override void Initialize()
|
|
{
|
|
AvaloniaXamlLoader.Load(this);
|
|
}
|
|
|
|
public override void OnFrameworkInitializationCompleted()
|
|
{
|
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
|
{
|
|
var services = _services
|
|
?? throw new InvalidOperationException("App was constructed without a service provider.");
|
|
|
|
FocusClearing.Install();
|
|
|
|
// The main window is authoritative — closing it shuts the app down even if the
|
|
// modeless Mission Control window is still open.
|
|
desktop.ShutdownMode = ShutdownMode.OnMainWindowClose;
|
|
|
|
desktop.MainWindow = new MainWindow
|
|
{
|
|
DataContext = services.GetRequiredService<IslandsShellViewModel>(),
|
|
};
|
|
|
|
// Kick off the SignalR retry loop — reconnects indefinitely if the worker
|
|
// is not up yet, or goes down and comes back.
|
|
_ = services.GetRequiredService<WorkerClient>().StartAsync();
|
|
}
|
|
|
|
base.OnFrameworkInitializationCompleted();
|
|
}
|
|
}
|