From 99507290802384858a399e521ca5243dfec40caf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Fri, 23 Aug 2024 02:07:50 +0200 Subject: [PATCH] New contact retrival method. --- Wino.Core/Services/ContactService.cs | 15 ++++++++++----- Wino.Core/Services/MailService.cs | 7 ++++++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Wino.Core/Services/ContactService.cs b/Wino.Core/Services/ContactService.cs index 75c25fac..4729e875 100644 --- a/Wino.Core/Services/ContactService.cs +++ b/Wino.Core/Services/ContactService.cs @@ -33,11 +33,8 @@ namespace Wino.Core.Services return Connection.QueryAsync(rawLikeQuery); } - public async Task GetAddressInformationByAddressAsync(string address) - { - return await Connection.Table().Where(a => a.Address == address).FirstOrDefaultAsync() - ?? new AccountContact() { Name = address, Address = address }; - } + public Task GetAddressInformationByAddressAsync(string address) + => Connection.Table().Where(a => a.Address == address).FirstOrDefaultAsync(); public async Task SaveAddressInformationAsync(MimeMessage message) { @@ -48,7 +45,15 @@ namespace Wino.Core.Services var addressInformations = recipients.Select(a => new AccountContact() { Name = a.Name, Address = a.Address }); foreach (var info in addressInformations) + { + var currentContact = await GetAddressInformationByAddressAsync(info.Address).ConfigureAwait(false); + + if (currentContact == null) + { + await Connection.InsertAsync(info).ConfigureAwait(false); + } await Connection.InsertOrReplaceAsync(info).ConfigureAwait(false); + } } } } diff --git a/Wino.Core/Services/MailService.cs b/Wino.Core/Services/MailService.cs index d4cf70fb..862f856a 100644 --- a/Wino.Core/Services/MailService.cs +++ b/Wino.Core/Services/MailService.cs @@ -296,7 +296,11 @@ namespace Wino.Core.Services if (!isContactCached && accountAssignment != null) { contactAssignment = await GetSenderContactForAccountAsync(accountAssignment, mailCopy.FromAddress).ConfigureAwait(false); - _ = contactCache.TryAdd(mailCopy.FromAddress, contactAssignment); + + if (contactAssignment != null) + { + _ = contactCache.TryAdd(mailCopy.FromAddress, contactAssignment); + } } mailCopy.AssignedFolder = folderAssignment; @@ -320,6 +324,7 @@ namespace Wino.Core.Services private Task GetSenderContactForAccountAsync(MailAccount account, string fromAddress) { + // Make sure to return the latest up to date contact information for the original account. if (fromAddress == account.Address) { return Task.FromResult(new AccountContact() { Address = account.Address, Name = account.SenderName, Base64ContactPicture = account.Base64ProfilePictureData });