Re-implemented signature page to support different signatures for different actions
This commit is contained in:
@@ -244,9 +244,7 @@ namespace Wino.Core.Services
|
||||
|
||||
await Connection.Table<TokenInformation>().Where(a => a.AccountId == account.Id).DeleteAsync();
|
||||
await Connection.Table<MailItemFolder>().DeleteAsync(a => a.MailAccountId == account.Id);
|
||||
|
||||
if (account.SignatureId != null)
|
||||
await Connection.Table<AccountSignature>().DeleteAsync(a => a.Id == account.SignatureId);
|
||||
await Connection.Table<AccountSignature>().DeleteAsync(a => a.MailAccountId == account.Id);
|
||||
|
||||
// Account belongs to a merged inbox.
|
||||
// In case of there'll be a single account in the merged inbox, remove the merged inbox as well.
|
||||
@@ -355,12 +353,14 @@ namespace Wino.Core.Services
|
||||
if (isMicrosoftProvider)
|
||||
account.Preferences.IsFocusedInboxEnabled = true;
|
||||
|
||||
await Connection.InsertAsync(preferences);
|
||||
|
||||
// Create default signature.
|
||||
// Setup default signature.
|
||||
var defaultSignature = await _signatureService.CreateDefaultSignatureAsync(account.Id);
|
||||
|
||||
account.SignatureId = defaultSignature.Id;
|
||||
account.Preferences.SignatureIdForNewMessages = defaultSignature.Id;
|
||||
account.Preferences.SignatureIdForFollowingMessages = defaultSignature.Id;
|
||||
account.Preferences.IsSignatureEnabled = true;
|
||||
|
||||
await Connection.InsertAsync(preferences);
|
||||
|
||||
if (customServerInformation != null)
|
||||
await Connection.InsertAsync(customServerInformation);
|
||||
@@ -397,7 +397,5 @@ namespace Wino.Core.Services
|
||||
|
||||
return account.SynchronizationDeltaIdentifier;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -673,16 +673,26 @@ namespace Wino.Core.Services
|
||||
|
||||
builder.HtmlBody = visitor.HtmlBody;
|
||||
}
|
||||
else
|
||||
|
||||
// Append signatures if needed.
|
||||
if (account.Preferences.IsSignatureEnabled)
|
||||
{
|
||||
// Add signature if any.
|
||||
var accountSignature = await _signatureService.GetAccountSignatureAsync(account.Id);
|
||||
var signatureId = reason == DraftCreationReason.Empty ?
|
||||
account.Preferences.SignatureIdForNewMessages :
|
||||
account.Preferences.SignatureIdForFollowingMessages;
|
||||
|
||||
if (accountSignature != null)
|
||||
if (signatureId != null)
|
||||
{
|
||||
// Leave some space for new mail content.
|
||||
var signature = await _signatureService.GetSignatureAsync(signatureId.Value);
|
||||
|
||||
builder.HtmlBody = @$"<html><br><br>{accountSignature.HtmlBody}</html>";
|
||||
if (string.IsNullOrWhiteSpace(builder.HtmlBody))
|
||||
{
|
||||
builder.HtmlBody = @$"<html><br><br>{signature.HtmlBody}</html>";
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.HtmlBody += @$"{signature.HtmlBody}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -726,7 +736,7 @@ namespace Wino.Core.Services
|
||||
message.Body = builder.ToMessageBody();
|
||||
}
|
||||
|
||||
InternetAddressList ExtractRecipients(string parameterValue)
|
||||
static InternetAddressList ExtractRecipients(string parameterValue)
|
||||
{
|
||||
var list = new InternetAddressList();
|
||||
|
||||
|
||||
@@ -1,91 +1,58 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Wino.Core.Domain.Entities;
|
||||
using Wino.Core.Domain.Interfaces;
|
||||
|
||||
namespace Wino.Core.Services
|
||||
{
|
||||
public class SignatureService : BaseDatabaseService, ISignatureService
|
||||
public class SignatureService(IDatabaseService databaseService) : BaseDatabaseService(databaseService), ISignatureService
|
||||
{
|
||||
public SignatureService(IDatabaseService databaseService) : base(databaseService) { }
|
||||
|
||||
public async Task<AccountSignature> CreateDefaultSignatureAsync(Guid accountId)
|
||||
public async Task<AccountSignature> GetSignatureAsync(Guid signatureId)
|
||||
{
|
||||
var account = await Connection.Table<MailAccount>().FirstOrDefaultAsync(a => a.Id == accountId);
|
||||
|
||||
var defaultSignature = GetDefaultSignature();
|
||||
|
||||
await Connection.InsertAsync(defaultSignature);
|
||||
|
||||
account.SignatureId = defaultSignature.Id;
|
||||
|
||||
await Connection.UpdateAsync(account);
|
||||
|
||||
return defaultSignature;
|
||||
return await Connection.Table<AccountSignature>().FirstAsync(s => s.Id == signatureId);
|
||||
}
|
||||
|
||||
public async Task DeleteAccountSignatureAssignment(Guid accountId)
|
||||
public async Task<List<AccountSignature>> GetSignaturesAsync(Guid accountId)
|
||||
{
|
||||
var existingSignature = await GetAccountSignatureAsync(accountId);
|
||||
|
||||
if (existingSignature != null)
|
||||
{
|
||||
await Connection.DeleteAsync(existingSignature);
|
||||
|
||||
var account = await Connection.Table<MailAccount>().FirstOrDefaultAsync(a => a.Id == accountId);
|
||||
|
||||
account.SignatureId = null;
|
||||
|
||||
await Connection.UpdateAsync(account);
|
||||
}
|
||||
return await Connection.Table<AccountSignature>().Where(s => s.MailAccountId == accountId).ToListAsync();
|
||||
}
|
||||
|
||||
public async Task<AccountSignature> GetAccountSignatureAsync(Guid accountId)
|
||||
public async Task<AccountSignature> CreateSignatureAsync(AccountSignature signature)
|
||||
{
|
||||
var account = await Connection.Table<MailAccount>().FirstOrDefaultAsync(a => a.Id == accountId);
|
||||
|
||||
if (account?.SignatureId == null)
|
||||
return null;
|
||||
|
||||
return await Connection.Table<AccountSignature>().FirstOrDefaultAsync(a => a.Id == account.SignatureId);
|
||||
}
|
||||
|
||||
public async Task<AccountSignature> UpdateAccountSignatureAsync(Guid accountId, string htmlBody)
|
||||
{
|
||||
var signature = await GetAccountSignatureAsync(accountId);
|
||||
var account = await Connection.Table<MailAccount>().FirstOrDefaultAsync(a => a.Id == accountId);
|
||||
|
||||
if (signature == null)
|
||||
{
|
||||
signature = new AccountSignature()
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
HtmlBody = htmlBody
|
||||
};
|
||||
|
||||
await Connection.InsertAsync(signature);
|
||||
}
|
||||
else
|
||||
{
|
||||
signature.HtmlBody = htmlBody;
|
||||
|
||||
await Connection.UpdateAsync(signature);
|
||||
}
|
||||
|
||||
account.SignatureId = signature.Id;
|
||||
|
||||
await Connection.UpdateAsync(account);
|
||||
await Connection.InsertAsync(signature);
|
||||
|
||||
return signature;
|
||||
}
|
||||
|
||||
private AccountSignature GetDefaultSignature()
|
||||
public async Task<AccountSignature> CreateDefaultSignatureAsync(Guid accountId)
|
||||
{
|
||||
return new AccountSignature()
|
||||
var defaultSignature = new AccountSignature()
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
MailAccountId = accountId,
|
||||
// TODO: Should be translated?
|
||||
Name = "Wino Default Signature",
|
||||
HtmlBody = @"<p>Sent from <a href=""https://github.com/bkaankose/Wino-Mail/"">Wino Mail</a> for Windows</p>"
|
||||
};
|
||||
|
||||
await Connection.InsertAsync(defaultSignature);
|
||||
|
||||
return defaultSignature;
|
||||
}
|
||||
|
||||
public async Task<AccountSignature> UpdateSignatureAsync(AccountSignature signature)
|
||||
{
|
||||
await Connection.UpdateAsync(signature);
|
||||
|
||||
return signature;
|
||||
}
|
||||
|
||||
public async Task<AccountSignature> DeleteSignatureAsync(AccountSignature signature)
|
||||
{
|
||||
await Connection.DeleteAsync(signature);
|
||||
|
||||
return signature;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user