using System.Collections.ObjectModel; using System.ServiceProcess; using System.Windows.Input; using SpdUp.Core; using SpdUp.Models; using SpdUp.Services; namespace SpdUp.ViewModels; /// /// Service Manager ViewModel. /// public sealed class ServiceManagerViewModel : ObservableObject { private readonly AppSettings _settings; public ObservableCollection Services { get; } = new(); private ServiceEntry? _selectedService; public ServiceEntry? SelectedService { get => _selectedService; set => SetProperty(ref _selectedService, value); } public ICommand RefreshCommand { get; } public ICommand StopServiceCommand { get; } public ICommand StartServiceCommand { get; } public ServiceManagerViewModel(AppSettings settings) { _settings = settings; RefreshCommand = new RelayCommand(Refresh); StopServiceCommand = new RelayCommand(StopSelected, () => SelectedService is not null); StartServiceCommand = new RelayCommand(StartSelected, () => SelectedService is not null); Refresh(); } private void Refresh() { Services.Clear(); // Show the configured services plus all known non-critical ones var names = new HashSet(_settings.ServicesToStop, StringComparer.OrdinalIgnoreCase); foreach (var k in ServiceManagementService.KnownNonCriticalServices.Keys) names.Add(k); foreach (var entry in ServiceManagementService.GetServiceList(names)) Services.Add(entry); } private void StopSelected() { if (SelectedService is null) return; ServiceManagementService.StopService(SelectedService.ServiceName); Refresh(); } private void StartSelected() { if (SelectedService is null) return; ServiceManagementService.StartService(SelectedService.ServiceName); Refresh(); } }