diff options
Diffstat (limited to 'Jellyfin.Database/Jellyfin.Database.Providers.PgSql/PgSqlDatabaseProvider.cs')
| -rw-r--r-- | Jellyfin.Database/Jellyfin.Database.Providers.PgSql/PgSqlDatabaseProvider.cs | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.PgSql/PgSqlDatabaseProvider.cs b/Jellyfin.Database/Jellyfin.Database.Providers.PgSql/PgSqlDatabaseProvider.cs new file mode 100644 index 000000000..ccaf38d2a --- /dev/null +++ b/Jellyfin.Database/Jellyfin.Database.Providers.PgSql/PgSqlDatabaseProvider.cs @@ -0,0 +1,77 @@ +using System; +using System.Diagnostics; +using System.Reflection; +using Jellyfin.Server.Implementations; +using Jellyfin.Server.Implementations.DatabaseConfiguration; +using MediaBrowser.Common.Configuration; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; +using Npgsql; + +namespace Jellyfin.Database.Providers.PgSql; + +/// <summary> +/// Configures jellyfin to use an Postgres database. +/// </summary> +[JellyfinDatabaseProviderKey("Jellyfin-PgSql")] +public sealed class PgSqlDatabaseProvider : IJellyfinDatabaseProvider +{ + private readonly IConfigurationManager _configurationManager; + private readonly ILogger<PgSqlDatabaseProvider> _logger; + + /// <summary> + /// Initializes a new instance of the <see cref="PgSqlDatabaseProvider"/> class. + /// </summary> + /// <param name="configurationManager">Configuration manager to get PgSQL connection data.</param> + /// <param name="logger">A logger.</param> + public PgSqlDatabaseProvider(IConfigurationManager configurationManager, ILogger<PgSqlDatabaseProvider> logger) + { + _configurationManager = configurationManager; + _logger = logger; + } + + /// <inheritdoc/> + public IDbContextFactory<JellyfinDbContext>? DbContextFactory { get; set; } + + /// <inheritdoc/> + public void Initialise(DbContextOptionsBuilder options) + { + var dbSettings = _configurationManager.GetConfiguration<DatabaseConfigurationOptions>("database"); + + if (dbSettings.PostgreSql is null) + { + throw new InvalidOperationException("Selected PgSQL as database provider but did not provide required configuration. Please see docs."); + } + + var connectionBuilder = new NpgsqlConnectionStringBuilder(); + connectionBuilder.ApplicationName = $"jellyfin+{FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly()!.Location).FileVersion}"; + connectionBuilder.CommandTimeout = dbSettings.PostgreSql.Timeout; + connectionBuilder.Database = dbSettings.PostgreSql.DatabaseName; + connectionBuilder.Username = dbSettings.PostgreSql.Username; + connectionBuilder.Password = dbSettings.PostgreSql.Password; + connectionBuilder.Host = dbSettings.PostgreSql.ServerName; + connectionBuilder.Port = dbSettings.PostgreSql.Port; + + var connectionString = connectionBuilder.ToString(); + + options + .UseNpgsql(connectionString, pgSqlOptions => pgSqlOptions.MigrationsAssembly(GetType().Assembly)); + } + + /// <inheritdoc/> + public Task RunScheduledOptimisation(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } + + /// <inheritdoc/> + public void OnModelCreating(ModelBuilder modelBuilder) + { + } + + /// <inheritdoc/> + public Task RunShutdownTask(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } +} |
