67 lines
2.1 KiB
C#
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);
|
|
}
|
|
}
|
|
} |