diff --git a/README.md b/README.md
index b4f2011..d379ccc 100644
--- a/README.md
+++ b/README.md
@@ -68,7 +68,8 @@ Replace the paths in `volumes` as in the above step.
1. Browse to [http://127.0.0.1:6500](http://127.0.0.1:6500) (or the path of your server).
1. The very first credentials you enter in will be remembered for future logins.
1. Click on `Settings` on the top and enter your Real-Debrid API key (found here: [https://real-debrid.com/apitoken](https://real-debrid.com/apitoken).
-1. Change your download path if needed. When using Docker, this path will be the path on your local machine.
+1. If you are using docker then the `Download path` setting needs to be the same as in your docker file mapping. By default this is `/data/downloads`
+1. Same goes for `Mapped path`, but this is the destination path from your docker mapping. This is a path on your host.
1. Save your settings.
### Troubleshooting
@@ -90,6 +91,8 @@ RdtClient emulates the qBittorrent web protocol and allow applications to use th
1. Hit `Test` and then `Save` if all is well.
1. Sonarr will now think you have a regular Torrent client hooked up.
+When downloading files it will append the `category` setting in the Sonarr/Radarr Download Client setting. For example if your Remote Path setting is set to `C:\Downloads` and your Sonarr Download Client setting `category` is set to `sonarr` files will be downloaded to `C:\Downloads\sonarr`.
+
Notice: the progress and ETA reported in Sonarr's Activity tab will not be accurate, but it will report the torrent as completed so it can be processed after it is done downloading.
## Build instructions
diff --git a/client/src/app/torrent-table/torrent-table.component.html b/client/src/app/torrent-table/torrent-table.component.html
index f7abded..12af847 100644
--- a/client/src/app/torrent-table/torrent-table.component.html
+++ b/client/src/app/torrent-table/torrent-table.component.html
@@ -4,15 +4,7 @@
-
-
-
-
-
-
-
-
-
+
| Name |
diff --git a/server/RdtClient.Service/Services/QBittorrent.cs b/server/RdtClient.Service/Services/QBittorrent.cs
index 21e340f..9d431cd 100644
--- a/server/RdtClient.Service/Services/QBittorrent.cs
+++ b/server/RdtClient.Service/Services/QBittorrent.cs
@@ -216,15 +216,16 @@ namespace RdtClient.Service.Services
var downloadPath = await _settings.GetString("MappedPath");
downloadPath = downloadPath.TrimEnd('\\')
.TrimEnd('/');
+
downloadPath += Path.DirectorySeparatorChar;
-
+
return downloadPath;
}
public async Task> TorrentInfo()
{
var savePath = await AppDefaultSavePath();
-
+
var results = new List();
var torrents = await _torrents.Get();
@@ -232,6 +233,13 @@ namespace RdtClient.Service.Services
var prio = 0;
foreach (var torrent in torrents)
{
+ var downloadPath = savePath;
+
+ if (!String.IsNullOrWhiteSpace(torrent?.Category))
+ {
+ downloadPath = Path.Combine(downloadPath, torrent.Category);
+ }
+
var result = new TorrentInfo();
result.AddedOn = torrent.RdAdded.ToUnixTimeSeconds();
result.AmountLeft = (Int64) (torrent.RdSize * (100.0 - torrent.RdProgress) / 100.0);
@@ -261,7 +269,8 @@ namespace RdtClient.Service.Services
result.Progress = (Int64) (torrent.RdProgress / 100.0);
result.Ratio = 1;
result.RatioLimit = 1;
- result.SavePath = savePath;
+ result.ContentPath = downloadPath;
+ result.SavePath = downloadPath;
result.SeedingTimeLimit = 1;
result.SeenComplete = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
result.SeqDl = false;
@@ -317,13 +326,18 @@ namespace RdtClient.Service.Services
public async Task TorrentProperties(String hash)
{
var savePath = await AppDefaultSavePath();
-
+
var torrent = await _torrents.GetByHash(hash);
if (torrent == null)
{
return null;
}
+
+ if (!String.IsNullOrWhiteSpace(torrent.Category))
+ {
+ savePath = Path.Combine(savePath, torrent.Category);
+ }
var result = new TorrentProperties
{
@@ -374,19 +388,7 @@ namespace RdtClient.Service.Services
return;
}
- await _torrents.Delete(torrent.TorrentId, true, true, true);
-
- if (deleteFiles)
- {
- var savePath = await AppDefaultSavePath();
-
- var torrentPath = Path.Combine(savePath, torrent.RdName);
-
- if (Directory.Exists(torrentPath))
- {
- Directory.Delete(torrentPath, true);
- }
- }
+ await _torrents.Delete(torrent.TorrentId, true, true, deleteFiles);
}
public async Task TorrentsAdd(String magnetLink, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete)
@@ -423,7 +425,7 @@ namespace RdtClient.Service.Services
m => new TorrentCategory
{
Name = m.Category,
- SavePath = savePath
+ SavePath = Path.Combine(savePath, m.Category)
});
}
diff --git a/server/RdtClient.Service/Services/TaskRunner.cs b/server/RdtClient.Service/Services/TaskRunner.cs
index 14cd7d0..5db1ad4 100644
--- a/server/RdtClient.Service/Services/TaskRunner.cs
+++ b/server/RdtClient.Service/Services/TaskRunner.cs
@@ -28,7 +28,7 @@ namespace RdtClient.Service.Services
_logger.LogInformation("TaskRunner started.");
await torrentRunner.Initialize();
-
+
while (!stoppingToken.IsCancellationRequested)
{
try
diff --git a/server/RdtClient.Service/Services/TorrentRunner.cs b/server/RdtClient.Service/Services/TorrentRunner.cs
index 57b11dc..d6ff1ed 100644
--- a/server/RdtClient.Service/Services/TorrentRunner.cs
+++ b/server/RdtClient.Service/Services/TorrentRunner.cs
@@ -63,6 +63,8 @@ namespace RdtClient.Service.Services
var settingApiKey = await _settings.GetString("RealDebridApiKey");
var minFileSizeSetting = await _settings.GetNumber("MinFileSize");
+ minFileSizeSetting = minFileSizeSetting * 1024 * 1024;
+
if (String.IsNullOrWhiteSpace(settingApiKey))
{
return;
@@ -168,7 +170,7 @@ namespace RdtClient.Service.Services
if (minFileSizeSetting > 0)
{
fileIds = torrent.Files
- .Where(m => m.Bytes * 1024 * 1024 > minFileSizeSetting)
+ .Where(m => m.Bytes > minFileSizeSetting)
.Select(m => m.Id.ToString())
.ToArray();
}
diff --git a/server/RdtClient.Service/Services/Torrents.cs b/server/RdtClient.Service/Services/Torrents.cs
index 8859b87..fb64178 100644
--- a/server/RdtClient.Service/Services/Torrents.cs
+++ b/server/RdtClient.Service/Services/Torrents.cs
@@ -165,13 +165,12 @@ namespace RdtClient.Service.Services
{
if (deleteLocalFiles)
{
- var settingDownloadPath = await _settings.GetString("DownloadPath");
+ var downloadPath = await DownloadPath(torrent);
+ downloadPath = Path.Combine(downloadPath, torrent.RdName);
- var torrentPath = Path.Combine(settingDownloadPath, torrent.RdName);
-
- if (Directory.Exists(torrentPath))
+ if (Directory.Exists(downloadPath))
{
- Directory.Delete(torrentPath, true);
+ Directory.Delete(downloadPath, true);
}
}
@@ -210,10 +209,11 @@ namespace RdtClient.Service.Services
public async Task Download(Guid downloadId)
{
var settingDownloadLimit = await _settings.GetNumber("DownloadLimit");
- var settingDownloadPath = await _settings.GetString("DownloadPath");
var download = await _downloads.GetById(downloadId);
+ var downloadPath = await DownloadPath(download.Torrent);
+
// Check if we have reached the download limit, if so queue the download, but don't start it.
if (TorrentRunner.ActiveDownloadClients.Count >= settingDownloadLimit)
{
@@ -224,7 +224,7 @@ namespace RdtClient.Service.Services
await _downloads.UpdateDownloadStarted(download.DownloadId, download.DownloadStarted);
// Start the download process
- var downloadClient = new DownloadClient(download, settingDownloadPath);
+ var downloadClient = new DownloadClient(download, downloadPath);
if (TorrentRunner.ActiveDownloadClients.TryAdd(downloadId, downloadClient))
{
@@ -235,10 +235,11 @@ namespace RdtClient.Service.Services
public async Task Unpack(Guid downloadId)
{
var settingUnpackLimit = await _settings.GetNumber("UnpackLimit");
- var settingDownloadPath = await _settings.GetString("DownloadPath");
var download = await _downloads.GetById(downloadId);
+ var downloadPath = await DownloadPath(download.Torrent);
+
// Check if the file is even unpackable.
var uri = new Uri(download.Link);
var fileName = uri.Segments.Last();
@@ -270,7 +271,7 @@ namespace RdtClient.Service.Services
await _downloads.UpdateUnpackingStarted(download.DownloadId, download.UnpackingStarted);
// Start the unpacking process
- var unpackClient = new UnpackClient(download, settingDownloadPath);
+ var unpackClient = new UnpackClient(download, downloadPath);
if (TorrentRunner.ActiveUnpackClients.TryAdd(downloadId, unpackClient))
{
@@ -388,6 +389,18 @@ namespace RdtClient.Service.Services
await _torrentData.UpdateComplete(torrentId, datetime);
}
+ private async Task DownloadPath(Torrent torrent)
+ {
+ var settingDownloadPath = await _settings.GetString("DownloadPath");
+
+ if (!String.IsNullOrWhiteSpace(torrent.Category))
+ {
+ settingDownloadPath = Path.Combine(settingDownloadPath, torrent.Category);
+ }
+
+ return settingDownloadPath;
+ }
+
private async Task Update(Torrent torrent, RDNET.Torrent rdTorrent)
{
if (!String.IsNullOrWhiteSpace(rdTorrent.Filename))