2024-11-20 01:45:48 +01:00
|
|
|
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>(),
|
|
|
|
|
Connection.CreateTableAsync<Reminder>()
|
2025-02-16 11:54:23 +01:00
|
|
|
);
|
2024-04-18 01:44:37 +02:00
|
|
|
}
|
|
|
|
|
}
|