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.cs77
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;
+ }
+}