using System.Net.Http;
using Marechai.App.Presentation.ViewModels;
using Marechai.App.Presentation.Views;
using Marechai.App.Services;
using Marechai.App.Services.Caching;
using Microsoft.UI.Xaml;
using Uno.Extensions;
using Uno.Extensions.Configuration;
using Uno.Extensions.Hosting;
using Uno.Extensions.Http;
using Uno.Extensions.Localization;
using Uno.Extensions.Navigation;
using Uno.UI;
using CompanyDetailViewModel = Marechai.App.Presentation.ViewModels.CompanyDetailViewModel;
using ComputersListViewModel = Marechai.App.Presentation.ViewModels.ComputersListViewModel;
using ComputersViewModel = Marechai.App.Presentation.ViewModels.ComputersViewModel;
using GpuDetailViewModel = Marechai.App.Presentation.ViewModels.GpuDetailViewModel;
using GpuListViewModel = Marechai.App.Presentation.ViewModels.GpusListViewModel;
using MachineViewViewModel = Marechai.App.Presentation.ViewModels.MachineViewViewModel;
using MainViewModel = Marechai.App.Presentation.ViewModels.MainViewModel;
using NewsViewModel = Marechai.App.Presentation.ViewModels.NewsViewModel;
using PhotoDetailViewModel = Marechai.App.Presentation.ViewModels.PhotoDetailViewModel;
using ProcessorDetailViewModel = Marechai.App.Presentation.ViewModels.ProcessorDetailViewModel;
using ProcessorsListViewModel = Marechai.App.Presentation.ViewModels.ProcessorsListViewModel;
namespace Marechai.App;
public partial class App : Application
{
///
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
///
public App()
{
InitializeComponent();
}
protected Window? MainWindow { get; private set; }
public IHost? Host { get; private set; }
protected override async void OnLaunched(LaunchActivatedEventArgs args)
{
IApplicationBuilder builder = this.CreateBuilder(args)
// Add navigation support for toolkit controls such as TabBar and NavigationView
.UseToolkitNavigation()
.Configure(host => host
#if DEBUG
// Switch to Development environment when running in DEBUG
.UseEnvironment(Environments.Development)
#endif
.UseLogging((context, logBuilder) =>
{
// Configure log levels for different categories of logging
logBuilder
.SetMinimumLevel(context
.HostingEnvironment
.IsDevelopment()
? LogLevel.Information
: LogLevel.Warning)
// Default filters for core Uno Platform namespaces
.CoreLogLevel(LogLevel.Warning);
// Uno Platform namespace filter groups
// Uncomment individual methods to see more detailed logging
//// Generic Xaml events
//logBuilder.XamlLogLevel(LogLevel.Debug);
//// Layout specific messages
//logBuilder.XamlLayoutLogLevel(LogLevel.Debug);
//// Storage messages
//logBuilder.StorageLogLevel(LogLevel.Debug);
//// Binding related messages
//logBuilder.XamlBindingLogLevel(LogLevel.Debug);
//// Binder memory references tracking
//logBuilder.BinderMemoryReferenceLogLevel(LogLevel.Debug);
//// DevServer and HotReload related
//logBuilder.HotReloadCoreLogLevel(LogLevel.Information);
//// Debug JS interop
//logBuilder.WebAssemblyLogLevel(LogLevel.Debug);
},
true)
.UseSerilog(true, true)
.UseConfiguration(configure: configBuilder =>
configBuilder.EmbeddedSource()
.Section())
// Enable localization (see appsettings.json for supported languages)
.UseLocalization()
.UseHttp((context, services) =>
{
#if DEBUG
// DelegatingHandler will be automatically injected
services
.AddTransient();
#endif
services.AddKiotaClientV2(context,
new EndpointOptions
{
Url = context.Configuration
.GetSection("ApiClient:Url")
.Value ??
// Fallback to a default URL if not configured
"https://localhost:5023"
});
})
.ConfigureServices((context, services) =>
{
// Register application services
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddTransient();
services
.AddSingleton();
services
.AddSingleton();
services.AddTransient();
services.AddTransient();
services.AddTransient();
services.AddTransient();
services.AddTransient();
services.AddTransient();
})
.UseNavigation(RegisterRoutes));
MainWindow = builder.Window;
#if DEBUG
MainWindow.UseStudio();
#endif
MainWindow.SetWindowIcon();
Host = await builder.NavigateAsync();
}
private static void RegisterRoutes(IViewRegistry views, IRouteRegistry routes)
{
views.Register(new ViewMap(ViewModel: typeof(ShellViewModel)),
new ViewMap(),
new ViewMap(),
new ViewMap(),
new ViewMap(),
new ViewMap(),
new ViewMap(),
new ViewMap(),
new ViewMap(),
new ViewMap(),
new ViewMap(),
new ViewMap(),
new ViewMap(),
new ViewMap(),
new ViewMap(),
new DataViewMap());
routes.Register(new RouteMap("",
views.FindByViewModel(),
Nested:
[
new RouteMap("Main",
views.FindByViewModel(),
true,
Nested:
[
new RouteMap("News",
views.FindByViewModel(),
true),
new RouteMap("computers",
views.FindByViewModel(),
Nested:
[
new RouteMap("list-computers",
views.FindByViewModel<
ComputersListViewModel>()),
new RouteMap("view",
views.FindByViewModel<
MachineViewViewModel>())
]),
new RouteMap("consoles",
views.FindByViewModel(),
Nested:
[
new RouteMap("list-consoles",
views.FindByViewModel<
ConsolesListViewModel>())
]),
new RouteMap("companies",
views.FindByViewModel(),
Nested:
[
new RouteMap("company-details",
views.FindByViewModel<
CompanyDetailViewModel>())
]),
new RouteMap("gpus",
views.FindByViewModel(),
Nested:
[
new RouteMap("gpu-details",
views.FindByViewModel<
GpuDetailViewModel>())
]),
new RouteMap("processors",
views.FindByViewModel(),
Nested:
[
new RouteMap("processor-details",
views.FindByViewModel<
ProcessorDetailViewModel>())
]),
new RouteMap("Second",
views.FindByViewModel())
])
]));
}
}