- Added properties for managing container logs, including log entries, service filters, and auto-refresh options. - Introduced commands for refreshing logs, toggling auto-refresh, and closing the logs panel. - Implemented log fetching logic with error handling and status messages. - Integrated log display in the InstancesView with a dedicated logs panel. feat: Enhance navigation to Instances page with auto-selection - Added method to navigate to the Instances page and auto-select an instance based on abbreviation. feat: Update SettingsViewModel to load and save Bitwarden configuration - Integrated Bitwarden configuration loading from IOptions and saving to appsettings.json. - Added properties for Bitwarden instance project ID and connection status. - Updated UI to reflect Bitwarden settings and connection status. feat: Add advanced options for instance creation - Introduced a new expander in CreateInstanceView for advanced options, including purging stale volumes. feat: Improve InstanceDetailsWindow with pending setup banner - Added a banner to indicate pending setup for Xibo OAuth credentials, with editable fields for client ID and secret. fix: Update appsettings.json to include Bitwarden configuration structure - Added Bitwarden section to appsettings.json for storing configuration values. chore: Update Docker Compose template with health checks - Added health check configuration for web service in template.yml to ensure service availability. refactor: Drop AppSettings table from database - Removed AppSettings table and related migration files as part of database cleanup. feat: Create ServiceLogEntry DTO for log management - Added ServiceLogEntry class to represent individual log entries from Docker services.
72 lines
2.1 KiB
C#
72 lines
2.1 KiB
C#
using System.Collections.ObjectModel;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
|
|
namespace OTSSignsOrchestrator.Desktop.ViewModels;
|
|
|
|
public partial class MainWindowViewModel : ObservableObject
|
|
{
|
|
private readonly IServiceProvider _services;
|
|
|
|
[ObservableProperty]
|
|
private ObservableObject? _currentView;
|
|
|
|
[ObservableProperty]
|
|
private string _selectedNav = "Hosts";
|
|
|
|
[ObservableProperty]
|
|
private string _statusMessage = "Ready";
|
|
|
|
public ObservableCollection<string> NavItems { get; } = new()
|
|
{
|
|
"Hosts",
|
|
"Instances",
|
|
"Create Instance",
|
|
"Secrets",
|
|
"Settings",
|
|
"Logs"
|
|
};
|
|
|
|
public MainWindowViewModel(IServiceProvider services)
|
|
{
|
|
_services = services;
|
|
NavigateTo("Hosts");
|
|
}
|
|
|
|
partial void OnSelectedNavChanged(string value)
|
|
{
|
|
NavigateTo(value);
|
|
}
|
|
|
|
[RelayCommand]
|
|
private void NavigateTo(string page)
|
|
{
|
|
CurrentView = page switch
|
|
{
|
|
"Hosts" => (ObservableObject)_services.GetService(typeof(HostsViewModel))!,
|
|
"Instances" => (ObservableObject)_services.GetService(typeof(InstancesViewModel))!,
|
|
"Create Instance" => (ObservableObject)_services.GetService(typeof(CreateInstanceViewModel))!,
|
|
"Secrets" => (ObservableObject)_services.GetService(typeof(SecretsViewModel))!,
|
|
"Settings" => (ObservableObject)_services.GetService(typeof(SettingsViewModel))!,
|
|
"Logs" => (ObservableObject)_services.GetService(typeof(LogsViewModel))!,
|
|
_ => CurrentView
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// Navigates to the Instances page and auto-selects the instance with the given abbreviation
|
|
/// once the live refresh completes.
|
|
/// </summary>
|
|
public void NavigateToInstancesWithSelection(string abbrev)
|
|
{
|
|
SelectedNav = "Instances"; // triggers OnSelectedNavChanged → NavigateTo("Instances")
|
|
if (CurrentView is InstancesViewModel instancesVm)
|
|
instancesVm.SetPendingSelection(abbrev);
|
|
}
|
|
|
|
public void SetStatus(string message)
|
|
{
|
|
StatusMessage = message;
|
|
}
|
|
}
|