Add initial mail sync range selection
This commit is contained in:
@@ -55,6 +55,7 @@
|
||||
<Grid MinWidth="400" RowSpacing="12">
|
||||
<Grid Visibility="{x:Bind IsProviderSelectionVisible, Mode=OneWay}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
@@ -96,6 +97,48 @@
|
||||
|
||||
</Grid>
|
||||
|
||||
<Border
|
||||
x:Name="InitialSynchronizationPanel"
|
||||
Grid.Row="1"
|
||||
Margin="0,12,0,0"
|
||||
Padding="12"
|
||||
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
|
||||
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
|
||||
BorderThickness="1"
|
||||
CornerRadius="8"
|
||||
Visibility="Collapsed">
|
||||
<StackPanel Spacing="10">
|
||||
<StackPanel Spacing="2">
|
||||
<TextBlock FontWeight="SemiBold" Text="{x:Bind domain:Translator.AccountCreation_InitialSynchronization_Title}" />
|
||||
<TextBlock
|
||||
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
|
||||
Style="{StaticResource CaptionTextBlockStyle}"
|
||||
Text="{x:Bind domain:Translator.AccountCreation_InitialSynchronization_Description}"
|
||||
TextWrapping="WrapWholeWords" />
|
||||
</StackPanel>
|
||||
|
||||
<ComboBox
|
||||
x:Name="InitialSynchronizationComboBox"
|
||||
HorizontalAlignment="Stretch"
|
||||
ItemsSource="{x:Bind InitialSynchronizationRanges, Mode=OneWay}"
|
||||
SelectionChanged="InitialSynchronizationSelectionChanged">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate x:DataType="accounts:InitialSynchronizationRangeOption">
|
||||
<TextBlock Text="{x:Bind DisplayText}" />
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
|
||||
<muxc:InfoBar
|
||||
x:Name="InitialSynchronizationWarningBar"
|
||||
IsOpen="True"
|
||||
Message="{x:Bind domain:Translator.AccountCreation_InitialSynchronization_EverythingWarning}"
|
||||
Severity="Warning"
|
||||
Title="{x:Bind domain:Translator.GeneralTitle_Warning}"
|
||||
Visibility="Collapsed" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
|
||||
<ListView
|
||||
Grid.Row="2"
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace Wino.Mail.WinUI.Dialogs;
|
||||
|
||||
public sealed partial class NewAccountDialog : ContentDialog
|
||||
{
|
||||
private readonly Dictionary<SpecialImapProvider, string> helpingLinks = new Dictionary<SpecialImapProvider, string>()
|
||||
private readonly Dictionary<SpecialImapProvider, string> helpingLinks = new()
|
||||
{
|
||||
{ SpecialImapProvider.iCloud, "https://support.apple.com/en-us/102654" },
|
||||
{ SpecialImapProvider.Yahoo, "http://help.yahoo.com/kb/SLN15241.html" },
|
||||
@@ -27,7 +27,6 @@ public sealed partial class NewAccountDialog : ContentDialog
|
||||
public static readonly DependencyProperty SelectedColorProperty = DependencyProperty.Register(nameof(SelectedColor), typeof(AppColorViewModel), typeof(NewAccountDialog), new PropertyMetadata(null, new PropertyChangedCallback(OnSelectedColorChanged)));
|
||||
public static readonly DependencyProperty SelectedCalendarModeIndexProperty = DependencyProperty.Register(nameof(SelectedCalendarModeIndex), typeof(int), typeof(NewAccountDialog), new PropertyMetadata(0));
|
||||
|
||||
|
||||
public AppColorViewModel? SelectedColor
|
||||
{
|
||||
get { return (AppColorViewModel?)GetValue(SelectedColorProperty); }
|
||||
@@ -49,7 +48,6 @@ public sealed partial class NewAccountDialog : ContentDialog
|
||||
set { SetValue(SelectedMailProviderProperty, value); }
|
||||
}
|
||||
|
||||
|
||||
public bool IsProviderSelectionVisible
|
||||
{
|
||||
get { return (bool)GetValue(IsProviderSelectionVisibleProperty); }
|
||||
@@ -63,10 +61,16 @@ public sealed partial class NewAccountDialog : ContentDialog
|
||||
}
|
||||
|
||||
// List of available mail providers for now.
|
||||
|
||||
public List<IProviderDetail> Providers { get; set; } = [];
|
||||
|
||||
public List<AppColorViewModel> AvailableColors { get; set; } = [];
|
||||
public List<InitialSynchronizationRangeOption> InitialSynchronizationRanges { get; } =
|
||||
[
|
||||
new(InitialSynchronizationRange.ThreeMonths, Translator.AccountCreation_InitialSynchronization_3Months),
|
||||
new(InitialSynchronizationRange.SixMonths, Translator.AccountCreation_InitialSynchronization_6Months),
|
||||
new(InitialSynchronizationRange.NineMonths, Translator.AccountCreation_InitialSynchronization_9Months),
|
||||
new(InitialSynchronizationRange.OneYear, Translator.AccountCreation_InitialSynchronization_Year),
|
||||
new(InitialSynchronizationRange.Everything, Translator.AccountCreation_InitialSynchronization_Everything)
|
||||
];
|
||||
public List<string> CalendarModeOptions { get; } =
|
||||
[
|
||||
Translator.ImapCalDavSettingsPage_CalendarModeCalDav,
|
||||
@@ -74,7 +78,6 @@ public sealed partial class NewAccountDialog : ContentDialog
|
||||
Translator.ImapCalDavSettingsPage_CalendarModeDisabled
|
||||
];
|
||||
|
||||
|
||||
public AccountCreationDialogResult? Result = null;
|
||||
|
||||
public NewAccountDialog()
|
||||
@@ -85,6 +88,8 @@ public sealed partial class NewAccountDialog : ContentDialog
|
||||
AvailableColors = themeService.Select(a => new AppColorViewModel(a)).ToList();
|
||||
|
||||
UpdateSelectedColor();
|
||||
InitialSynchronizationComboBox.SelectedItem = InitialSynchronizationRanges.First(option => option.Range == InitialSynchronizationRange.SixMonths);
|
||||
UpdateInitialSynchronizationState();
|
||||
}
|
||||
|
||||
private static void OnSelectedProviderChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
|
||||
@@ -105,6 +110,19 @@ public sealed partial class NewAccountDialog : ContentDialog
|
||||
SelectedColorEllipse.Fill = SelectedColor == null ? null : XamlHelpers.GetSolidColorBrushFromHex(SelectedColor.Hex);
|
||||
}
|
||||
|
||||
private void UpdateInitialSynchronizationState()
|
||||
{
|
||||
InitialSynchronizationPanel.Visibility = SelectedMailProvider == null ? Visibility.Collapsed : Visibility.Visible;
|
||||
var selectedOption = InitialSynchronizationComboBox.SelectedItem as InitialSynchronizationRangeOption;
|
||||
InitialSynchronizationWarningBar.Visibility = selectedOption?.IsEverything == true ? Visibility.Visible : Visibility.Collapsed;
|
||||
}
|
||||
|
||||
private InitialSynchronizationRange GetInitialSynchronizationRange()
|
||||
{
|
||||
var selectedRange = (InitialSynchronizationComboBox.SelectedItem as InitialSynchronizationRangeOption)?.Range
|
||||
?? InitialSynchronizationRange.SixMonths;
|
||||
return selectedRange;
|
||||
}
|
||||
|
||||
private void CancelClicked(ContentDialog sender, ContentDialogButtonClickEventArgs args)
|
||||
{
|
||||
@@ -116,9 +134,11 @@ public sealed partial class NewAccountDialog : ContentDialog
|
||||
if (SelectedMailProvider == null)
|
||||
return;
|
||||
|
||||
var initialSynchronizationRange = GetInitialSynchronizationRange();
|
||||
|
||||
if (IsSpecialImapServerPartVisible)
|
||||
{
|
||||
// Special imap detail input.
|
||||
// Special IMAP detail input.
|
||||
var calendarSupportMode = SelectedCalendarModeIndex switch
|
||||
{
|
||||
1 => ImapCalendarSupportMode.LocalOnly,
|
||||
@@ -132,7 +152,12 @@ public sealed partial class NewAccountDialog : ContentDialog
|
||||
DisplayNameTextBox.Text.Trim(),
|
||||
SelectedMailProvider.SpecialImapProvider,
|
||||
calendarSupportMode);
|
||||
Result = new AccountCreationDialogResult(SelectedMailProvider.Type, AccountNameTextbox.Text.Trim(), details, SelectedColor?.Hex ?? string.Empty);
|
||||
Result = new AccountCreationDialogResult(
|
||||
SelectedMailProvider.Type,
|
||||
AccountNameTextbox.Text.Trim(),
|
||||
details,
|
||||
SelectedColor?.Hex ?? string.Empty,
|
||||
initialSynchronizationRange);
|
||||
Hide();
|
||||
|
||||
return;
|
||||
@@ -140,11 +165,11 @@ public sealed partial class NewAccountDialog : ContentDialog
|
||||
|
||||
Validate();
|
||||
|
||||
if (IsSecondaryButtonEnabled)
|
||||
if (IsPrimaryButtonEnabled)
|
||||
{
|
||||
if (SelectedMailProvider.SpecialImapProvider != SpecialImapProvider.None)
|
||||
{
|
||||
// This step requires app-sepcific password login for some providers.
|
||||
// This step requires app-specific password login for some providers.
|
||||
args.Cancel = true;
|
||||
|
||||
IsProviderSelectionVisible = false;
|
||||
@@ -154,7 +179,12 @@ public sealed partial class NewAccountDialog : ContentDialog
|
||||
}
|
||||
else
|
||||
{
|
||||
Result = new AccountCreationDialogResult(SelectedMailProvider.Type, AccountNameTextbox.Text.Trim(), null, SelectedColor?.Hex ?? string.Empty);
|
||||
Result = new AccountCreationDialogResult(
|
||||
SelectedMailProvider.Type,
|
||||
AccountNameTextbox.Text.Trim(),
|
||||
null,
|
||||
SelectedColor?.Hex ?? string.Empty,
|
||||
initialSynchronizationRange);
|
||||
Hide();
|
||||
}
|
||||
}
|
||||
@@ -167,6 +197,7 @@ public sealed partial class NewAccountDialog : ContentDialog
|
||||
{
|
||||
ValidateCreateButton();
|
||||
ValidateNames();
|
||||
UpdateInitialSynchronizationState();
|
||||
}
|
||||
|
||||
// Returns whether we can create account or not.
|
||||
@@ -199,6 +230,9 @@ public sealed partial class NewAccountDialog : ContentDialog
|
||||
|
||||
private void ImapPasswordChanged(object sender, RoutedEventArgs e) => Validate();
|
||||
|
||||
private void InitialSynchronizationSelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
=> UpdateInitialSynchronizationState();
|
||||
|
||||
private async void AppSpecificHelpButtonClicked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (SelectedMailProvider == null ||
|
||||
|
||||
Reference in New Issue
Block a user