From 0934b294c27744d2fad6b74fe87fc98eaf12768f Mon Sep 17 00:00:00 2001 From: mika kuns Date: Thu, 23 Apr 2026 15:03:28 +0200 Subject: [PATCH] feat(app): register UpdateCheckService and InstallerLocator in DI --- src/ClaudeDo.App/Program.cs | 14 ++++++++++++++ .../ViewModels/IslandsShellViewModel.cs | 9 ++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/ClaudeDo.App/Program.cs b/src/ClaudeDo.App/Program.cs index 26c136a..2c07966 100644 --- a/src/ClaudeDo.App/Program.cs +++ b/src/ClaudeDo.App/Program.cs @@ -1,6 +1,7 @@ using Avalonia; using ClaudeDo.Data; using ClaudeDo.Data.Git; +using ClaudeDo.Releases; using ClaudeDo.Ui; using ClaudeDo.Ui.Services; using ClaudeDo.Ui.ViewModels; @@ -9,6 +10,8 @@ using ClaudeDo.Ui.ViewModels.Modals; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using System; +using System.Net.Http; +using System.Reflection; using System.Runtime.InteropServices; namespace ClaudeDo.App; @@ -75,6 +78,17 @@ sealed class Program sc.AddSingleton(); sc.AddSingleton(sp => new WorkerClient(sp.GetRequiredService().SignalRUrl)); + // Release check + installer update + sc.AddSingleton(_ => new HttpClient { Timeout = TimeSpan.FromSeconds(10) }); + sc.AddSingleton(sp => new ReleaseClient(sp.GetRequiredService())); + sc.AddSingleton(); + sc.AddSingleton(sp => + { + var releases = sp.GetRequiredService(); + var version = Assembly.GetEntryAssembly()?.GetName().Version?.ToString() ?? "0.0.0.0"; + return new UpdateCheckService(releases, version); + }); + // ViewModels sc.AddTransient(); sc.AddTransient(); diff --git a/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs b/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs index 14d5f49..3c2c7ee 100644 --- a/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs @@ -19,6 +19,9 @@ public sealed partial class IslandsShellViewModel : ViewModelBase public bool IsOffline => !Worker.IsConnected && !Worker.IsReconnecting; + private readonly UpdateCheckService _updateCheck; + private readonly InstallerLocator _installerLocator; + [ObservableProperty] private double _windowWidth = 1280; @@ -47,9 +50,13 @@ public sealed partial class IslandsShellViewModel : ViewModelBase ListsIslandViewModel lists, TasksIslandViewModel tasks, DetailsIslandViewModel details, - WorkerClient worker) + WorkerClient worker, + UpdateCheckService updateCheck, + InstallerLocator installerLocator) { Lists = lists; Tasks = tasks; Details = details; Worker = worker; + _updateCheck = updateCheck; + _installerLocator = installerLocator; Lists.SelectionChanged += (_, _) => Tasks.LoadForList(Lists.SelectedList); Tasks.SelectionChanged += (_, _) => Details.Bind(Tasks.SelectedTask); Tasks.TasksChanged += (_, _) => _ = Lists.RefreshCountsAsync();