22 Commits

Author SHA1 Message Date
Burak Kaan Köse
133f768af4 Remove commented code. 2025-02-03 19:15:54 +01:00
Burak Kaan Köse
380883a3d5 Remove smtp encoding constraint. 2025-02-03 19:13:56 +01:00
Burak Kaan Köse
662ce99f94 Fixed an issue where disabled folders causing an exception on forced sync. 2025-02-02 17:53:41 +01:00
Burak Kaan Köse
006404aa87 Fix icons for yahoo and apple. 2025-02-02 17:53:24 +01:00
Burak Kaan Köse
42070a2e5b merge main 2025-02-02 15:48:47 +01:00
Burak Kaan Köse
6fcfb7ff7b Remove ARM32. Upgrade server to .NET 9. 2025-02-02 15:34:42 +01:00
Burak Kaan Köse
616b56f4bd Server crash handlers. 2025-02-01 23:15:01 +01:00
Burak Kaan Köse
16272fa049 NRE on canceled token accounts during setup. 2025-02-01 20:43:55 +01:00
Burak Kaan Köse
3021850fa0 Fixing the build issue.... 2025-02-01 20:25:22 +01:00
Burak Kaan Köse
bb2dbe1457 Bump google sdk package. 2025-01-30 19:33:28 +01:00
Burak Kaan Köse
62fc21be7e Yahoo custom settings. 2025-01-29 18:55:54 +01:00
Burak Kaan Köse
50d0ebc6c8 Fixing remote highest mode seq checks for qresync and condstore synchronizers. 2025-01-29 16:12:10 +01:00
Burak Kaan Köse
ad900d596c Update mailkit to resolve qresync bug with iCloud. 2025-01-29 16:06:31 +01:00
Burak Kaan Köse
7d8da33f42 Delegating idle synchronizations to server to post-sync operations. 2025-01-28 23:57:09 +01:00
Burak Kaan Köse
b73eb3efcb Bumping some nugets. More on the imap synchronizers. 2025-01-28 22:56:19 +01:00
Burak Kaan Köse
b7b51ac4e6 Batching condstore downloads into 50, using SORT extension for searches if supported. 2025-01-25 00:58:40 +01:00
Burak Kaan Köse
bf1480705d Update privacy policy url. 2025-01-25 00:57:49 +01:00
Burak Kaan Köse
973ab1570d Support for killing synchronizers. 2025-01-25 00:00:10 +01:00
Burak Kaan Köse
20010e77ae iCloud special imap handling. 2025-01-21 23:57:58 +01:00
Burak Kaan Köse
05280dfd42 Adding iCloud and Yahoo as special IMAP handling scenario. 2025-01-19 23:52:27 +01:00
Burak Kaan Köse
e0f87f1374 IDLE implementation, imap synchronization strategies basics and condstore synchronization. 2025-01-19 20:35:41 +01:00
Burak Kaan Köse
46cbf443cf Fixing an issue where scrollviewer overrides a part of template in mail list. Adjusted zoomed out header grid's corner radius. 2025-01-19 20:35:12 +01:00
751 changed files with 35279 additions and 36067 deletions

View File

@@ -149,7 +149,7 @@ csharp_preferred_modifier_order = public,private,protected,internal,static,exter
# Code-block preferences
csharp_prefer_braces = true:silent
csharp_prefer_simple_using_statement = true:suggestion
csharp_style_namespace_declarations = file_scoped:error
csharp_style_namespace_declarations = block_scoped:silent
# Expression-level preferences
csharp_prefer_simple_default_expression = true:suggestion
@@ -288,5 +288,3 @@ csharp_style_prefer_utf8_string_literals = true:suggestion
csharp_style_prefer_readonly_struct = true:suggestion
csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true:silent
csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:silent
csharp_style_prefer_primary_constructors = true:silent
csharp_prefer_system_threading_lock = true:suggestion

View File

@@ -1,7 +0,0 @@
<Project>
<PropertyGroup>
<LangVersion>preview</LangVersion>
<IsAotCompatible>true</IsAotCompatible>
<Configurations>Debug;Release</Configurations>
</PropertyGroup>
</Project>

View File

@@ -1,65 +0,0 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="ColorHashSharp" Version="1.0.0" />
<PackageVersion Include="CommunityToolkit.Common" Version="8.4.0" />
<PackageVersion Include="CommunityToolkit.Diagnostics" Version="8.4.0" />
<PackageVersion Include="CommunityToolkit.Labs.Uwp.Controls.MarkdownTextBlock" Version="0.1.250206-build.2040" />
<PackageVersion Include="CommunityToolkit.Labs.Uwp.DependencyPropertyGenerator" Version="0.1.250206-build.2040" />
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.0" />
<PackageVersion Include="CommunityToolkit.Uwp.Animations" Version="8.2.250129-preview2" />
<PackageVersion Include="CommunityToolkit.Uwp.Behaviors" Version="8.2.250129-preview2" />
<PackageVersion Include="CommunityToolkit.Uwp.Controls.Segmented" Version="8.2.250129-preview2" />
<PackageVersion Include="CommunityToolkit.Uwp.Controls.SettingsControls" Version="8.2.250129-preview2" />
<PackageVersion Include="CommunityToolkit.Uwp.Controls.Sizers" Version="8.2.250129-preview2" />
<PackageVersion Include="CommunityToolkit.Uwp.Controls.TabbedCommandBar" Version="8.2.250129-preview2" />
<PackageVersion Include="CommunityToolkit.Uwp.Controls.TokenizingTextBox" Version="8.2.250129-preview2" />
<PackageVersion Include="CommunityToolkit.Uwp.Extensions" Version="8.2.250129-preview2" />
<PackageVersion Include="EmailValidation" Version="1.2.0" />
<PackageVersion Include="HtmlAgilityPack" Version="1.11.72" />
<PackageVersion Include="Ical.Net" Version="4.3.1" />
<PackageVersion Include="IsExternalInit" Version="1.0.3" />
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.12.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.2" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.2" />
<PackageVersion Include="Microsoft.Graph" Version="5.69.0" />
<PackageVersion Include="Microsoft.Identity.Client" Version="4.68.0" />
<PackageVersion Include="Microsoft.Identity.Client.Broker" Version="4.68.0" />
<PackageVersion Include="Microsoft.Identity.Client.Extensions.Msal" Version="4.68.0" />
<PackageVersion Include="Microsoft.NETCore.UniversalWindowsPlatform" Version="6.2.14" />
<PackageVersion Include="Microsoft.UI.Xaml" Version="2.8.7" />
<PackageVersion Include="Microsoft.Xaml.Behaviors.Uwp.Managed" Version="3.0.0" />
<PackageVersion Include="MimeKit" Version="4.10.0" />
<PackageVersion Include="morelinq" Version="4.4.0" />
<PackageVersion Include="Nito.AsyncEx" Version="5.1.2" />
<PackageVersion Include="Nito.AsyncEx.Tasks" Version="5.1.2" />
<PackageVersion Include="NodaTime" Version="3.2.1" />
<PackageVersion Include="Serilog" Version="4.2.0" />
<PackageVersion Include="Serilog.Exceptions" Version="8.4.0" />
<PackageVersion Include="Serilog.Sinks.Debug" Version="3.0.0" />
<PackageVersion Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageVersion Include="Serilog.Sinks.ApplicationInsights" Version="4.0.0" />
<PackageVersion Include="SkiaSharp" Version="3.116.1" />
<PackageVersion Include="sqlite-net-pcl" Version="1.9.172" />
<PackageVersion Include="SqlKata" Version="4.0.1" />
<PackageVersion Include="System.Private.Uri" Version="4.3.2" />
<PackageVersion Include="System.Text.Encoding.CodePages" Version="9.0.2" />
<PackageVersion Include="System.Text.Json" Version="9.0.2" />
<PackageVersion Include="Win2D.uwp" Version="1.28.2" />
<PackageVersion Include="H.NotifyIcon.Wpf" Version="2.2.0" />
<PackageVersion Include="CommunityToolkit.WinUI.Notifications" Version="7.1.2" />
<PackageVersion Include="Google.Apis.Auth" Version="1.69.0" />
<PackageVersion Include="Google.Apis.Calendar.v3" Version="1.69.0.3667" />
<PackageVersion Include="Google.Apis.Gmail.v1" Version="1.68.0.3427" />
<PackageVersion Include="Google.Apis.PeopleService.v1" Version="1.68.0.3359" />
<PackageVersion Include="HtmlKit" Version="1.2.0" />
<PackageVersion Include="MailKit" Version="4.10.0" />
<PackageVersion Include="TimePeriodLibrary.NET" Version="2.1.5" />
<PackageVersion Include="System.Reactive" Version="6.0.1" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="9.0.2" />
<PackageVersion Include="System.Text.Encodings.Web" Version="9.0.2" />
</ItemGroup>
</Project>

View File

@@ -1,10 +1,10 @@
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
namespace Wino.Authentication;
public abstract class BaseAuthenticator
namespace Wino.Authentication
{
public abstract class BaseAuthenticator
{
public abstract MailProviderType ProviderType { get; }
protected IAuthenticatorConfig AuthenticatorConfig { get; }
@@ -13,4 +13,5 @@ public abstract class BaseAuthenticator
AuthenticatorConfig = authenticatorConfig;
}
}
}

View File

@@ -7,10 +7,10 @@ using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Authentication;
namespace Wino.Authentication;
public class GmailAuthenticator : BaseAuthenticator, IGmailAuthenticator
namespace Wino.Authentication
{
public class GmailAuthenticator : BaseAuthenticator, IGmailAuthenticator
{
public GmailAuthenticator(IAuthenticatorConfig authConfig) : base(authConfig)
{
}
@@ -47,4 +47,5 @@ public class GmailAuthenticator : BaseAuthenticator, IGmailAuthenticator
ClientId = ClientId
}, AuthenticatorConfig.GmailScope, account.Id.ToString(), CancellationToken.None, new FileDataStore(AuthenticatorConfig.GmailTokenStoreIdentifier));
}
}
}

View File

@@ -11,10 +11,10 @@ using Wino.Core.Domain.Exceptions;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Authentication;
namespace Wino.Authentication;
public class OutlookAuthenticator : BaseAuthenticator, IOutlookAuthenticator
namespace Wino.Authentication
{
public class OutlookAuthenticator : BaseAuthenticator, IOutlookAuthenticator
{
private const string TokenCacheFileName = "OutlookCache.bin";
private bool isTokenCacheAttached = false;
@@ -122,4 +122,5 @@ public class OutlookAuthenticator : BaseAuthenticator, IOutlookAuthenticator
throw new AuthenticationException(Translator.Exception_UnknowErrorDuringAuthentication, new Exception(Translator.Exception_TokenGenerationFailed));
}
}
}

View File

@@ -1,20 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>Wino.Authentication</RootNamespace>
<Platforms>x86;x64;arm64</Platforms>
<Configurations>Debug;Release</Configurations>
<LangVersion>12</LangVersion>
<Platforms>AnyCPU;x64;x86</Platforms>
<AccelerateBuildsInVisualStudio>true</AccelerateBuildsInVisualStudio>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CommunityToolkit.Diagnostics" />
<PackageReference Include="CommunityToolkit.Mvvm" />
<PackageReference Include="Google.Apis.Auth" />
<PackageReference Include="Microsoft.Identity.Client" />
<PackageReference Include="Microsoft.Identity.Client.Broker" />
<PackageReference Include="Microsoft.Identity.Client.Extensions.Msal" />
<PackageReference Include="CommunityToolkit.Diagnostics" Version="8.3.2" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.3.2" />
<PackageReference Include="Google.Apis.Auth" Version="1.68.0" />
<PackageReference Include="Microsoft.Identity.Client" Version="4.66.2" />
<PackageReference Include="Microsoft.Identity.Client.Broker" Version="4.66.2" />
<PackageReference Include="Microsoft.Identity.Client.Extensions.Msal" Version="4.66.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Wino.Core.Domain\Wino.Core.Domain.csproj" />
<ProjectReference Include="..\Wino.Messages\Wino.Messaging.csproj" />

View File

@@ -1,9 +1,9 @@
using Wino.Core.Domain.Interfaces;
namespace Wino.Calendar.Services;
public class CalendarAuthenticatorConfig : IAuthenticatorConfig
namespace Wino.Calendar.Services
{
public class CalendarAuthenticatorConfig : IAuthenticatorConfig
{
public string OutlookAuthenticatorClientId => "b19c2035-d740-49ff-b297-de6ec561b208";
public string[] OutlookScope => new string[]
@@ -29,4 +29,5 @@ public class CalendarAuthenticatorConfig : IAuthenticatorConfig
};
public string GmailTokenStoreIdentifier => "WinoCalendarGmailTokenStore";
}
}

View File

@@ -1,11 +0,0 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Wino.Core.Domain;
[JsonSerializable(typeof(Dictionary<string, string>))]
[JsonSerializable(typeof(string))]
[JsonSerializable(typeof(int))]
[JsonSerializable(typeof(List<string>))]
[JsonSerializable(typeof(bool))]
public partial class BasicTypesJsonContext : JsonSerializerContext;

View File

@@ -7,10 +7,10 @@ using Wino.Core.Domain.Entities.Calendar;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Calendar;
namespace Wino.Core.Domain.Collections;
public class CalendarEventCollection
namespace Wino.Core.Domain.Collections
{
public class CalendarEventCollection
{
public event EventHandler<ICalendarItem> CalendarItemAdded;
public event EventHandler<ICalendarItem> CalendarItemRemoved;
@@ -152,4 +152,5 @@ public class CalendarEventCollection
CalendarItemsCleared?.Invoke(this, EventArgs.Empty);
}
}
}

View File

@@ -2,10 +2,10 @@
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Calendar;
namespace Wino.Core.Domain.Collections;
public class DayRangeCollection : ObservableRangeCollection<DayRangeRenderModel>
namespace Wino.Core.Domain.Collections
{
public class DayRangeCollection : ObservableRangeCollection<DayRangeRenderModel>
{
/// <summary>
/// Gets the range of dates that are currently displayed in the collection.
/// </summary>
@@ -38,4 +38,5 @@ public class DayRangeCollection : ObservableRangeCollection<DayRangeRenderModel>
calendarDayModel?.EventsCollection.AddCalendarItem(calendarItem);
}
}
}
}

View File

@@ -4,14 +4,14 @@ using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
namespace Wino.Core.Domain.Collections;
/// <summary>
/// Represents a dynamic data collection that provides notifications when items get added, removed, or when the whole list is refreshed.
/// </summary>
/// <typeparam name="T"></typeparam>
public class ObservableRangeCollection<T> : ObservableCollection<T>
namespace Wino.Core.Domain.Collections
{
/// <summary>
/// Represents a dynamic data collection that provides notifications when items get added, removed, or when the whole list is refreshed.
/// </summary>
/// <typeparam name="T"></typeparam>
public class ObservableRangeCollection<T> : ObservableCollection<T>
{
/// <summary>
/// Initializes a new instance of the System.Collections.ObjectModel.ObservableCollection(Of T) class.
@@ -170,4 +170,5 @@ public class ObservableRangeCollection<T> : ObservableCollection<T>
else
OnCollectionChanged(new NotifyCollectionChangedEventArgs(action, changedItems: changedItems, startingIndex: startingIndex));
}
}
}

View File

@@ -1,7 +1,7 @@
namespace Wino.Core.Domain;
public static class Constants
namespace Wino.Core.Domain
{
public static class Constants
{
/// <summary>
/// MIME header that exists in all the drafts created from Wino.
/// </summary>
@@ -19,4 +19,5 @@ public static class Constants
public const string WinoMailIdentiifer = nameof(WinoMailIdentiifer);
public const string WinoCalendarIdentifier = nameof(WinoCalendarIdentifier);
}
}

View File

@@ -2,10 +2,10 @@
using SQLite;
using Wino.Core.Domain.Interfaces;
namespace Wino.Core.Domain.Entities.Calendar;
public class AccountCalendar : IAccountCalendar
namespace Wino.Core.Domain.Entities.Calendar
{
public class AccountCalendar : IAccountCalendar
{
[PrimaryKey]
public Guid Id { get; set; }
public Guid AccountId { get; set; }
@@ -21,4 +21,5 @@ public class AccountCalendar : IAccountCalendar
public string TextColorHex { get; set; }
public string BackgroundColorHex { get; set; }
public string TimeZone { get; set; }
}
}

View File

@@ -2,11 +2,11 @@
using SQLite;
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Entities.Calendar;
// TODO: Connect to Contact store with Wino People.
public class CalendarEventAttendee
namespace Wino.Core.Domain.Entities.Calendar
{
// TODO: Connect to Contact store with Wino People.
public class CalendarEventAttendee
{
[PrimaryKey]
public Guid Id { get; set; }
public Guid CalendarItemId { get; set; }
@@ -16,4 +16,5 @@ public class CalendarEventAttendee
public bool IsOrganizer { get; set; }
public bool IsOptionalAttendee { get; set; }
public string Comment { get; set; }
}
}

View File

@@ -5,11 +5,11 @@ using SQLite;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
namespace Wino.Core.Domain.Entities.Calendar;
[DebuggerDisplay("{Title} ({StartDate} - {EndDate})")]
public class CalendarItem : ICalendarItem
namespace Wino.Core.Domain.Entities.Calendar
{
[DebuggerDisplay("{Title} ({StartDate} - {EndDate})")]
public class CalendarItem : ICalendarItem
{
[PrimaryKey]
public Guid Id { get; set; }
public string RemoteEventId { get; set; }
@@ -176,4 +176,5 @@ public class CalendarItem : ICalendarItem
IsOccurrence = true
};
}
}
}

View File

@@ -2,14 +2,15 @@
using SQLite;
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Entities.Calendar;
public class Reminder
namespace Wino.Core.Domain.Entities.Calendar
{
public class Reminder
{
[PrimaryKey]
public Guid Id { get; set; }
public Guid CalendarItemId { get; set; }
public DateTimeOffset ReminderTime { get; set; }
public CalendarItemReminderType ReminderType { get; set; }
}
}

View File

@@ -1,10 +1,10 @@
using System;
using SQLite;
namespace Wino.Core.Domain.Entities.Mail;
public class AccountSignature
namespace Wino.Core.Domain.Entities.Mail
{
public class AccountSignature
{
[PrimaryKey]
public Guid Id { get; set; }
@@ -13,4 +13,5 @@ public class AccountSignature
public string HtmlBody { get; set; }
public Guid MailAccountId { get; set; }
}
}

View File

@@ -1,10 +1,10 @@
using System;
using SQLite;
namespace Wino.Core.Domain.Entities.Mail;
public class RemoteAccountAlias
namespace Wino.Core.Domain.Entities.Mail
{
public class RemoteAccountAlias
{
/// <summary>
/// Display address of the alias.
/// </summary>
@@ -40,10 +40,10 @@ public class RemoteAccountAlias
/// Used for Gmail only.
/// </summary>
public string AliasSenderName { get; set; }
}
}
public class MailAccountAlias : RemoteAccountAlias
{
public class MailAccountAlias : RemoteAccountAlias
{
/// <summary>
/// Unique Id for the alias.
/// </summary>
@@ -59,4 +59,5 @@ public class MailAccountAlias : RemoteAccountAlias
/// Root aliases can't be deleted.
/// </summary>
public bool CanDelete => !IsRootAlias;
}
}

View File

@@ -5,14 +5,14 @@ using Wino.Core.Domain.Entities.Shared;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.MailItem;
namespace Wino.Core.Domain.Entities.Mail;
/// <summary>
/// Summary of the parsed MIME messages.
/// Wino will do non-network operations on this table and others from the original MIME.
/// </summary>
public class MailCopy : IMailItem
namespace Wino.Core.Domain.Entities.Mail
{
/// <summary>
/// Summary of the parsed MIME messages.
/// Wino will do non-network operations on this table and others from the original MIME.
/// </summary>
public class MailCopy : IMailItem
{
/// <summary>
/// Unique Id of the mail.
/// </summary>
@@ -153,4 +153,5 @@ public class MailCopy : IMailItem
public IEnumerable<Guid> GetContainingIds() => [UniqueId];
public override string ToString() => $"{Subject} <-> {Id}";
}
}

View File

@@ -5,11 +5,11 @@ using SQLite;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.Folders;
namespace Wino.Core.Domain.Entities.Mail;
[DebuggerDisplay("{FolderName} - {SpecialFolderType}")]
public class MailItemFolder : IMailItemFolder
namespace Wino.Core.Domain.Entities.Mail
{
[DebuggerDisplay("{FolderName} - {SpecialFolderType}")]
public class MailItemFolder : IMailItemFolder
{
[PrimaryKey]
public Guid Id { get; set; }
@@ -71,4 +71,5 @@ public class MailItemFolder : IMailItemFolder
public static MailItemFolder CreateCategoriesFolder() => new MailItemFolder() { IsSticky = true, SpecialFolderType = SpecialFolderType.Category, FolderName = Translator.CategoriesFolderNameOverride };
public override string ToString() => FolderName;
}
}

View File

@@ -1,12 +1,13 @@
using System;
using SQLite;
namespace Wino.Core.Domain.Entities.Mail;
public class MergedInbox
namespace Wino.Core.Domain.Entities.Mail
{
public class MergedInbox
{
[PrimaryKey]
public Guid Id { get; set; }
public string Name { get; set; }
}
}

View File

@@ -2,17 +2,17 @@
using System.Collections.Generic;
using SQLite;
namespace Wino.Core.Domain.Entities.Shared;
/// <summary>
/// Back storage for simple name-address book.
/// These values will be inserted during MIME fetch.
/// </summary>
// TODO: This can easily evolve to Contact store, just like People app in Windows 10/11.
// Do it.
public class AccountContact : IEquatable<AccountContact>
namespace Wino.Core.Domain.Entities.Shared
{
/// <summary>
/// Back storage for simple name-address book.
/// These values will be inserted during MIME fetch.
/// </summary>
// TODO: This can easily evolve to Contact store, just like People app in Windows 10/11.
// Do it.
public class AccountContact : IEquatable<AccountContact>
{
/// <summary>
/// E-mail address of the contact.
/// </summary>
@@ -36,6 +36,14 @@ public class AccountContact : IEquatable<AccountContact>
/// </summary>
public bool IsRootContact { get; set; }
/// <summary>
/// Short display name of the contact.
/// Eather Name or Address.
/// </summary>
public string ShortDisplayName => Address == Name || string.IsNullOrWhiteSpace(Name) ? $"{Address.ToLowerInvariant()};" : $"{Name};";
public string DisplayName => Address == Name || string.IsNullOrWhiteSpace(Name) ? Address.ToLowerInvariant() : $"{Name} <{Address.ToLowerInvariant()}>";
public override bool Equals(object obj)
{
return Equals(obj as AccountContact);
@@ -50,7 +58,10 @@ public class AccountContact : IEquatable<AccountContact>
public override int GetHashCode()
{
return HashCode.Combine(Address, Name);
int hashCode = -1717786383;
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Address);
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Name);
return hashCode;
}
public static bool operator ==(AccountContact left, AccountContact right)
@@ -62,4 +73,5 @@ public class AccountContact : IEquatable<AccountContact>
{
return !(left == right);
}
}
}

View File

@@ -1,12 +1,11 @@
using System;
using System.Collections.Generic;
using SQLite;
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Entities.Shared;
public class CustomServerInformation
namespace Wino.Core.Domain.Entities.Shared
{
public class CustomServerInformation
{
[PrimaryKey]
public Guid Id { get; set; }
@@ -50,25 +49,5 @@ public class CustomServerInformation
/// Default is 5.
/// </summary>
public int MaxConcurrentClients { get; set; }
public Dictionary<string, string> GetConnectionProperties()
{
// Printout the public connection properties.
var connectionProperties = new Dictionary<string, string>
{
{ "IncomingServer", IncomingServer },
{ "IncomingServerPort", IncomingServerPort },
{ "IncomingServerSocketOption", IncomingServerSocketOption.ToString() },
{ "IncomingAuthenticationMethod", IncomingAuthenticationMethod.ToString() },
{ "OutgoingServer", OutgoingServer },
{ "OutgoingServerPort", OutgoingServerPort },
{ "OutgoingServerSocketOption", OutgoingServerSocketOption.ToString() },
{ "OutgoingAuthenticationMethod", OutgoingAuthenticationMethod.ToString() },
{ "ProxyServer", ProxyServer },
{ "ProxyServerPort", ProxyServerPort }
};
return connectionProperties;
}
}

View File

@@ -3,10 +3,10 @@ using SQLite;
using Wino.Core.Domain.Entities.Mail;
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Entities.Shared;
public class MailAccount
namespace Wino.Core.Domain.Entities.Shared
{
public class MailAccount
{
[PrimaryKey]
public Guid Id { get; set; }
@@ -107,4 +107,5 @@ public class MailAccount
/// Gets whether the account can perform AliasInformation sync type.
/// </summary>
public bool IsAliasSyncSupported => ProviderType == MailProviderType.Gmail;
}
}

View File

@@ -1,10 +1,10 @@
using System;
using SQLite;
namespace Wino.Core.Domain.Entities.Shared;
public class MailAccountPreferences
namespace Wino.Core.Domain.Entities.Shared
{
public class MailAccountPreferences
{
[PrimaryKey]
public Guid Id { get; set; }
@@ -50,4 +50,5 @@ public class MailAccountPreferences
/// Gets or sets signature for following messages. Null if signature is not needed.
/// </summary>
public Guid? SignatureIdForFollowingMessages { get; set; }
}
}

View File

@@ -1,8 +1,9 @@
namespace Wino.Core.Domain.Enums;
public enum AccountAttentionReason
namespace Wino.Core.Domain.Enums
{
public enum AccountAttentionReason
{
None,
InvalidCredentials,
MissingSystemFolderConfiguration
}
}

View File

@@ -1,7 +1,7 @@
namespace Wino.Core.Domain.Enums;
public enum AccountCreationDialogState
namespace Wino.Core.Domain.Enums
{
public enum AccountCreationDialogState
{
Idle,
SigningIn,
PreparingFolders,
@@ -13,4 +13,5 @@ public enum AccountCreationDialogState
FetchingProfileInformation,
Canceled,
FetchingEvents
}
}

View File

@@ -1,11 +1,12 @@
namespace Wino.Core.Domain.Enums;
/// <summary>
/// Indicates the state of synchronizer.
/// </summary>
public enum AccountSynchronizerState
namespace Wino.Core.Domain.Enums
{
/// <summary>
/// Indicates the state of synchronizer.
/// </summary>
public enum AccountSynchronizerState
{
Idle,
ExecutingRequests,
Synchronizing
}
}

View File

@@ -1,7 +1,7 @@
namespace Wino.Core.Domain.Enums;
public enum AppLanguage
namespace Wino.Core.Domain.Enums
{
public enum AppLanguage
{
None,
English,
Deutsch,
@@ -17,4 +17,5 @@ public enum AppLanguage
PortugeseBrazil,
Italian,
Romanian
}
}

View File

@@ -1,8 +1,9 @@
namespace Wino.Core.Domain.Enums;
public enum AppThemeType
namespace Wino.Core.Domain.Enums
{
public enum AppThemeType
{
System,
PreDefined,
Custom,
}
}

View File

@@ -1,8 +1,9 @@
namespace Wino.Core.Domain.Enums;
public enum ApplicationElementTheme
namespace Wino.Core.Domain.Enums
{
public enum ApplicationElementTheme
{
Default,
Light,
Dark
}
}

View File

@@ -1,9 +1,10 @@
namespace Wino.Core.Domain.Enums;
public enum AttendeeStatus
namespace Wino.Core.Domain.Enums
{
public enum AttendeeStatus
{
NeedsAction,
Accepted,
Tentative,
Declined
}
}

View File

@@ -1,7 +1,8 @@
namespace Wino.Core.Domain.Enums;
public enum BackgroundSynchronizationReason
namespace Wino.Core.Domain.Enums
{
public enum BackgroundSynchronizationReason
{
SessionConnected,
Timer
}
}

View File

@@ -1,10 +1,11 @@
namespace Wino.Core.Domain.Enums;
public enum CalendarDisplayType
namespace Wino.Core.Domain.Enums
{
public enum CalendarDisplayType
{
Day,
Week,
WorkWeek,
Month,
Year
}
}

View File

@@ -1,7 +1,8 @@
namespace Wino.Core.Domain.Enums;
public enum CalendarEventTargetType
namespace Wino.Core.Domain.Enums
{
public enum CalendarEventTargetType
{
Single, // Show details for a single event.
Series // Show the series event. Parent of all recurring events.
}
}

View File

@@ -1,10 +1,11 @@
namespace Wino.Core.Domain.Enums;
/// <summary>
/// Trigger to load more data.
/// </summary>
public enum CalendarInitInitiative
namespace Wino.Core.Domain.Enums
{
/// <summary>
/// Trigger to load more data.
/// </summary>
public enum CalendarInitInitiative
{
User,
App
}
}

View File

@@ -1,9 +1,10 @@
namespace Wino.Core.Domain.Enums;
public enum CalendarItemRecurrenceFrequency
namespace Wino.Core.Domain.Enums
{
public enum CalendarItemRecurrenceFrequency
{
Daily,
Weekly,
Monthly,
Yearly
}
}

View File

@@ -1,7 +1,8 @@
namespace Wino.Core.Domain.Enums;
public enum CalendarItemReminderType
namespace Wino.Core.Domain.Enums
{
public enum CalendarItemReminderType
{
Popup,
Email
}
}

View File

@@ -1,9 +1,10 @@
namespace Wino.Core.Domain.Enums;
public enum CalendarItemStatus
namespace Wino.Core.Domain.Enums
{
public enum CalendarItemStatus
{
NotResponded,
Confirmed,
Tentative,
Cancelled,
}
}

View File

@@ -1,9 +1,10 @@
namespace Wino.Core.Domain.Enums;
public enum CalendarItemVisibility
namespace Wino.Core.Domain.Enums
{
public enum CalendarItemVisibility
{
Default,
Public,
Private,
Confidential
}
}

View File

@@ -1,11 +1,12 @@
namespace Wino.Core.Domain.Enums;
/// <summary>
/// Which way in time to load more data for calendar.
/// </summary>
public enum CalendarLoadDirection
namespace Wino.Core.Domain.Enums
{
/// <summary>
/// Which way in time to load more data for calendar.
/// </summary>
public enum CalendarLoadDirection
{
Replace,
Previous,
Next
}
}

View File

@@ -1,7 +1,8 @@
namespace Wino.Core.Domain.Enums;
public enum CalendarOrientation
namespace Wino.Core.Domain.Enums
{
public enum CalendarOrientation
{
Horizontal,
Vertical
}
}

View File

@@ -1,10 +1,11 @@
namespace Wino.Core.Domain.Enums;
public enum CalendarSynchronizationType
namespace Wino.Core.Domain.Enums
{
public enum CalendarSynchronizationType
{
ExecuteRequests, // Execute all requests in the queue.
CalendarMetadata, // Sync calendar metadata.
CalendarEvents, // Sync all events for all calendars.
SingleCalendar, // Sync events for only specified calendars.
UpdateProfile // Update profile information only.
}
}

View File

@@ -1,7 +1,7 @@
namespace Wino.Core.Domain.Enums;
public enum ChangeRequestType
namespace Wino.Core.Domain.Enums
{
public enum ChangeRequestType
{
MailMarkAs,
MailChangeFlag,
MailHardDelete,
@@ -20,4 +20,5 @@ public enum ChangeRequestType
DiscardDraft,
SendDraft,
FetchSingleItem
}
}

View File

@@ -1,7 +1,8 @@
namespace Wino.Core.Domain.Enums;
public enum CustomIncomingServerType
namespace Wino.Core.Domain.Enums
{
public enum CustomIncomingServerType
{
POP3,
IMAP4
}
}

View File

@@ -1,7 +1,8 @@
namespace Wino.Core.Domain.Enums;
public enum DayHeaderDisplayType
namespace Wino.Core.Domain.Enums
{
public enum DayHeaderDisplayType
{
TwelveHour,
TwentyFourHour,
}
}

View File

@@ -1,9 +1,10 @@
namespace Wino.Core.Domain.Enums;
public enum DraftCreationReason
namespace Wino.Core.Domain.Enums
{
public enum DraftCreationReason
{
Empty,
Reply,
ReplyAll,
Forward
}
}

View File

@@ -1,10 +1,11 @@
namespace Wino.Core.Domain.Enums;
public enum FilterOptionType
namespace Wino.Core.Domain.Enums
{
public enum FilterOptionType
{
All,
Unread,
Flagged,
Mentions,
Files
}
}

View File

@@ -1,12 +1,12 @@
namespace Wino.Core.Domain.Enums;
/// <summary>
/// Defines all possible folder operations that can be done.
/// Available values for each folder is returned by IContextMenuProvider
/// that integrators hold.
/// </summary>
public enum FolderOperation
namespace Wino.Core.Domain.Enums
{
/// <summary>
/// Defines all possible folder operations that can be done.
/// Available values for each folder is returned by IContextMenuProvider
/// that integrators hold.
/// </summary>
public enum FolderOperation
{
None,
Pin,
Unpin,
@@ -19,4 +19,5 @@ public enum FolderOperation
TurnOffNotifications,
CreateSubFolder,
Seperator
}
}

View File

@@ -1,7 +1,7 @@
namespace Wino.Core.Domain.Enums;
public enum ImapAuthenticationMethod
namespace Wino.Core.Domain.Enums
{
public enum ImapAuthenticationMethod
{
Auto,
None,
NormalPassword,
@@ -9,4 +9,5 @@ public enum ImapAuthenticationMethod
Ntlm,
CramMd5,
DigestMd5
}
}

View File

@@ -1,9 +1,10 @@
namespace Wino.Core.Domain.Enums;
public enum ImapConnectionSecurity
namespace Wino.Core.Domain.Enums
{
public enum ImapConnectionSecurity
{
Auto,
None,
StartTls,
SslTls
}
}

View File

@@ -1,7 +1,8 @@
namespace Wino.Core.Domain.Enums;
public enum InfoBarAnimationType
namespace Wino.Core.Domain.Enums
{
public enum InfoBarAnimationType
{
SlideFromRightToLeft,
SlideFromBottomToTop
}
}

View File

@@ -1,9 +1,10 @@
namespace Wino.Core.Domain.Enums;
public enum InfoBarMessageType
namespace Wino.Core.Domain.Enums
{
public enum InfoBarMessageType
{
Information,
Success,
Warning,
Error
}
}

View File

@@ -1,7 +1,7 @@
namespace Wino.Core.Domain.Enums;
public enum MailAttachmentType
namespace Wino.Core.Domain.Enums
{
public enum MailAttachmentType
{
None,
Executable,
Image,
@@ -12,4 +12,5 @@ public enum MailAttachmentType
RarArchive,
Archive,
Other
}
}

View File

@@ -1,8 +1,9 @@
namespace Wino.Core.Domain.Enums;
public enum MailImportance
namespace Wino.Core.Domain.Enums
{
public enum MailImportance
{
Low,
Normal,
High
}
}

View File

@@ -1,9 +1,9 @@
namespace Wino.Core.Domain.Enums;
public enum MailListDisplayMode
namespace Wino.Core.Domain.Enums
{
public enum MailListDisplayMode
{
Spacious,
Medium,
Compact,
}
}

View File

@@ -1,8 +1,9 @@
namespace Wino.Core.Domain.Enums;
public enum MailMarkAsOption
namespace Wino.Core.Domain.Enums
{
public enum MailMarkAsOption
{
WhenSelected,
DontMark,
AfterDelay
}
}

View File

@@ -1,8 +1,8 @@
namespace Wino.Core.Domain.Enums;
// Synchronizer requests.
public enum MailSynchronizerOperation
namespace Wino.Core.Domain.Enums
{
// Synchronizer requests.
public enum MailSynchronizerOperation
{
MarkRead,
Move,
Delete, // Hard delete.
@@ -12,18 +12,18 @@ public enum MailSynchronizerOperation
AlwaysMoveTo,
MoveToFocused,
Archive,
}
}
public enum FolderSynchronizerOperation
{
public enum FolderSynchronizerOperation
{
RenameFolder,
EmptyFolder,
MarkFolderRead,
}
}
// UI requests
public enum MailOperation
{
// UI requests
public enum MailOperation
{
None,
Archive,
UnArchive,
@@ -54,4 +54,5 @@ public enum MailOperation
ViewMessageSource,
DiscardLocalDraft,
Navigate // For toast activation
}
}

View File

@@ -1,8 +1,9 @@
namespace Wino.Core.Domain.Enums;
public enum MailProviderType
namespace Wino.Core.Domain.Enums
{
public enum MailProviderType
{
Outlook,
Gmail,
IMAP4 = 4 // 2-3 were removed after release. Don't change for backward compatibility.
}
}

View File

@@ -1,7 +1,7 @@
namespace Wino.Core.Domain.Enums;
public enum MailSynchronizationType
namespace Wino.Core.Domain.Enums
{
public enum MailSynchronizationType
{
UpdateProfile, // Only update profile information
ExecuteRequests, // Run the queued requests, and then synchronize if needed.
FoldersOnly, // Only synchronize folder metadata.
@@ -10,4 +10,5 @@ public enum MailSynchronizationType
FullFolders, // Synchronize all folders. This won't update profile or alias information.
Alias, // Only update alias information
IMAPIdle // Idle client triggered synchronization.
}
}

View File

@@ -1,7 +1,8 @@
namespace Wino.Core.Domain.Enums;
public enum NavigationReferenceFrame
namespace Wino.Core.Domain.Enums
{
public enum NavigationReferenceFrame
{
ShellFrame,
RenderingFrame
}
}

View File

@@ -1,11 +1,12 @@
namespace Wino.Core.Domain.Enums;
/// <summary>
/// Defines the potential reasons for picking folder in the folder picking dialog.
/// </summary>
public enum PickFolderReason
namespace Wino.Core.Domain.Enums
{
/// <summary>
/// Defines the potential reasons for picking folder in the folder picking dialog.
/// </summary>
public enum PickFolderReason
{
Move,
SpecialFolder,
Any
}
}

View File

@@ -1,9 +1,10 @@
namespace Wino.Core.Domain.Enums;
public enum PrintingResult
namespace Wino.Core.Domain.Enums
{
public enum PrintingResult
{
Abandoned,
Canceled,
Failed,
Submitted
}
}

View File

@@ -1,6 +0,0 @@
namespace Wino.Core.Domain.Enums;
public enum SearchMode
{
Local,
Online
}

View File

@@ -1,11 +1,12 @@
namespace Wino.Core.Domain.Enums;
/// <summary>
/// What should happen to server app when the client is terminated.
/// </summary>
public enum ServerBackgroundMode
namespace Wino.Core.Domain.Enums
{
/// <summary>
/// What should happen to server app when the client is terminated.
/// </summary>
public enum ServerBackgroundMode
{
MinimizedTray, // Still runs, tray icon is visible.
Invisible, // Still runs, tray icon is invisible.
Terminate // Server is terminated as Wino terminates.
}
}

View File

@@ -1,7 +1,8 @@
namespace Wino.Core.Domain.Enums;
public enum SortingOptionType
namespace Wino.Core.Domain.Enums
{
public enum SortingOptionType
{
ReceiveDate,
Sender
}
}

View File

@@ -1,7 +1,7 @@
namespace Wino.Core.Domain.Enums;
public enum SpecialFolderType
namespace Wino.Core.Domain.Enums
{
public enum SpecialFolderType
{
Inbox,
Starred,
Important,
@@ -20,4 +20,5 @@ public enum SpecialFolderType
Social,
Other,
More
}
}

View File

@@ -1,8 +1,9 @@
namespace Wino.Core.Domain.Enums;
public enum SpecialImapProvider
namespace Wino.Core.Domain.Enums
{
public enum SpecialImapProvider
{
None,
iCloud,
Yahoo
}
}

View File

@@ -1,10 +1,11 @@
namespace Wino.Core.Domain.Enums;
public enum StartupBehaviorResult
namespace Wino.Core.Domain.Enums
{
public enum StartupBehaviorResult
{
Enabled,
Disabled,
DisabledByUser,
DisabledByPolicy,
Fatal
}
}

View File

@@ -1,8 +1,8 @@
namespace Wino.Core.Domain.Enums;
// From the SDK.
public enum StorePurchaseResult
namespace Wino.Core.Domain.Enums
{
// From the SDK.
public enum StorePurchaseResult
{
//
// Summary:
// The purchase request succeeded.
@@ -15,4 +15,5 @@ public enum StorePurchaseResult
// Summary:
// The purchase request did not succeed.
NotPurchased,
}
}

View File

@@ -1,8 +1,9 @@
namespace Wino.Core.Domain.Enums;
public enum SynchronizationCompletedState
namespace Wino.Core.Domain.Enums
{
public enum SynchronizationCompletedState
{
Success, // All succeeded.
Canceled, // Canceled by user or HTTP call.
Failed // Exception.
}
}

View File

@@ -1,11 +1,12 @@
namespace Wino.Core.Domain.Enums;
/// <summary>
/// Enumeration for the source of synchronization.
/// Right now it can either be from the client or the server.
/// </summary>
public enum SynchronizationSource
namespace Wino.Core.Domain.Enums
{
/// <summary>
/// Enumeration for the source of synchronization.
/// Right now it can either be from the client or the server.
/// </summary>
public enum SynchronizationSource
{
Client,
Server
}
}

View File

@@ -1,8 +1,9 @@
namespace Wino.Core.Domain.Enums;
public enum WinoAppType
namespace Wino.Core.Domain.Enums
{
public enum WinoAppType
{
Unknown,
Mail,
Calendar
}
}

View File

@@ -1,9 +1,10 @@
namespace Wino.Core.Domain.Enums;
public enum WinoCustomMessageDialogIcon
namespace Wino.Core.Domain.Enums
{
public enum WinoCustomMessageDialogIcon
{
Information,
Warning,
Error,
Question
}
}

View File

@@ -1,10 +1,10 @@
namespace Wino.Core.Domain.Enums;
/// <summary>
/// All registered views.
/// </summary>
public enum WinoPage
namespace Wino.Core.Domain.Enums
{
/// <summary>
/// All registered views.
/// </summary>
public enum WinoPage
{
None,
IdlePage,
ComposePage,
@@ -30,4 +30,5 @@ public enum WinoPage
CalendarPage,
CalendarSettingsPage,
EventDetailsPage
}
}

View File

@@ -1,10 +1,11 @@
namespace Wino.Core.Domain.Enums;
public enum WinoServerConnectionStatus
namespace Wino.Core.Domain.Enums
{
public enum WinoServerConnectionStatus
{
None,
Connecting,
Connected,
Disconnected,
Failed
}
}

View File

@@ -1,6 +1,7 @@
namespace Wino.Core.Domain.Exceptions;
public class AccountSetupCanceledException : System.Exception
namespace Wino.Core.Domain.Exceptions
{
public class AccountSetupCanceledException : System.Exception
{
}
}

View File

@@ -1,18 +1,19 @@
using System;
using Wino.Core.Domain.Entities.Shared;
namespace Wino.Core.Domain.Exceptions;
/// <summary>
/// Thrown when IAuthenticator requires user interaction to fix authentication issues.
/// It can be expired and can't restorable token, or some stuff that requires re-authentication.
/// </summary>
public class AuthenticationAttentionException : Exception
namespace Wino.Core.Domain.Exceptions
{
/// <summary>
/// Thrown when IAuthenticator requires user interaction to fix authentication issues.
/// It can be expired and can't restorable token, or some stuff that requires re-authentication.
/// </summary>
public class AuthenticationAttentionException : Exception
{
public AuthenticationAttentionException(MailAccount account)
{
Account = account;
}
public MailAccount Account { get; }
}
}

View File

@@ -1,12 +1,12 @@
using System;
namespace Wino.Core.Domain.Exceptions;
/// <summary>
/// All exceptions related to authentication.
/// </summary>
public class AuthenticationException : Exception
namespace Wino.Core.Domain.Exceptions
{
/// <summary>
/// All exceptions related to authentication.
/// </summary>
public class AuthenticationException : Exception
{
public AuthenticationException(string message) : base(message)
{
}
@@ -14,4 +14,5 @@ public class AuthenticationException : Exception
public AuthenticationException(string message, Exception innerException) : base(message, innerException)
{
}
}
}

View File

@@ -1,8 +1,9 @@
using System;
namespace Wino.Core.Domain.Exceptions;
/// <summary>
/// An exception thrown when the background task registration is failed.
/// </summary>
public class BackgroundTaskRegistrationFailedException : Exception { }
namespace Wino.Core.Domain.Exceptions
{
/// <summary>
/// An exception thrown when the background task registration is failed.
/// </summary>
public class BackgroundTaskRegistrationFailedException : Exception { }
}

View File

@@ -1,10 +1,11 @@
using System;
namespace Wino.Core.Domain.Exceptions;
/// <summary>
/// Thrown when composer cant find the mime to load.
/// </summary>
public class ComposerMimeNotFoundException : Exception
namespace Wino.Core.Domain.Exceptions
{
/// <summary>
/// Thrown when composer cant find the mime to load.
/// </summary>
public class ComposerMimeNotFoundException : Exception
{
}
}

View File

@@ -1,10 +1,11 @@
using System;
namespace Wino.Core.Domain.Exceptions;
public class CustomThemeCreationFailedException : Exception
namespace Wino.Core.Domain.Exceptions
{
public class CustomThemeCreationFailedException : Exception
{
public CustomThemeCreationFailedException(string message) : base(message)
{
}
}
}

View File

@@ -1,6 +1,7 @@
namespace Wino.Core.Domain.Exceptions;
public class GoogleAuthenticationException : System.Exception
namespace Wino.Core.Domain.Exceptions
{
public class GoogleAuthenticationException : System.Exception
{
public GoogleAuthenticationException(string message) : base(message) { }
}
}

View File

@@ -1,30 +1,14 @@
using System;
using Wino.Core.Domain.Entities.Shared;
namespace Wino.Core.Domain.Exceptions;
public class ImapClientPoolException : Exception
namespace Wino.Core.Domain.Exceptions
{
public ImapClientPoolException()
public class ImapClientPoolException : Exception
{
}
public ImapClientPoolException(string message, CustomServerInformation customServerInformation, string protocolLog) : base(message)
{
CustomServerInformation = customServerInformation;
ProtocolLog = protocolLog;
}
public ImapClientPoolException(string message, string protocolLog) : base(message)
{
ProtocolLog = protocolLog;
}
public ImapClientPoolException(Exception innerException, string protocolLog) : base(Translator.Exception_ImapClientPoolFailed, innerException)
{
ProtocolLog = protocolLog;
}
public CustomServerInformation CustomServerInformation { get; }
public string ProtocolLog { get; }
}
}

View File

@@ -1,9 +1,9 @@
using Wino.Core.Domain.Models.AutoDiscovery;
namespace Wino.Core.Domain.Exceptions;
public class ImapConnectionFailedPackage
namespace Wino.Core.Domain.Exceptions
{
public class ImapConnectionFailedPackage
{
public ImapConnectionFailedPackage(string errorMessage, string protocolLog, AutoDiscoverySettings settings)
{
ErrorMessage = errorMessage;
@@ -14,4 +14,5 @@ public class ImapConnectionFailedPackage
public AutoDiscoverySettings Settings { get; }
public string ErrorMessage { get; set; }
public string ProtocolLog { get; }
}
}

View File

@@ -1,9 +1,10 @@
namespace Wino.Core.Domain.Exceptions;
public class ImapSynchronizerStrategyException : System.Exception
namespace Wino.Core.Domain.Exceptions
{
public class ImapSynchronizerStrategyException : System.Exception
{
public ImapSynchronizerStrategyException(string message) : base(message)
{
}
}
}

View File

@@ -1,7 +1,7 @@
namespace Wino.Core.Domain.Exceptions;
public class ImapTestSSLCertificateException : System.Exception
namespace Wino.Core.Domain.Exceptions
{
public class ImapTestSSLCertificateException : System.Exception
{
public ImapTestSSLCertificateException(string issuer, string expirationDateString, string validFromDateString)
{
Issuer = issuer;
@@ -13,4 +13,5 @@ public class ImapTestSSLCertificateException : System.Exception
public string ExpirationDateString { get; set; }
public string ValidFromDateString { get; set; }
}
}

View File

@@ -1,5 +1,6 @@
using System;
namespace Wino.Core.Domain.Exceptions;
public class InvalidMoveTargetException : Exception { }
namespace Wino.Core.Domain.Exceptions
{
public class InvalidMoveTargetException : Exception { }
}

View File

@@ -1,6 +1,7 @@
namespace Wino.Core.Domain.Exceptions;
public class MissingAliasException : System.Exception
namespace Wino.Core.Domain.Exceptions
{
public class MissingAliasException : System.Exception
{
public MissingAliasException() : base(Translator.Exception_MissingAlias) { }
}
}

View File

@@ -1,10 +1,11 @@
using System;
namespace Wino.Core.Domain.Exceptions;
public class SynchronizerEntityNotFoundException : Exception
namespace Wino.Core.Domain.Exceptions
{
public class SynchronizerEntityNotFoundException : Exception
{
public SynchronizerEntityNotFoundException(string message) : base(message)
{
}
}
}

View File

@@ -1,9 +1,9 @@
using System;
namespace Wino.Core.Domain.Exceptions;
public class SynchronizerException : Exception
namespace Wino.Core.Domain.Exceptions
{
public class SynchronizerException : Exception
{
public SynchronizerException(string message) : base(message)
{
}
@@ -11,4 +11,5 @@ public class SynchronizerException : Exception
public SynchronizerException(string message, Exception innerException) : base(message, innerException)
{
}
}
}

View File

@@ -1,6 +1,7 @@
namespace Wino.Core.Domain.Exceptions;
/// <summary>
/// When IMAP account's system folder configuration setup is not done yet.
/// </summary>
public class SystemFolderConfigurationMissingException : System.Exception { }
namespace Wino.Core.Domain.Exceptions
{
/// <summary>
/// When IMAP account's system folder configuration setup is not done yet.
/// </summary>
public class SystemFolderConfigurationMissingException : System.Exception { }
}

View File

@@ -1,13 +1,13 @@
using System;
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Exceptions;
/// <summary>
/// Emitted when special folder is needed for an operation but it couldn't be found.
/// </summary>
public class UnavailableSpecialFolderException : Exception
namespace Wino.Core.Domain.Exceptions
{
/// <summary>
/// Emitted when special folder is needed for an operation but it couldn't be found.
/// </summary>
public class UnavailableSpecialFolderException : Exception
{
public UnavailableSpecialFolderException(SpecialFolderType specialFolderType, Guid accountId)
{
SpecialFolderType = specialFolderType;
@@ -16,4 +16,5 @@ public class UnavailableSpecialFolderException : Exception
public SpecialFolderType SpecialFolderType { get; }
public Guid AccountId { get; set; }
}
}

View File

@@ -1,11 +1,12 @@
using System;
namespace Wino.Core.Domain.Exceptions;
/// <summary>
/// All server crash types. Wino Server ideally should not throw anything else than this Exception type.
/// </summary>
public class WinoServerException : Exception
namespace Wino.Core.Domain.Exceptions
{
/// <summary>
/// All server crash types. Wino Server ideally should not throw anything else than this Exception type.
/// </summary>
public class WinoServerException : Exception
{
public WinoServerException(string message) : base(message) { }
}
}

View File

@@ -1,10 +1,10 @@
using System;
using Wino.Core.Domain.Models.Calendar;
namespace Wino.Core.Domain.Extensions;
public static class DateTimeExtensions
namespace Wino.Core.Domain.Extensions
{
public static class DateTimeExtensions
{
/// <summary>
/// Returns a date range for the month of the given date.
/// </summary>
@@ -29,4 +29,5 @@ public static class DateTimeExtensions
// Start loading from this date instead of visible date.
return date.AddDays(-diff).Date;
}
}
}

View File

@@ -1,10 +1,10 @@
using System;
using System.Collections.Generic;
namespace Wino.Core.Domain.Extensions;
public static class ExceptionExtensions
namespace Wino.Core.Domain.Extensions
{
public static class ExceptionExtensions
{
public static IEnumerable<Exception> GetInnerExceptions(this Exception ex)
{
if (ex == null)
@@ -20,4 +20,5 @@ public static class ExceptionExtensions
}
while (innerException != null);
}
}
}

View File

@@ -1,10 +1,10 @@
using System;
using System.IO;
namespace Wino.Core.Domain.Extensions;
public static class MimeExtensions
namespace Wino.Core.Domain.Extensions
{
public static class MimeExtensions
{
public static string GetBase64MimeMessage(this MimeKit.MimeMessage message)
{
using MemoryStream memoryStream = new();
@@ -16,4 +16,5 @@ public static class MimeExtensions
public static MimeKit.MimeMessage GetMimeMessageFromBase64(this string base64)
=> MimeKit.MimeMessage.Load(new System.IO.MemoryStream(Convert.FromBase64String(base64)));
}
}

View File

@@ -1,9 +1,9 @@
using System;
namespace Wino.Core.Domain.Interfaces;
public interface IAccountCalendar
namespace Wino.Core.Domain.Interfaces
{
public interface IAccountCalendar
{
string Name { get; set; }
string TextColorHex { get; set; }
string BackgroundColorHex { get; set; }
@@ -12,4 +12,5 @@ public interface IAccountCalendar
string RemoteCalendarId { get; set; }
bool IsExtended { get; set; }
Guid Id { get; set; }
}
}

View File

@@ -2,11 +2,12 @@
using System.Threading.Tasks;
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Interfaces;
public interface IAccountCreationDialog
namespace Wino.Core.Domain.Interfaces
{
public interface IAccountCreationDialog
{
Task ShowDialogAsync(CancellationTokenSource cancellationTokenSource);
void Complete(bool cancel);
AccountCreationDialogState State { get; set; }
}
}

Some files were not shown because too many files have changed in this diff Show More