Creating MailAccountAlias entity.

This commit is contained in:
Burak Kaan Köse
2024-08-15 16:02:02 +02:00
parent c6047a8428
commit 05ddc0660a
4 changed files with 54 additions and 1 deletions

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using SQLite;
using Wino.Core.Domain.Enums;
@@ -73,6 +74,14 @@ namespace Wino.Core.Domain.Entities
[Ignore]
public CustomServerInformation ServerInformation { get; set; }
/// <summary>
/// Gets or sets the aliases of the account.
/// It's only synchronized for Gmail right now.
/// Other provider types are manually added by users and not verified.
/// </summary>
[Ignore]
public List<MailAccountAlias> Aliases { get; set; }
/// <summary>
/// Account preferences.
/// </summary>

View File

@@ -0,0 +1,15 @@
using System;
using SQLite;
namespace Wino.Core.Domain.Entities
{
public class MailAccountAlias
{
[PrimaryKey]
public Guid Id { get; set; }
public Guid AccountId { get; set; }
public string AliasAddress { get; set; }
public bool IsPrimary { get; set; }
public bool IsVerified { get; set; }
}
}

View File

@@ -227,12 +227,40 @@ namespace Wino.Core.Services
if (account.MergedInboxId != null)
account.MergedInbox = await GetMergedInboxInformationAsync(account.MergedInboxId.Value);
// Load aliases
account.Aliases = await GetAccountAliases(account.Id, account.Address);
account.Preferences = await GetAccountPreferencesAsync(account.Id);
}
return accounts;
}
private async Task<List<MailAccountAlias>> GetAccountAliases(Guid accountId, string primaryAccountAddress)
{
// By default all accounts must have at least 1 primary alias to create drafts for.
// If there's no alias, create one from the existing account address. Migration doesn't exists to create one for older messages.
var aliases = await Connection.Table<MailAccountAlias>().ToListAsync().ConfigureAwait(false);
if (!aliases.Any())
{
var primaryAccountAlias = new MailAccountAlias()
{
Id = Guid.NewGuid(),
AccountId = accountId,
IsPrimary = true,
AliasAddress = primaryAccountAddress,
IsVerified = true,
};
await Connection.InsertAsync(primaryAccountAlias).ConfigureAwait(false);
aliases.Add(primaryAccountAlias);
}
return aliases;
}
private Task<MergedInbox> GetMergedInboxInformationAsync(Guid mergedInboxId)
=> Connection.Table<MergedInbox>().FirstOrDefaultAsync(a => a.Id == mergedInboxId);

View File

@@ -61,7 +61,8 @@ namespace Wino.Core.Services
typeof(CustomServerInformation),
typeof(AccountSignature),
typeof(MergedInbox),
typeof(MailAccountPreferences)
typeof(MailAccountPreferences),
typeof(MailAccountAlias)
);
}
}