feat(ui): add worker connection help modal
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,45 @@
|
|||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using ClaudeDo.Ui.Services;
|
||||||
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
|
||||||
|
namespace ClaudeDo.Ui.ViewModels.Modals;
|
||||||
|
|
||||||
|
public sealed partial class WorkerConnectionModalViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
private readonly WorkerLocator _workerLocator;
|
||||||
|
private readonly InstallerLocator _installerLocator;
|
||||||
|
|
||||||
|
public WorkerConnectionModalViewModel(WorkerLocator workerLocator, InstallerLocator installerLocator)
|
||||||
|
{
|
||||||
|
_workerLocator = workerLocator;
|
||||||
|
_installerLocator = installerLocator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action? CloseAction { get; set; }
|
||||||
|
|
||||||
|
[RelayCommand] private void Close() => CloseAction?.Invoke();
|
||||||
|
|
||||||
|
[RelayCommand]
|
||||||
|
private void StartWorker()
|
||||||
|
{
|
||||||
|
var exe = _workerLocator.Find();
|
||||||
|
if (exe is null) return;
|
||||||
|
try { Process.Start(new ProcessStartInfo(exe) { UseShellExecute = true }); }
|
||||||
|
catch { /* nothing useful to show */ }
|
||||||
|
CloseAction?.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
[RelayCommand]
|
||||||
|
private void RerunInstaller()
|
||||||
|
{
|
||||||
|
var path = _installerLocator.Find();
|
||||||
|
if (path is null) return;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Process.Start(new ProcessStartInfo(path) { UseShellExecute = true });
|
||||||
|
Environment.Exit(0);
|
||||||
|
}
|
||||||
|
catch { /* nothing useful to show */ }
|
||||||
|
}
|
||||||
|
}
|
||||||
29
src/ClaudeDo.Ui/Views/Modals/WorkerConnectionModalView.axaml
Normal file
29
src/ClaudeDo.Ui/Views/Modals/WorkerConnectionModalView.axaml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
<Window xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||||
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
x:Class="ClaudeDo.Ui.Views.Modals.WorkerConnectionModalView"
|
||||||
|
x:DataType="vm:WorkerConnectionModalViewModel"
|
||||||
|
Title="Worker not reachable"
|
||||||
|
Width="520" Height="240"
|
||||||
|
WindowDecorations="None"
|
||||||
|
ExtendClientAreaToDecorationsHint="True"
|
||||||
|
WindowStartupLocation="CenterOwner"
|
||||||
|
Background="{DynamicResource SurfaceBrush}">
|
||||||
|
<Window.KeyBindings>
|
||||||
|
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
|
||||||
|
</Window.KeyBindings>
|
||||||
|
|
||||||
|
<ctl:ModalShell Title="WORKER NOT REACHABLE" CloseCommand="{Binding CloseCommand}">
|
||||||
|
<Grid RowDefinitions="*,Auto" Margin="20,16">
|
||||||
|
<TextBlock Grid.Row="0" Classes="meta" TextWrapping="Wrap"
|
||||||
|
Text="ClaudeDo can't reach the background worker. It is normally started automatically at logon. You can start it now, or reinstall if the problem persists."/>
|
||||||
|
<StackPanel Grid.Row="1" Orientation="Horizontal" Spacing="8"
|
||||||
|
HorizontalAlignment="Right" Margin="0,16,0,0">
|
||||||
|
<Button Classes="btn" Content="Dismiss" Command="{Binding CloseCommand}"/>
|
||||||
|
<Button Classes="btn" Content="Rerun Installer" Command="{Binding RerunInstallerCommand}"/>
|
||||||
|
<Button Classes="btn primary" Content="Start Worker" Command="{Binding StartWorkerCommand}"/>
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
</ctl:ModalShell>
|
||||||
|
</Window>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Markup.Xaml;
|
||||||
|
|
||||||
|
namespace ClaudeDo.Ui.Views.Modals;
|
||||||
|
|
||||||
|
public partial class WorkerConnectionModalView : Window
|
||||||
|
{
|
||||||
|
public WorkerConnectionModalView() => InitializeComponent();
|
||||||
|
private void InitializeComponent() => AvaloniaXamlLoader.Load(this);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user