IMAP Improvements (#558)
* Fixing an issue where scrollviewer overrides a part of template in mail list. Adjusted zoomed out header grid's corner radius. * IDLE implementation, imap synchronization strategies basics and condstore synchronization. * Adding iCloud and Yahoo as special IMAP handling scenario. * iCloud special imap handling. * Support for killing synchronizers. * Update privacy policy url. * Batching condstore downloads into 50, using SORT extension for searches if supported. * Bumping some nugets. More on the imap synchronizers. * Delegating idle synchronizations to server to post-sync operations. * Update mailkit to resolve qresync bug with iCloud. * Fixing remote highest mode seq checks for qresync and condstore synchronizers. * Yahoo custom settings. * Bump google sdk package. * Fixing the build issue.... * NRE on canceled token accounts during setup. * Server crash handlers. * Remove ARM32. Upgrade server to .NET 9. * Fix icons for yahoo and apple. * Fixed an issue where disabled folders causing an exception on forced sync. * Remove smtp encoding constraint. * Remove commented code. * Fixing merge conflict * Addressing double registrations for mailkit remote folder events in synchronizers. * Making sure idle canceled result is not reported. * Fixing custom imap server dialog opening. * Fixing the issue with account creation making the previously selected account as selected as well. * Fixing app close behavior and logging app close.
This commit is contained in:
@@ -2,5 +2,5 @@
|
||||
|
||||
namespace Wino.Core.Domain.Models.Accounts
|
||||
{
|
||||
public record AccountCreationDialogResult(MailProviderType ProviderType, string AccountName, string AccountColorHex = "");
|
||||
public record AccountCreationDialogResult(MailProviderType ProviderType, string AccountName, SpecialImapProviderDetails SpecialImapProviderDetails);
|
||||
}
|
||||
|
||||
@@ -6,18 +6,32 @@ namespace Wino.Core.Domain.Models.Accounts
|
||||
public class ProviderDetail : IProviderDetail
|
||||
{
|
||||
public MailProviderType Type { get; }
|
||||
|
||||
public SpecialImapProvider SpecialImapProvider { get; }
|
||||
public string Name { get; }
|
||||
|
||||
public string Description { get; }
|
||||
|
||||
public string ProviderImage => $"/Wino.Core.UWP/Assets/Providers/{Type}.png";
|
||||
public string ProviderImage
|
||||
{
|
||||
get
|
||||
{
|
||||
if (SpecialImapProvider == SpecialImapProvider.None)
|
||||
{
|
||||
return $"/Wino.Core.UWP/Assets/Providers/{Type}.png";
|
||||
}
|
||||
else
|
||||
{
|
||||
return $"/Wino.Core.UWP/Assets/Providers/{SpecialImapProvider}.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsSupported => Type == MailProviderType.Outlook || Type == MailProviderType.Gmail || Type == MailProviderType.IMAP4;
|
||||
|
||||
public ProviderDetail(MailProviderType type)
|
||||
public ProviderDetail(MailProviderType type, SpecialImapProvider specialImapProvider)
|
||||
{
|
||||
Type = type;
|
||||
SpecialImapProvider = specialImapProvider;
|
||||
|
||||
switch (Type)
|
||||
{
|
||||
@@ -25,21 +39,29 @@ namespace Wino.Core.Domain.Models.Accounts
|
||||
Name = "Outlook";
|
||||
Description = "Outlook.com, Live.com, Hotmail, MSN";
|
||||
break;
|
||||
case MailProviderType.Office365:
|
||||
Name = "Office 365";
|
||||
Description = "Office 365, Exchange";
|
||||
break;
|
||||
case MailProviderType.Gmail:
|
||||
Name = "Gmail";
|
||||
Description = Translator.ProviderDetail_Gmail_Description;
|
||||
break;
|
||||
case MailProviderType.Yahoo:
|
||||
Name = "Yahoo";
|
||||
Description = "Yahoo Mail";
|
||||
break;
|
||||
case MailProviderType.IMAP4:
|
||||
Name = Translator.ProviderDetail_IMAP_Title;
|
||||
Description = Translator.ProviderDetail_IMAP_Description;
|
||||
switch (specialImapProvider)
|
||||
{
|
||||
case SpecialImapProvider.None:
|
||||
Name = Translator.ProviderDetail_IMAP_Title;
|
||||
Description = Translator.ProviderDetail_IMAP_Description;
|
||||
break;
|
||||
case SpecialImapProvider.iCloud:
|
||||
Name = Translator.ProviderDetail_iCloud_Title;
|
||||
Description = Translator.ProviderDetail_iCloud_Description;
|
||||
break;
|
||||
case SpecialImapProvider.Yahoo:
|
||||
Name = Translator.ProviderDetail_Yahoo_Title;
|
||||
Description = Translator.ProviderDetail_Yahoo_Description;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
using Wino.Core.Domain.Enums;
|
||||
|
||||
namespace Wino.Core.Domain.Models.Accounts
|
||||
{
|
||||
public record SpecialImapProviderDetails(string Address, string Password, string SenderName, SpecialImapProvider SpecialImapProvider);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
using MailKit;
|
||||
using MimeKit;
|
||||
|
||||
namespace Wino.Core.Domain.Models.MailItem
|
||||
{
|
||||
/// <summary>
|
||||
/// Encapsulates all required information to create a MimeMessage for IMAP synchronizer.
|
||||
/// </summary>
|
||||
public class ImapMessageCreationPackage
|
||||
{
|
||||
public IMessageSummary MessageSummary { get; }
|
||||
public MimeMessage MimeMessage { get; }
|
||||
|
||||
public ImapMessageCreationPackage(IMessageSummary messageSummary, MimeMessage mimeMessage)
|
||||
{
|
||||
MessageSummary = messageSummary;
|
||||
MimeMessage = mimeMessage;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@ namespace Wino.Core.Domain.Models.Synchronization
|
||||
/// <summary>
|
||||
/// Unique id of synchronization.
|
||||
/// </summary>
|
||||
public Guid Id { get; } = Guid.NewGuid();
|
||||
public Guid Id { get; set; } = Guid.NewGuid();
|
||||
|
||||
/// <summary>
|
||||
/// Account to execute synchronization for.
|
||||
@@ -26,6 +26,12 @@ namespace Wino.Core.Domain.Models.Synchronization
|
||||
/// </summary>
|
||||
public List<Guid> SynchronizationFolderIds { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// If true, additional folders like Sent,Drafts and Deleted will not be synchronized
|
||||
/// with InboxOnly and CustomFolders sync type.
|
||||
/// </summary>
|
||||
public bool ExcludeMustHaveFolders { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// When doing a linked inbox synchronization, we must ignore reporting completion to the caller for each folder.
|
||||
/// This Id will help tracking that. Id is unique, but this one can be the same for all sync requests
|
||||
@@ -33,6 +39,6 @@ namespace Wino.Core.Domain.Models.Synchronization
|
||||
/// </summary>
|
||||
public Guid? GroupedSynchronizationTrackingId { get; set; }
|
||||
|
||||
public override string ToString() => $"Type: {Type}, Folders: {(SynchronizationFolderIds == null ? "All" : string.Join(",", SynchronizationFolderIds))}";
|
||||
public override string ToString() => $"Type: {Type}";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user