chore(claude-do): [A3] Settings + Update-Check: OperationStatus für Skill-Inst
Vorgaben: `docs/superpowers/plans/2026-08-11-operation-feedback.md`, Gruppe A, Entwurf A3. P0-1 ist gemergt: `src/ClaudeDo.Ui/Services/OperationStatus.cs` + `src/ClaudeDo.Ui/Views/Controls/OperationIndicator.axaml`. SCOPE-ÄNDERUNG (Nutzer, 2026-08-12): OnlineInbox Sign-In/Sign-Out ist AUS DEM SCOPE GENOMMEN — vorerst unwichtig. `ViewModels/Modals/Settings/OnlineInboxSettingsViewModel.cs` und die ClaudeDo-Task: 2356806f-f16e-4652-b615-4562e95c3a65
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using ClaudeDo.Releases;
|
||||
using ClaudeDo.Ui.Localization;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
|
||||
namespace ClaudeDo.Ui.Services;
|
||||
@@ -15,10 +16,11 @@ public sealed partial class UpdateCheckService : ObservableObject
|
||||
{
|
||||
private readonly IReleaseClient _releases;
|
||||
|
||||
public OperationStatus Op { get; } = new();
|
||||
|
||||
[ObservableProperty] private bool _isUpdateAvailable;
|
||||
[ObservableProperty] private string? _latestVersion;
|
||||
[ObservableProperty] private string _currentVersion;
|
||||
[ObservableProperty] private bool _isChecking;
|
||||
[ObservableProperty] private UpdateCheckStatus _lastCheckStatus = UpdateCheckStatus.NeverChecked;
|
||||
|
||||
public UpdateCheckService(IReleaseClient releases, string currentVersion)
|
||||
@@ -29,45 +31,39 @@ public sealed partial class UpdateCheckService : ObservableObject
|
||||
|
||||
public async Task CheckNowAsync(CancellationToken ct)
|
||||
{
|
||||
IsChecking = true;
|
||||
using var op = Op.Begin(Loc.T("ops.updateCheck.checking"));
|
||||
|
||||
GiteaRelease? rel;
|
||||
try
|
||||
{
|
||||
GiteaRelease? rel;
|
||||
try
|
||||
{
|
||||
rel = await _releases.GetLatestReleaseAsync(ct);
|
||||
}
|
||||
catch
|
||||
{
|
||||
LastCheckStatus = UpdateCheckStatus.CheckFailed;
|
||||
IsUpdateAvailable = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (rel is null)
|
||||
{
|
||||
LastCheckStatus = UpdateCheckStatus.CheckFailed;
|
||||
IsUpdateAvailable = false;
|
||||
return;
|
||||
}
|
||||
|
||||
var latest = (rel.TagName ?? "").TrimStart('v', 'V');
|
||||
var cmp = VersionComparer.Compare(latest, CurrentVersion);
|
||||
if (cmp.IsNewer)
|
||||
{
|
||||
LatestVersion = latest;
|
||||
IsUpdateAvailable = true;
|
||||
LastCheckStatus = UpdateCheckStatus.UpdateAvailable;
|
||||
}
|
||||
else
|
||||
{
|
||||
IsUpdateAvailable = false;
|
||||
LastCheckStatus = UpdateCheckStatus.UpToDate;
|
||||
}
|
||||
rel = await _releases.GetLatestReleaseAsync(ct);
|
||||
}
|
||||
finally
|
||||
catch
|
||||
{
|
||||
IsChecking = false;
|
||||
LastCheckStatus = UpdateCheckStatus.CheckFailed;
|
||||
IsUpdateAvailable = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (rel is null)
|
||||
{
|
||||
LastCheckStatus = UpdateCheckStatus.CheckFailed;
|
||||
IsUpdateAvailable = false;
|
||||
return;
|
||||
}
|
||||
|
||||
var latest = (rel.TagName ?? "").TrimStart('v', 'V');
|
||||
var cmp = VersionComparer.Compare(latest, CurrentVersion);
|
||||
if (cmp.IsNewer)
|
||||
{
|
||||
LatestVersion = latest;
|
||||
IsUpdateAvailable = true;
|
||||
LastCheckStatus = UpdateCheckStatus.UpdateAvailable;
|
||||
}
|
||||
else
|
||||
{
|
||||
IsUpdateAvailable = false;
|
||||
LastCheckStatus = UpdateCheckStatus.UpToDate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user