Files
Wino-Mail/Wino.Services/DatabaseService.cs
T

68 lines
2.2 KiB
C#
Raw Normal View History

using System.IO;
2024-04-18 01:44:37 +02:00
using System.Threading.Tasks;
using SQLite;
2025-12-26 20:46:48 +01:00
using Wino.Core.Domain.Entities.Calendar;
2024-11-10 23:28:25 +01:00
using Wino.Core.Domain.Entities.Mail;
using Wino.Core.Domain.Entities.Shared;
2024-04-18 01:44:37 +02:00
using Wino.Core.Domain.Interfaces;
2025-02-16 11:54:23 +01:00
namespace Wino.Services;
public interface IDatabaseService : IInitializeAsync
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
SQLiteAsyncConnection Connection { get; }
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
public class DatabaseService : IDatabaseService
{
private const string DatabaseName = "Wino180.db";
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
private bool _isInitialized = false;
private readonly IApplicationConfiguration _folderConfiguration;
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
public SQLiteAsyncConnection Connection { get; private set; }
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
public DatabaseService(IApplicationConfiguration folderConfiguration)
{
_folderConfiguration = folderConfiguration;
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
public async Task InitializeAsync()
{
if (_isInitialized)
return;
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
var publisherCacheFolder = _folderConfiguration.PublisherSharedFolderPath;
var databaseFileName = Path.Combine(publisherCacheFolder, DatabaseName);
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
Connection = new SQLiteAsyncConnection(databaseFileName);
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
await CreateTablesAsync();
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
_isInitialized = true;
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
private async Task CreateTablesAsync()
{
2025-11-14 14:28:10 +01:00
await Task.WhenAll(
Connection.CreateTableAsync<MailCopy>(),
Connection.CreateTableAsync<MailItemFolder>(),
Connection.CreateTableAsync<MailAccount>(),
Connection.CreateTableAsync<AccountContact>(),
Connection.CreateTableAsync<CustomServerInformation>(),
Connection.CreateTableAsync<AccountSignature>(),
Connection.CreateTableAsync<MergedInbox>(),
Connection.CreateTableAsync<MailAccountPreferences>(),
Connection.CreateTableAsync<MailAccountAlias>(),
Connection.CreateTableAsync<Thumbnail>(),
2025-12-26 20:46:48 +01:00
Connection.CreateTableAsync<KeyboardShortcut>(),
Connection.CreateTableAsync<AccountCalendar>(),
Connection.CreateTableAsync<CalendarEventAttendee>(),
Connection.CreateTableAsync<CalendarItem>(),
2026-01-03 23:59:37 +01:00
Connection.CreateTableAsync<CalendarAttachment>(),
2026-02-10 21:35:55 +01:00
Connection.CreateTableAsync<Reminder>(),
Connection.CreateTableAsync<MailInvitationCalendarMapping>()
2025-02-16 11:54:23 +01:00
);
2024-04-18 01:44:37 +02:00
}
}