mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-01-15 23:58:57 +00:00
Add Full system backup feature (#13945)
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
using System;
|
||||
|
||||
namespace MediaBrowser.Controller.SystemBackupService;
|
||||
|
||||
/// <summary>
|
||||
/// Manifest type for backups internal structure.
|
||||
/// </summary>
|
||||
public class BackupManifestDto
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the jellyfin version this backup was created with.
|
||||
/// </summary>
|
||||
public required Version ServerVersion { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the backup engine version this backup was created with.
|
||||
/// </summary>
|
||||
public required Version BackupEngineVersion { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the date this backup was created with.
|
||||
/// </summary>
|
||||
public required DateTimeOffset DateCreated { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the path to the backup on the system.
|
||||
/// </summary>
|
||||
public required string Path { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the contents of the backup archive.
|
||||
/// </summary>
|
||||
public required BackupOptionsDto Options { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
|
||||
namespace MediaBrowser.Controller.SystemBackupService;
|
||||
|
||||
/// <summary>
|
||||
/// Defines the optional contents of the backup archive.
|
||||
/// </summary>
|
||||
public class BackupOptionsDto
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether the archive contains the Metadata contents.
|
||||
/// </summary>
|
||||
public bool Metadata { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether the archive contains the Trickplay contents.
|
||||
/// </summary>
|
||||
public bool Trickplay { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether the archive contains the Subtitle contents.
|
||||
/// </summary>
|
||||
public bool Subtitles { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
|
||||
namespace MediaBrowser.Controller.SystemBackupService;
|
||||
|
||||
/// <summary>
|
||||
/// Defines properties used to start a restore process.
|
||||
/// </summary>
|
||||
public class BackupRestoreRequestDto
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or Sets the name of the backup archive to restore from. Must be present in <see cref="IApplicationPaths.BackupPath"/>.
|
||||
/// </summary>
|
||||
public required string ArchiveFileName { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Controller.SystemBackupService;
|
||||
|
||||
namespace Jellyfin.Server.Implementations.SystemBackupService;
|
||||
|
||||
/// <summary>
|
||||
/// Defines an interface to restore and backup the jellyfin system.
|
||||
/// </summary>
|
||||
public interface IBackupService
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new Backup zip file containing the current state of the application.
|
||||
/// </summary>
|
||||
/// <param name="backupOptions">The backup options.</param>
|
||||
/// <returns>A task.</returns>
|
||||
Task<BackupManifestDto> CreateBackupAsync(BackupOptionsDto backupOptions);
|
||||
|
||||
/// <summary>
|
||||
/// Gets a list of backups that are available to be restored from.
|
||||
/// </summary>
|
||||
/// <returns>A list of backup paths.</returns>
|
||||
Task<BackupManifestDto[]> EnumerateBackups();
|
||||
|
||||
/// <summary>
|
||||
/// Gets a single backup manifest if the path defines a valid Jellyfin backup archive.
|
||||
/// </summary>
|
||||
/// <param name="archivePath">The path to be loaded.</param>
|
||||
/// <returns>The containing backup manifest or null if not existing or compatiable.</returns>
|
||||
Task<BackupManifestDto?> GetBackupManifest(string archivePath);
|
||||
|
||||
/// <summary>
|
||||
/// Restores an backup zip file created by jellyfin.
|
||||
/// </summary>
|
||||
/// <param name="archivePath">Path to the archive.</param>
|
||||
/// <returns>A Task.</returns>
|
||||
/// <exception cref="FileNotFoundException">Thrown when an invalid or missing file is specified.</exception>
|
||||
/// <exception cref="NotSupportedException">Thrown when attempt to load an unsupported backup is made.</exception>
|
||||
/// <exception cref="InvalidOperationException">Thrown for errors during the restore.</exception>
|
||||
Task RestoreBackupAsync(string archivePath);
|
||||
|
||||
/// <summary>
|
||||
/// Schedules a Restore and restarts the server.
|
||||
/// </summary>
|
||||
/// <param name="archivePath">The path to the archive to restore from.</param>
|
||||
void ScheduleRestoreAndRestartServer(string archivePath);
|
||||
}
|
||||
Reference in New Issue
Block a user