Files
Wino-Mail/Wino.Mail/Services/DialogService.cs
T

196 lines
6.9 KiB
C#
Raw Normal View History

2024-04-18 01:44:37 +02:00
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
2024-04-18 01:44:37 +02:00
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.Messaging;
using Windows.UI.Xaml;
2024-04-18 01:44:37 +02:00
using Windows.UI.Xaml.Controls;
using Wino.Core.Domain;
2024-11-10 23:28:25 +01:00
using Wino.Core.Domain.Entities.Mail;
using Wino.Core.Domain.Entities.Shared;
2024-04-18 01:44:37 +02:00
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
2025-02-15 12:53:32 +01:00
using Wino.Core.Domain.Models.Accounts;
2024-04-18 01:44:37 +02:00
using Wino.Core.Domain.Models.Folders;
using Wino.Core.Domain.Models.Synchronization;
using Wino.Core.UWP.Extensions;
2024-11-10 23:28:25 +01:00
using Wino.Core.UWP.Services;
2024-04-18 01:44:37 +02:00
using Wino.Dialogs;
2025-02-01 18:13:36 +01:00
using Wino.Mail.Dialogs;
using Wino.Messaging.Server;
using Wino.Messaging.UI;
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
namespace Wino.Services;
public class DialogService : DialogServiceBase, IMailDialogService
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
public DialogService(IThemeService themeService,
IConfigurationService configurationService,
IApplicationResourceManager<ResourceDictionary> applicationResourceManager) : base(themeService, configurationService, applicationResourceManager)
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
public override IAccountCreationDialog GetAccountCreationDialog(AccountCreationDialogResult accountCreationDialogResult)
{
if (accountCreationDialogResult.SpecialImapProviderDetails == null)
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
if (accountCreationDialogResult.ProviderType == MailProviderType.IMAP4)
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
return new NewImapSetupDialog
2025-02-16 11:43:30 +01:00
{
2025-02-16 11:54:23 +01:00
RequestedTheme = ThemeService.RootTheme.ToWindowsElementTheme()
};
2024-04-18 01:44:37 +02:00
}
else
{
2025-02-15 12:53:32 +01:00
return base.GetAccountCreationDialog(accountCreationDialogResult);
2024-04-18 01:44:37 +02:00
}
}
2025-02-16 11:54:23 +01:00
else
{
// Special IMAP provider like iCloud or Yahoo.
return base.GetAccountCreationDialog(accountCreationDialogResult);
}
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
public async Task<ICreateAccountAliasDialog> ShowCreateAccountAliasDialogAsync()
{
var createAccountAliasDialog = new CreateAccountAliasDialog()
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
RequestedTheme = ThemeService.RootTheme.ToWindowsElementTheme()
};
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
await HandleDialogPresentationAsync(createAccountAliasDialog);
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
return createAccountAliasDialog;
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
public async Task HandleSystemFolderConfigurationDialogAsync(Guid accountId, IFolderService folderService)
{
try
2025-02-16 11:43:30 +01:00
{
2025-02-16 11:54:23 +01:00
var configurableFolder = await folderService.GetFoldersAsync(accountId);
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
var systemFolderConfigurationDialog = new SystemFolderConfigurationDialog(configurableFolder)
{
RequestedTheme = ThemeService.RootTheme.ToWindowsElementTheme()
};
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
await HandleDialogPresentationAsync(systemFolderConfigurationDialog);
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
var configuration = systemFolderConfigurationDialog.Configuration;
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
if (configuration != null)
{
await folderService.UpdateSystemFolderConfigurationAsync(accountId, configuration);
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
InfoBarMessage(Translator.SystemFolderConfigSetupSuccess_Title, Translator.SystemFolderConfigSetupSuccess_Message, InfoBarMessageType.Success);
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
WeakReferenceMessenger.Default.Send(new AccountFolderConfigurationUpdated(accountId));
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
var options = new MailSynchronizationOptions()
{
AccountId = accountId,
Type = MailSynchronizationType.FullFolders,
};
2025-02-16 11:43:30 +01:00
2025-02-16 11:54:23 +01:00
WeakReferenceMessenger.Default.Send(new NewMailSynchronizationRequested(options, SynchronizationSource.Client));
2025-02-16 11:43:30 +01:00
}
}
2025-02-16 11:54:23 +01:00
catch (Exception ex)
2025-02-16 11:43:30 +01:00
{
2025-02-16 11:54:23 +01:00
InfoBarMessage(Translator.Error_FailedToSetupSystemFolders_Title, ex.Message, InfoBarMessageType.Error);
2025-02-16 11:43:30 +01:00
}
2025-02-16 11:54:23 +01:00
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
public async Task<IMailItemFolder> ShowMoveMailFolderDialogAsync(List<IMailItemFolder> availableFolders)
{
var moveDialog = new MoveMailDialog(availableFolders)
{
2025-02-16 11:54:23 +01:00
RequestedTheme = ThemeService.RootTheme.ToWindowsElementTheme()
};
2025-02-16 11:43:30 +01:00
2025-02-16 11:54:23 +01:00
await HandleDialogPresentationAsync(moveDialog);
2025-02-16 11:54:23 +01:00
return moveDialog.SelectedFolder;
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
public async Task<IMailItemFolder> PickFolderAsync(Guid accountId, PickFolderReason reason, IFolderService folderService)
{
var allFolders = await folderService.GetFolderStructureForAccountAsync(accountId, true);
2024-06-13 01:42:19 +02:00
2025-02-16 11:54:23 +01:00
return await ShowMoveMailFolderDialogAsync(allFolders.Folders);
}
2025-02-16 11:43:30 +01:00
2025-02-16 11:54:23 +01:00
public Task<bool> ShowHardDeleteConfirmationAsync()
=> ShowWinoCustomMessageDialogAsync(Translator.DialogMessage_HardDeleteConfirmationMessage,
Translator.DialogMessage_HardDeleteConfirmationTitle,
Translator.Buttons_Yes,
WinoCustomMessageDialogIcon.Warning,
Translator.Buttons_No);
2025-02-16 11:43:30 +01:00
2025-02-16 11:54:23 +01:00
public async Task<MailAccount> ShowAccountPickerDialogAsync(List<MailAccount> availableAccounts)
{
var accountPicker = new AccountPickerDialog(availableAccounts)
{
2025-02-16 11:54:23 +01:00
RequestedTheme = ThemeService.RootTheme.ToWindowsElementTheme()
};
2025-02-16 11:35:43 +01:00
2025-02-16 11:54:23 +01:00
await HandleDialogPresentationAsync(accountPicker);
2025-02-16 11:35:43 +01:00
2025-02-16 11:54:23 +01:00
return accountPicker.PickedAccount;
}
2025-02-16 11:35:43 +01:00
2025-02-16 11:54:23 +01:00
public async Task<AccountSignature> ShowSignatureEditorDialog(AccountSignature signatureModel = null)
{
SignatureEditorDialog signatureEditorDialog;
if (signatureModel != null)
2025-02-16 11:35:43 +01:00
{
2025-02-16 11:54:23 +01:00
signatureEditorDialog = new SignatureEditorDialog(signatureModel)
2025-02-16 11:43:30 +01:00
{
RequestedTheme = ThemeService.RootTheme.ToWindowsElementTheme()
};
}
2025-02-16 11:54:23 +01:00
else
2025-02-16 11:35:43 +01:00
{
2025-02-16 11:54:23 +01:00
signatureEditorDialog = new SignatureEditorDialog()
2025-02-16 11:43:30 +01:00
{
RequestedTheme = ThemeService.RootTheme.ToWindowsElementTheme()
};
}
2025-02-16 11:54:23 +01:00
var result = await HandleDialogPresentationAsync(signatureEditorDialog);
return result == ContentDialogResult.Primary ? signatureEditorDialog.Result : null;
}
public async Task ShowMessageSourceDialogAsync(string messageSource)
{
var dialog = new MessageSourceDialog()
{
MessageSource = messageSource,
RequestedTheme = ThemeService.RootTheme.ToWindowsElementTheme()
};
await HandleDialogPresentationAsync(dialog);
if (dialog.Copied)
2025-02-16 11:54:23 +01:00
InfoBarMessage(Translator.ClipboardTextCopied_Title, string.Format(Translator.ClipboardTextCopied_Message, Translator.MessageSourceDialog_Title), InfoBarMessageType.Information);
}
public async Task ShowAccountReorderDialogAsync(ObservableCollection<IAccountProviderDetailViewModel> availableAccounts)
{
var accountReorderDialog = new AccountReorderDialog(availableAccounts)
{
RequestedTheme = ThemeService.RootTheme.ToWindowsElementTheme()
};
await HandleDialogPresentationAsync(accountReorderDialog);
2024-04-18 01:44:37 +02:00
}
}