using System.Windows; using System.Windows.Input; using Livia.Utility.DependencyInjection; using Livia.Views.Utility; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; namespace Livia.Views; /// /// Interaction logic for ProgressBarDialog.xaml /// public partial class ProgressBarDialog { public CancellationToken CancellationToken => _cancellationTokenSource.Token; private readonly CancellationTokenSource _cancellationTokenSource; private readonly ILogger _logger; private readonly IWarningSystem _warningSystem; public ProgressBarDialog(bool cancelable, string? titleIndex = null) { _logger = ActivatorUtilities.GetServiceOrCreateInstance(ServiceProviderFactory.ServiceProvider); _warningSystem = ActivatorUtilities.GetServiceOrCreateInstance(ServiceProviderFactory.ServiceProvider); InitializeComponent(); _cancellationTokenSource = new CancellationTokenSource(); if (!cancelable) CancelButton.Visibility = Visibility.Collapsed; if (titleIndex == null) return; TitleText.Text = (string)(Application.Current.TryFindResource(titleIndex) ?? Application.Current.TryFindResource("Error") ?? ""); } public Task SetTask(Task task) { return Task.Run(() => RunTask(task), CancellationToken); } private async Task RunTask(Task task) { await task.ConfigureAwait(false); Application.Current.Dispatcher.Invoke(Close); } private void CancelButtonClick(object sender, RoutedEventArgs e) { bool confirm = _warningSystem.ShowDialog(WarningWindowKind.Confirmation, true, "ConfirmCancelWarning") ?? false; if (!confirm) return; _cancellationTokenSource.Cancel(); Close(); } private void TitleBarMouseLeftButtonDown(object sender, MouseEventArgs e) { try { DragMove(); } catch (Exception exception) { _logger.LogError(exception, "Error dragging window, sender = {sender}, event = {event}", sender, e); } } }