74 lines
2.0 KiB
C#
74 lines
2.0 KiB
C#
using System;
|
|
using Microsoft.UI.Xaml;
|
|
using Microsoft.UI.Xaml.Controls;
|
|
using Wino.Core.Domain.Interfaces;
|
|
using Wino.Core.Domain.Models.Accounts;
|
|
|
|
namespace Wino.Dialogs;
|
|
|
|
public sealed partial class WinoAccountSyncExportDialog : ContentDialog
|
|
{
|
|
private readonly IWinoAccountDataSyncService _syncService;
|
|
private bool _isBusy;
|
|
|
|
public WinoAccountSyncExportDialog(IWinoAccountDataSyncService syncService)
|
|
{
|
|
_syncService = syncService;
|
|
InitializeComponent();
|
|
UpdateButtonState();
|
|
}
|
|
|
|
public WinoAccountSyncExportResult? Result { get; private set; }
|
|
|
|
public Exception? FailureException { get; private set; }
|
|
|
|
private async void ExportClicked(ContentDialog sender, ContentDialogButtonClickEventArgs args)
|
|
{
|
|
args.Cancel = true;
|
|
|
|
if (!HasSelection())
|
|
{
|
|
return;
|
|
}
|
|
|
|
var deferral = args.GetDeferral();
|
|
|
|
try
|
|
{
|
|
SetBusyState(true);
|
|
FailureException = null;
|
|
Result = await _syncService.ExportAsync(new WinoAccountSyncSelection(
|
|
PreferencesCheckBox.IsChecked == true,
|
|
AccountsCheckBox.IsChecked == true));
|
|
Hide();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
FailureException = ex;
|
|
Hide();
|
|
}
|
|
finally
|
|
{
|
|
SetBusyState(false);
|
|
deferral.Complete();
|
|
}
|
|
}
|
|
|
|
private void SelectionChanged(object sender, RoutedEventArgs e)
|
|
=> UpdateButtonState();
|
|
|
|
private void SetBusyState(bool isBusy)
|
|
{
|
|
_isBusy = isBusy;
|
|
ProgressPanel.Visibility = isBusy ? Visibility.Visible : Visibility.Collapsed;
|
|
IsSecondaryButtonEnabled = !isBusy;
|
|
UpdateButtonState();
|
|
}
|
|
|
|
private void UpdateButtonState()
|
|
=> IsPrimaryButtonEnabled = !_isBusy && HasSelection();
|
|
|
|
private bool HasSelection()
|
|
=> PreferencesCheckBox.IsChecked == true || AccountsCheckBox.IsChecked == true;
|
|
}
|