From 1562acf8ddb2a21affc5cdd999bea6d3a40f1b97 Mon Sep 17 00:00:00 2001 From: DualFroz Date: Wed, 26 Aug 2026 12:09:39 +0200 Subject: [PATCH] chore(app): scaffold Avalonia application project --- src/Vantage.App/App.axaml | 29 ++++++++++++++++++++++++ src/Vantage.App/App.axaml.cs | 36 ++++++++++++++++++++++++++++++ src/Vantage.App/Assets/.gitkeep | 0 src/Vantage.App/Program.cs | 16 +++++++++++++ src/Vantage.App/Vantage.App.csproj | 32 ++++++++++++++++++++++++++ src/Vantage.App/app.manifest | 11 +++++++++ 6 files changed, 124 insertions(+) create mode 100644 src/Vantage.App/App.axaml create mode 100644 src/Vantage.App/App.axaml.cs create mode 100644 src/Vantage.App/Assets/.gitkeep create mode 100644 src/Vantage.App/Program.cs create mode 100644 src/Vantage.App/Vantage.App.csproj create mode 100644 src/Vantage.App/app.manifest diff --git a/src/Vantage.App/App.axaml b/src/Vantage.App/App.axaml new file mode 100644 index 0000000..a71cf33 --- /dev/null +++ b/src/Vantage.App/App.axaml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/Vantage.App/App.axaml.cs b/src/Vantage.App/App.axaml.cs new file mode 100644 index 0000000..c6da8fb --- /dev/null +++ b/src/Vantage.App/App.axaml.cs @@ -0,0 +1,36 @@ +using Avalonia; +using Avalonia.Controls.ApplicationLifetimes; +using Avalonia.Markup.Xaml; +using Microsoft.Extensions.DependencyInjection; +using Vantage.App.ViewModels; +using Vantage.App.Views; + +namespace Vantage.App; + +public partial class App : Application +{ + public override void Initialize() => AvaloniaXamlLoader.Load(this); + + public override void OnFrameworkInitializationCompleted() + { + var services = new ServiceCollection(); + services.AddVantageApp(VantageAppServices.ResolveProviderMode()); + var provider = services.BuildServiceProvider(); + + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) + { + var viewModel = provider.GetRequiredService(); + desktop.MainWindow = new MainWindow { DataContext = viewModel }; + desktop.ShutdownRequested += (_, _) => viewModel.StopMonitoring(); + _ = StartAsync(viewModel); + } + + base.OnFrameworkInitializationCompleted(); + } + + private static async Task StartAsync(MainWindowViewModel viewModel) + { + await viewModel.InitializeAsync(); + viewModel.StartMonitoring(); + } +} diff --git a/src/Vantage.App/Assets/.gitkeep b/src/Vantage.App/Assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/Vantage.App/Program.cs b/src/Vantage.App/Program.cs new file mode 100644 index 0000000..d4f97b8 --- /dev/null +++ b/src/Vantage.App/Program.cs @@ -0,0 +1,16 @@ +using Avalonia; + +namespace Vantage.App; + +internal static class Program +{ + [STAThread] + public static void Main(string[] args) => BuildAvaloniaApp() + .StartWithClassicDesktopLifetime(args); + + public static AppBuilder BuildAvaloniaApp() => AppBuilder + .Configure() + .UsePlatformDetect() + .WithInterFont() + .LogToTrace(); +} diff --git a/src/Vantage.App/Vantage.App.csproj b/src/Vantage.App/Vantage.App.csproj new file mode 100644 index 0000000..529b0ee --- /dev/null +++ b/src/Vantage.App/Vantage.App.csproj @@ -0,0 +1,32 @@ + + + + WinExe + net6.0 + enable + enable + latest + true + app.manifest + true + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Vantage.App/app.manifest b/src/Vantage.App/app.manifest new file mode 100644 index 0000000..6fdbfd8 --- /dev/null +++ b/src/Vantage.App/app.manifest @@ -0,0 +1,11 @@ + + + + + + + true/pm + permonitorv2,permonitor + + +