Remove sqlite base64 contact store from AccountContact.

This commit is contained in:
Burak Kaan Köse
2026-03-07 11:43:56 +01:00
parent 8e8b123aa6
commit 09f1cee3a5
18 changed files with 136 additions and 103 deletions
+42 -2
View File
@@ -42,6 +42,7 @@ public class AccountService : BaseDatabaseService, IAccountService
private readonly IAuthenticationProvider _authenticationProvider;
private readonly IMimeFileService _mimeFileService;
private readonly IPreferencesService _preferencesService;
private readonly IContactPictureFileService _contactPictureFileService;
private readonly ILogger _logger = Log.ForContext<AccountService>();
@@ -49,12 +50,14 @@ public class AccountService : BaseDatabaseService, IAccountService
ISignatureService signatureService,
IAuthenticationProvider authenticationProvider,
IMimeFileService mimeFileService,
IPreferencesService preferencesService) : base(databaseService)
IPreferencesService preferencesService,
IContactPictureFileService contactPictureFileService) : base(databaseService)
{
_signatureService = signatureService;
_authenticationProvider = authenticationProvider;
_mimeFileService = mimeFileService;
_preferencesService = preferencesService;
_contactPictureFileService = contactPictureFileService;
}
@@ -399,11 +402,19 @@ public class AccountService : BaseDatabaseService, IAccountService
}
// Forcefully add or update a contact data with the provided information.
var existingContact = await Connection.Table<AccountContact>()
.FirstOrDefaultAsync(a => a.Address == account.Address)
.ConfigureAwait(false);
var contactPictureFileId = await SaveProfilePictureAsync(
account.Base64ProfilePictureData,
existingContact?.ContactPictureFileId).ConfigureAwait(false);
var accountContact = new AccountContact()
{
Address = account.Address,
Name = account.SenderName,
Base64ContactPicture = account.Base64ProfilePictureData,
ContactPictureFileId = contactPictureFileId,
IsRootContact = true
};
@@ -413,6 +424,35 @@ public class AccountService : BaseDatabaseService, IAccountService
}
}
private async Task<Guid?> SaveProfilePictureAsync(string base64ProfilePictureData, Guid? existingFileId)
{
if (string.IsNullOrWhiteSpace(base64ProfilePictureData))
{
if (existingFileId.HasValue)
await _contactPictureFileService.DeleteContactPictureAsync(existingFileId.Value).ConfigureAwait(false);
return null;
}
byte[] bytes;
try
{
bytes = Convert.FromBase64String(base64ProfilePictureData);
}
catch (FormatException ex)
{
_logger.Warning(ex, "Failed to decode account profile picture for contact migration.");
return existingFileId;
}
var newFileId = await _contactPictureFileService.SaveContactPictureAsync(bytes).ConfigureAwait(false);
if (existingFileId.HasValue)
await _contactPictureFileService.DeleteContactPictureAsync(existingFileId.Value).ConfigureAwait(false);
return newFileId;
}
public async Task<MailAccount> GetAccountAsync(Guid accountId)
{
var account = await Connection.Table<MailAccount>().FirstOrDefaultAsync(a => a.Id == accountId);