Add torrent client integration and downloads management: introduce qbittorrent service in Docker setup, implement downloads endpoint in API, and enhance media storage to handle imported files. Update frontend routes and translations for downloads management.

This commit is contained in:
Leonid Pershin
2026-07-24 16:42:14 +03:00
parent 5853009d71
commit e7840ba919
18 changed files with 382 additions and 6 deletions
@@ -17,12 +17,14 @@ public sealed class MediaPathResolver
UploadsDir = Path.Combine(_root, "uploads");
OriginalsDir = Path.Combine(_root, "originals");
AssetsDir = Path.Combine(_root, "assets");
DownloadsDir = Path.Combine(_root, "downloads");
}
public string InboxDir { get; }
public string UploadsDir { get; }
public string OriginalsDir { get; }
public string AssetsDir { get; }
public string DownloadsDir { get; }
public void EnsureDirectories()
{
@@ -30,6 +32,7 @@ public sealed class MediaPathResolver
Directory.CreateDirectory(UploadsDir);
Directory.CreateDirectory(OriginalsDir);
Directory.CreateDirectory(AssetsDir);
Directory.CreateDirectory(DownloadsDir);
}
public string OriginalPath(Guid assetId, string extension) =>
@@ -55,6 +58,10 @@ public sealed class MediaPathResolver
public string InboxPath(string fileName) =>
EnsureWithin(InboxDir, Path.Combine(InboxDir, fileName));
/// <summary>Резолвит относительный путь внутри downloads/ (может содержать подкаталоги сезона).</summary>
public string DownloadPath(string relativePath) =>
EnsureWithin(DownloadsDir, Path.Combine(DownloadsDir, relativePath));
private string EnsureWithinRoot(string candidate) => EnsureWithin(_root, candidate);
private static string EnsureWithin(string baseDir, string candidate)