60 lines
2.3 KiB
C#
60 lines
2.3 KiB
C#
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<LogoutMessage>
|
|
{
|
|
public event EventHandler? OnRequestClose;
|
|
public bool Loaded { get => _loaded; set => SetProperty(ref _loaded, value); }
|
|
public ObservableCollection<SeriesGroupExpanderViewModel> 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<SeriesGroup> result = await _serverHandler.GetSeriesGroupList(_key).ConfigureAwait(false);
|
|
List<SeriesGroupExpanderViewModel> 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<string> 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);
|
|
}
|
|
} |