livia-test/Livia/Views/ProgressBarDialog.xaml.cs
2025-03-28 14:31:53 +08:00

67 lines
2.1 KiB
C#

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;
/// <summary>
/// Interaction logic for ProgressBarDialog.xaml
/// </summary>
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<ILogger>(ServiceProviderFactory.ServiceProvider);
_warningSystem = ActivatorUtilities.GetServiceOrCreateInstance<IWarningSystem>(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);
}
}
}