aboutsummaryrefslogtreecommitdiff
path: root/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/SqliteDatabaseProvider.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/SqliteDatabaseProvider.cs')
-rw-r--r--src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/SqliteDatabaseProvider.cs34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/SqliteDatabaseProvider.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/SqliteDatabaseProvider.cs
index d9eb0ae7a..e818c3524 100644
--- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/SqliteDatabaseProvider.cs
+++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/SqliteDatabaseProvider.cs
@@ -1,4 +1,5 @@
using System;
+using System.Globalization;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
@@ -16,6 +17,7 @@ namespace Jellyfin.Database.Providers.Sqlite;
[JellyfinDatabaseProviderKey("Jellyfin-SQLite")]
public sealed class SqliteDatabaseProvider : IJellyfinDatabaseProvider
{
+ private const string BackupFolderName = "SQLiteBackups";
private readonly IApplicationPaths _applicationPaths;
private readonly ILogger<SqliteDatabaseProvider> _logger;
@@ -84,4 +86,36 @@ public sealed class SqliteDatabaseProvider : IJellyfinDatabaseProvider
{
configurationBuilder.Conventions.Add(_ => new DoNotUseReturningClauseConvention());
}
+
+ /// <inheritdoc />
+ public Task<string> MigrationBackupFast(CancellationToken cancellationToken)
+ {
+ var key = DateTime.UtcNow.ToString("yyyyMMddhhmmss", CultureInfo.InvariantCulture);
+ var path = Path.Combine(_applicationPaths.DataPath, "jellyfin.db");
+ var backupFile = Path.Combine(_applicationPaths.DataPath, BackupFolderName);
+ if (!Directory.Exists(backupFile))
+ {
+ Directory.CreateDirectory(backupFile);
+ }
+
+ backupFile = Path.Combine(_applicationPaths.DataPath, $"{key}_jellyfin.db");
+ File.Copy(path, backupFile);
+ return Task.FromResult(key);
+ }
+
+ /// <inheritdoc />
+ public Task RestoreBackupFast(string key, CancellationToken cancellationToken)
+ {
+ var path = Path.Combine(_applicationPaths.DataPath, "jellyfin.db");
+ var backupFile = Path.Combine(_applicationPaths.DataPath, BackupFolderName, $"{key}_jellyfin.db");
+
+ if (!File.Exists(backupFile))
+ {
+ _logger.LogCritical("Tried to restore a backup that does not exist.");
+ return Task.CompletedTask;
+ }
+
+ File.Copy(backupFile, path, true);
+ return Task.CompletedTask;
+ }
}