dont boot twice the app

This commit is contained in:
Paul Schneider 2026-08-29 02:41:59 +01:00
commit 5d1649df80
Signed by: notazof
GPG key ID: 1DD5D838E5343B06
3 changed files with 42 additions and 31 deletions

49
.vscode/settings.json vendored
View file

@ -2,30 +2,31 @@
"dotnet-test-explorer.testProjectPath": "test/**/*Tests.csproj",
"cSpell.words": [
"appsettings",
"asciidoctor",
"ASPNETCORE",
"Avalonia",
"Configurabilité",
"Cratie",
"DESTDIR",
"dotnet",
"DOTNET",
"ecdsa",
"envsubst",
"Forgejo",
"Hsts",
"Newtonsoft",
"Npgsql",
"Oidc",
"PKCE",
"postit",
"pschneider",
"SLNDIR",
"validable",
"www-data",
"yavsc",
"Yavsc"
"appsettings",
"asciidoctor",
"ASPNETCORE",
"Avalonia",
"blogspot",
"Configurabilité",
"Cratie",
"DESTDIR",
"dotnet",
"DOTNET",
"ecdsa",
"envsubst",
"Forgejo",
"Hsts",
"Newtonsoft",
"Npgsql",
"Oidc",
"PKCE",
"postit",
"pschneider",
"SLNDIR",
"validable",
"www-data",
"yavsc",
"Yavsc"
],
"cSpell.reportUnknownWords": true,
"cSpell.language": "fr,en",

View file

@ -1,4 +1,5 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Avalonia;
using Avalonia.Controls;
@ -15,6 +16,8 @@ namespace PostIt;
public partial class App : Application
{
private int _bootStarted;
/// <summary>
/// DI container the platform entry points hand to ViewModels so
/// they can resolve the canonical <see cref="Settings"/> singleton
@ -45,8 +48,6 @@ public partial class App : Application
{
var window = ServiceProvider.GetRequiredService<MainWindow>();
desktop.MainWindow = window;
var api = ServiceProvider!.GetRequiredService<YavscApiClient>();
desktop.MainWindow.Opened += async (_, _) => await BootAsync(this.ServiceProvider!, api);
View = window.MainView;
this.ConfigureRootView(window.MainView);
@ -75,10 +76,8 @@ public partial class App : Application
private void ConfigureRootView(MainView rootView)
{
var api = ServiceProvider!.GetRequiredService<YavscApiClient>();
// Déclencher le Boot lors du chargement du contrôle à l'écran
rootView.AttachedToVisualTree += async (_, _) => await BootAsync(this.ServiceProvider!, api);
// Déclencher le Boot une seule fois lors du chargement du contrôle à l'écran.
rootView.AttachedToVisualTree += async (_, _) => await BootOnceAsync();
var sessionStatus = ServiceProvider!.GetRequiredService<SessionStatusViewModel>();
sessionStatus.LogoutCompleted += () =>
@ -95,6 +94,17 @@ private void ConfigureRootView(MainView rootView)
rootView.SessionBanner.DataContext = sessionStatus;
}
private async Task BootOnceAsync()
{
if (Interlocked.Exchange(ref _bootStarted, 1) == 1)
{
return;
}
var api = ServiceProvider!.GetRequiredService<YavscApiClient>();
await BootAsync(this.ServiceProvider!, api);
}
/// <summary>
/// Test-only hook: bind a concrete <see cref="MainView"/> so
/// command-driven navigation paths (<see cref="PushPage"/>) can

View file

@ -33,7 +33,7 @@ namespace Yavsc.Api.Client;
/// </summary>
public sealed class BlogApiClient
{
private const string DefaultPathPrefix = "blog";
private const string DefaultPathPrefix = "blogspot";
private readonly IYavscApiClient _api;
private readonly Uri _baseAddress;