using System; using System.Collections.Generic; using System.Linq; using Microsoft.UI.Xaml.Controls; using Wino.Core.Domain; using Wino.Core.Domain.Entities.Mail; using Wino.Core.Domain.Enums; using Wino.Core.Domain.Models.Folders; namespace Wino.Dialogs; public sealed partial class SystemFolderConfigurationDialog : ContentDialog { private bool canDismissDialog = false; public SystemFolderConfiguration? Configuration { get; set; } public List AvailableFolders { get; } public MailItemFolder? Sent { get; set; } public MailItemFolder? Draft { get; set; } public MailItemFolder? Archive { get; set; } public MailItemFolder? Junk { get; set; } public MailItemFolder? Trash { get; set; } public SystemFolderConfigurationDialog(List availableFolders) { InitializeComponent(); AvailableFolders = availableFolders; Sent = AvailableFolders.Find(a => a.SpecialFolderType == SpecialFolderType.Sent); Draft = AvailableFolders.Find(a => a.SpecialFolderType == SpecialFolderType.Draft); Archive = AvailableFolders.Find(a => a.SpecialFolderType == SpecialFolderType.Archive); Junk = AvailableFolders.Find(a => a.SpecialFolderType == SpecialFolderType.Junk); Trash = AvailableFolders.Find(a => a.SpecialFolderType == SpecialFolderType.Deleted); } private void DialogClosing(ContentDialog sender, ContentDialogClosingEventArgs args) { args.Cancel = !canDismissDialog; } private void CancelClicked(ContentDialog sender, ContentDialogButtonClickEventArgs args) => canDismissDialog = true; private void SaveClicked(ContentDialog sender, ContentDialogButtonClickEventArgs args) { ValidationErrorTextBlock!.Text = string.Empty; ValidationErrorBorder.Visibility = Microsoft.UI.Xaml.Visibility.Collapsed; var allSpecialFolders = new List() { Sent, Draft, Archive, Trash, Junk }; if (allSpecialFolders.Any(a => a != null && a.SpecialFolderType == SpecialFolderType.Inbox)) ValidationErrorTextBlock!.Text = Translator.SystemFolderConfigDialogValidation_InboxSelected; if (new HashSet(allSpecialFolders.Where(a => a != null).Select(x => x!.Id)).Count != allSpecialFolders.Where(a => a != null).Count()) ValidationErrorTextBlock!.Text = Translator.SystemFolderConfigDialogValidation_DuplicateSystemFolders; if (!string.IsNullOrEmpty(ValidationErrorTextBlock!.Text)) ValidationErrorBorder.Visibility = Microsoft.UI.Xaml.Visibility.Visible; // Check if we can save. if (string.IsNullOrEmpty(ValidationErrorTextBlock!.Text)) { var configuration = new SystemFolderConfiguration(Sent, Draft, Archive, Trash, Junk); canDismissDialog = true; Configuration = configuration; } } }