aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Database/Jellyfin.Database.Providers.PgSql/PgSqlDatabaseProvider.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Jellyfin.Database/Jellyfin.Database.Providers.PgSql/PgSqlDatabaseProvider.cs')
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.PgSql/PgSqlDatabaseProvider.cs75
1 files changed, 75 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..1dae3401b
--- /dev/null
+++ b/Jellyfin.Database/Jellyfin.Database.Providers.PgSql/PgSqlDatabaseProvider.cs
@@ -0,0 +1,75 @@
+using System;
+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 SqLite 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";
+ 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 ValueTask DisposeAsync()
+ {
+ return ValueTask.CompletedTask;
+ }
+}