88 lines
2.9 KiB
C#
88 lines
2.9 KiB
C#
using System.IO;
|
|
using System.Windows.Controls;
|
|
using ClaudeDo.Installer.Core;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
using Microsoft.Win32;
|
|
|
|
namespace ClaudeDo.Installer.Pages.WelcomePage;
|
|
|
|
public partial class WelcomePageViewModel : ObservableObject, IInstallerPage
|
|
{
|
|
private readonly InstallContext _context;
|
|
private WelcomePageView? _view;
|
|
|
|
public string Title => "Welcome";
|
|
public string Icon => "\uE80F";
|
|
public int Order => 0;
|
|
public bool ShowInWizard => true;
|
|
public bool ShowInSettings => false;
|
|
public UserControl View => _view ??= new WelcomePageView { DataContext = this };
|
|
|
|
[ObservableProperty] private string _installDirectory = @"C:\Program Files\ClaudeDo";
|
|
[ObservableProperty] private string? _installError;
|
|
[ObservableProperty] private string _heading = "Install ClaudeDo";
|
|
[ObservableProperty] private string _subheading = "Set the installation directory and continue.";
|
|
[ObservableProperty] private bool _installDirEditable = true;
|
|
|
|
public WelcomePageViewModel(InstallContext context)
|
|
{
|
|
_context = context;
|
|
}
|
|
|
|
public Task LoadAsync()
|
|
{
|
|
InstallDirectory = string.IsNullOrEmpty(_context.InstallDirectory)
|
|
? @"C:\Program Files\ClaudeDo"
|
|
: _context.InstallDirectory;
|
|
|
|
switch (_context.Mode)
|
|
{
|
|
case InstallerMode.FreshInstall:
|
|
Heading = "Install ClaudeDo";
|
|
Subheading = "Choose where to install ClaudeDo, then click Next.";
|
|
InstallDirEditable = true;
|
|
break;
|
|
|
|
case InstallerMode.Update:
|
|
Heading = $"Update ClaudeDo {_context.InstalledVersion ?? "?"} -> {_context.LatestVersion ?? "?"}";
|
|
Subheading = "Your tasks, config, and database will be preserved. Click Next to continue.";
|
|
InstallDirEditable = false; // stay where we were installed
|
|
break;
|
|
|
|
default:
|
|
// Config and any future modes should never reach the wizard; guard loudly if they do.
|
|
throw new InvalidOperationException(
|
|
$"WelcomePage is not valid for installer mode {_context.Mode}");
|
|
}
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public Task ApplyAsync()
|
|
{
|
|
_context.InstallDirectory = InstallDirectory;
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public bool Validate()
|
|
{
|
|
if (string.IsNullOrWhiteSpace(InstallDirectory))
|
|
{
|
|
InstallError = "Install directory is required";
|
|
return false;
|
|
}
|
|
InstallError = null;
|
|
return true;
|
|
}
|
|
|
|
[RelayCommand]
|
|
private void BrowseInstall()
|
|
{
|
|
if (!InstallDirEditable) return;
|
|
var dialog = new OpenFolderDialog { Title = "Select installation directory" };
|
|
if (dialog.ShowDialog() == true)
|
|
InstallDirectory = dialog.FolderName;
|
|
}
|
|
}
|