From 0b726792cb4d227e0d3e089396bacb38ddffdb64 Mon Sep 17 00:00:00 2001 From: Roger Far Date: Sun, 1 Mar 2026 11:24:11 -0700 Subject: [PATCH] Add torrents/trackers qBittorrent endpoint for cleanuparr compatibility. --- .../Models/QBittorrent/Tracker.cs | 18 ++++++++++++++ .../RdtClient.Service/Services/QBittorrent.cs | 21 ++++++++++++++++ .../Controllers/QBittorrentController.cs | 24 +++++++++++++++++++ .../Properties/launchSettings.json | 6 ++--- 4 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 server/RdtClient.Data/Models/QBittorrent/Tracker.cs diff --git a/server/RdtClient.Data/Models/QBittorrent/Tracker.cs b/server/RdtClient.Data/Models/QBittorrent/Tracker.cs new file mode 100644 index 0000000..6317864 --- /dev/null +++ b/server/RdtClient.Data/Models/QBittorrent/Tracker.cs @@ -0,0 +1,18 @@ +using System.Text.Json.Serialization; + +namespace RdtClient.Data.Models.QBittorrent; + +public class Tracker +{ + [JsonPropertyName("url")] + public required String Url { get; set; } + + [JsonPropertyName("status")] + public required String Status { get; set; } + + [JsonPropertyName("num_peers")] + public required Int64 NumPeers { get; set; } + + [JsonPropertyName("msg")] + public required String Msg { get; set; } +} \ No newline at end of file diff --git a/server/RdtClient.Service/Services/QBittorrent.cs b/server/RdtClient.Service/Services/QBittorrent.cs index cdee5a3..3a646bb 100644 --- a/server/RdtClient.Service/Services/QBittorrent.cs +++ b/server/RdtClient.Service/Services/QBittorrent.cs @@ -692,4 +692,25 @@ public class QBittorrent(ILogger logger, Settings settings, Authent DlRateLimit = Settings.Get.DownloadClient.MaxSpeed }; } + + public async Task> TorrentsTrackers(String hash) + { + var torrent = await torrents.GetByHash(hash); + + if (torrent == null || torrent.Type != DownloadType.Torrent) + { + return []; + } + + return + [ + new() + { + Url = $"http://{torrent.RdHost ?? torrent.ClientKind.ToString()}/**".ToLower(), + Status = "Working", + NumPeers = torrent.RdSeeders ?? 1, + Msg = $"Fake Tracker for {torrent.ClientKind}" + } + ]; + } } diff --git a/server/RdtClient.Web/Controllers/QBittorrentController.cs b/server/RdtClient.Web/Controllers/QBittorrentController.cs index 0ef64c1..77e5851 100644 --- a/server/RdtClient.Web/Controllers/QBittorrentController.cs +++ b/server/RdtClient.Web/Controllers/QBittorrentController.cs @@ -569,6 +569,30 @@ public class QBittorrentController(ILogger logger, QBitto { return TransferInfo(); } + + [Authorize(Policy = "AuthSetting")] + [Route("torrents/trackers")] + [HttpGet] + [HttpPost] + public async Task>> TorrentsTrackers([FromQuery] QBTorrentsHashRequest request) + { + if (String.IsNullOrWhiteSpace(request.Hash)) + { + return BadRequest(); + } + + var results = await qBittorrent.TorrentsTrackers(request.Hash); + + return Ok(results); + } + + [Authorize(Policy = "AuthSetting")] + [Route("torrents/trackers")] + [HttpPost] + public async Task>> TorrentsTrackersPost([FromForm] QBTorrentsHashRequest request) + { + return await TorrentsTrackers(request); + } } public class QBAuthLoginRequest diff --git a/server/RdtClient.Web/Properties/launchSettings.json b/server/RdtClient.Web/Properties/launchSettings.json index ab3e967..f76c96e 100644 --- a/server/RdtClient.Web/Properties/launchSettings.json +++ b/server/RdtClient.Web/Properties/launchSettings.json @@ -4,7 +4,7 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:6501/test" + "applicationUrl": "http://localhost:6501" } }, "profiles": { @@ -12,7 +12,7 @@ "commandName": "Project", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", - "BASE_PATH": "test" + "BASE_PATH": "" }, "applicationUrl": "http://localhost:6500" }, @@ -22,7 +22,7 @@ "launchUrl": "", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", - "BASE_PATH": "test" + "BASE_PATH": "" } } }