using System.Collections.ObjectModel; using System.Windows; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; using Livia.Models.Data; using Livia.Utility; using Livia.Views.Utility; namespace Livia.ViewModels; public class SelectSeriesWindowViewModel : ObservableObject, IRecipient { public event EventHandler? OnRequestClose; public bool Loaded { get => _loaded; set => SetProperty(ref _loaded, value); } public ObservableCollection SeriesGroups { get; } = []; private bool _loaded; private readonly IServerHandler _serverHandler; private readonly IWarningSystem _warningSystem; private readonly string _key; public SelectSeriesWindowViewModel(string key, IServerHandler serverHandler, IWarningSystem warningSystem) { _serverHandler = serverHandler; _warningSystem = warningSystem; _key = key; WeakReferenceMessenger.Default.RegisterAll(this); Task.Run(LoadSeriesList); } private async Task LoadSeriesList() { List result = await _serverHandler.GetSeriesGroupList(_key).ConfigureAwait(false); List viewModels = result.Select(seriesGroup => new SeriesGroupExpanderViewModel(seriesGroup)).ToList(); Application.Current.Dispatcher.Invoke(() => { foreach (SeriesGroupExpanderViewModel viewModel in viewModels) { SeriesGroups.Add(viewModel); } }); Loaded = true; } public async Task SelectSeries() { List selectedSeries = (from seriesGroupExpanderViewModel in SeriesGroups from seriesCollectionItem in seriesGroupExpanderViewModel.SeriesCollection.Items where seriesCollectionItem.IsChecked select seriesCollectionItem.SeriesData.Uid).ToList(); (bool success, string messageIndex) = await _serverHandler.SelectSeries(_key, selectedSeries).ConfigureAwait(false); _warningSystem.ShowDialog(success ? WarningWindowKind.Info : WarningWindowKind.Warning, false, messageIndex); } public void Receive(LogoutMessage message) { OnRequestClose?.Invoke(this, EventArgs.Empty); } }