Commit graph

717 commits

Author SHA1 Message Date
Roger Far
75e02cfb82 Fixed some qBittorrent endpoints.
Some checks failed
Release Docker Image / build (map[arch:amd64 platform:linux/amd64 runs-on:ubuntu-latest]) (push) Has been cancelled
Release Docker Image / build (map[arch:arm64 platform:linux/arm64 runs-on:ubuntu-24.04-arm]) (push) Has been cancelled
Create GitHub Release / Test, Build, and Bundle (push) Has been cancelled
dotnet test / build (push) Has been cancelled
Release Docker Image / push-images (push) Has been cancelled
Create GitHub Release / Create GitHub release (push) Has been cancelled
2026-04-06 20:38:32 -06:00
Roger Far
53f985d80d v2.0.127
Some checks failed
Release Docker Image / build (map[arch:amd64 platform:linux/amd64 runs-on:ubuntu-latest]) (push) Has been cancelled
Release Docker Image / build (map[arch:arm64 platform:linux/arm64 runs-on:ubuntu-24.04-arm]) (push) Has been cancelled
Create GitHub Release / Test, Build, and Bundle (push) Has been cancelled
dotnet test / build (push) Has been cancelled
Release Docker Image / push-images (push) Has been cancelled
Create GitHub Release / Create GitHub release (push) Has been cancelled
2026-03-15 12:18:38 -06:00
Vinod Mishra
d4e1502c60 Add state filter to info endpoint and also implement the count endpoint 2026-03-15 13:12:59 +00:00
Roger Far
66bd4560a8 Run formatters. 2026-03-14 13:41:30 -06:00
Roger Far
683ac44c12 Upgrade packages.
Migrate Angular to new injector constructors.
2026-03-14 13:39:51 -06:00
Roger Far
042b1e32e4
Merge pull request #946 from jfrconley/fix/torrents-info-hashes-filter
Fix /api/v2/torrents/info to filter by hashes query parameter
2026-03-14 13:27:13 -06:00
Roger Far
095a25f04a
Merge pull request #947 from AlexandreVassard/main
fix(symlink): strip duplicate torrent name from subpath
2026-03-14 13:26:56 -06:00
omgbeez
76dc3e0b98 fix: Long retry-after would generate timeout instead of RateLimitException
Needed to move the retry handler before the TimeOut handler, and drive the throw from the TimeOut configured by the user for the provider.
2026-03-14 09:32:51 -04:00
Alexandre Vassard
6743bd472e fix(symlink): normalize subpath first component before comparing torrent name prefix
The previous fix compared subPath directly against the sanitized torrent
name, which fails when RdName contains characters removed by
RemoveInvalidPathChars (e.g. ':' on Windows). Extract and normalize the
first component of subPath before comparing so both sides go through the
same sanitization. Add tests covering the duplicate-prefix stripping case.
2026-03-08 21:29:33 +01:00
Alexandre Vassard
1dd7ab9c8e fix(symlink): strip duplicate torrent name from subpath
torrent.Files[].Path already includes the torrent name as its first
component (e.g. "Hijack/Saison 1/file.mkv"), but GetDownloadPath was
also initialising torrentPath with torrent.RdName, causing the name
to appear twice (e.g. "Hijack/Hijack/Saison 1"). Strip the torrent
name prefix from subPath before combining so the resolved path matches
the actual rclone mount layout.
2026-03-08 21:15:34 +01:00
John Conley
c0bbab5fa4 Fix /api/v2/torrents/info to filter by hashes query parameter
Add support for the `hashes` query parameter (pipe-separated, case-insensitive)
to match real qBittorrent API behavior. This fixes compatibility with cleanuparr
and *arr apps that rely on hash-based filtering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:39:42 -08:00
omgbeez
41787077db Add remaining seconds display during rate-limit and improve cooldown handling 2026-03-07 18:04:12 -05:00
omgbeez
67afe189b5 Refactor TorBoxDebridClientTest to include IRateLimitCoordinator and improve test consistency across methods. Updated logging and error handling for rate-limiting scenarios. 2026-03-07 17:57:42 -05:00
Roger Far
0b726792cb Add torrents/trackers qBittorrent endpoint for cleanuparr compatibility. 2026-03-01 11:24:11 -07:00
Roger Far
7ec977b36e
Merge pull request #941 from ALenfant/fix_login_format
Always return plain text from `auth/login` API endpoint
2026-03-01 10:38:37 -07:00
Antonin Lenfant-Kodia
a7dd01eb42 Fix qB auth/login to always return plain text 2026-03-01 15:01:13 +01:00
Roger Far
178270084e no message
Some checks failed
Release Docker Image / build (map[arch:amd64 platform:linux/amd64 runs-on:ubuntu-latest]) (push) Has been cancelled
Release Docker Image / build (map[arch:arm64 platform:linux/arm64 runs-on:ubuntu-24.04-arm]) (push) Has been cancelled
Create GitHub Release / Test, Build, and Bundle (push) Has been cancelled
dotnet test / build (push) Has been cancelled
Release Docker Image / push-images (push) Has been cancelled
Create GitHub Release / Create GitHub release (push) Has been cancelled
2026-02-23 20:14:27 -07:00
Roger Far
41f816ab80 Cleanup. 2026-02-23 20:04:53 -07:00
Roger Far
81dd3dd9f8
Merge pull request #923 from omgbeez/upstream/resilience
Add resilience handler, predictive rate limit handling
2026-02-23 08:36:35 -07:00
Roger Far
0af0b41bb8
Merge pull request #935 from ALenfant/add_legacy_version_endpoint
Add legacy /version/api endpoint
2026-02-22 10:40:18 -07:00
Antonin Lenfant-Kodia
e01cd6a979 Add legacy /version/api endpoint 2026-02-22 14:49:07 +01:00
Roger Far
480d881d92 Reverted SharpCompress to 0.42.1 due to file locking issues.
Some checks failed
Release Docker Image / build (map[arch:amd64 platform:linux/amd64 runs-on:ubuntu-latest]) (push) Has been cancelled
Release Docker Image / build (map[arch:arm64 platform:linux/arm64 runs-on:ubuntu-24.04-arm]) (push) Has been cancelled
Create GitHub Release / Test, Build, and Bundle (push) Has been cancelled
dotnet test / build (push) Has been cancelled
Release Docker Image / push-images (push) Has been cancelled
Create GitHub Release / Create GitHub release (push) Has been cancelled
2026-02-21 16:04:36 -07:00
Roger Far
b7df2bfb15 Added test helper to make sure tests pass on Windows. 2026-02-21 15:33:12 -07:00
Roger Far
7c94528847
Merge pull request #931 from omgbeez/upstream/nzb-delete-actions
Handle NZB finished actions in `Sabnzbd` service
2026-02-21 15:18:41 -07:00
Roger Far
f4e1cf4717
Merge pull request #930 from omgbeez/upstream/downloads-fix
Fix broken download status in the UI
2026-02-21 15:18:08 -07:00
Roger Far
d023bddd24
Merge pull request #928 from omgbeez/upstream/tb-statuses
Adding some missing status mappings for TorBox
2026-02-21 15:17:13 -07:00
Roger Far
8e5238844e
Merge pull request #926 from omgbeez/upstream/qbt-eta-fix
Fix ETA calculation for QBittorrent API
2026-02-21 15:16:16 -07:00
omgbeez
e36a5a07e5 Handle NZB finished actions in Sabnzbd service 2026-02-20 17:23:21 -05:00
omgbeez
db511929cd Addressing bug from qodo review 2026-02-20 16:13:25 -05:00
omgbeez
2db2af4cea Fix broken download status in the UI 2026-02-20 15:59:47 -05:00
omgbeez
f32e8316e2 Adding some missing status mappings for TorBox 2026-02-20 11:38:57 -05:00
omgbeez
0ca2517eb6 Fix ETA calculation for QBittorrent API 2026-02-20 10:56:56 -05:00
omgbeez
6d0cb6ceb5 Minor fixes for Qodo 2026-02-20 10:34:30 -05:00
omgbeez
ed397f8223 Update Logger to use TorrentRunner.GetStats for consistent download statistics 2026-02-20 09:57:57 -05:00
omgbeez
a023d33d90 Add resilience handler, predictive rate limit handling
- Applied to TorBox, can be extended easily to other providers
- Reads response headers commonplace for pre-emptive rate limit throttling and retry-after
- When a rate limit is reached, displays a warning in the UI
- Fix socket leak from direct allocation of HttpClient, replaced with factory which handles pooling and re-use of sockets.

While HttpClient is Disposable, it doesn't gaurantee (and does not) directly release underlying sockets for queries at the time the client is disposed. These sockets will go into a TCP WAIT state often for a very long time. The expected pattern in C# is to always use the HttClientFactory which will correctly handle re-use of the OS sockets in suqsequent queries reducing resource and memory leaks.
2026-02-20 09:47:13 -05:00
Roger Far
ccee652572 Upgrade packages. 2026-02-18 21:35:02 -07:00
Roger Far
d6020594ef Cleanup. 2026-02-18 21:34:51 -07:00
omgbeez
991ecefe3c Clarify error messages in TorrentRunner to distinguish between provider and runner errors. 2026-02-13 17:09:16 -05:00
omgbeez
33d8c2d825 Align Sabnzbd status reporting with updated TorrentStatus values. 2026-02-13 17:08:51 -05:00
omgbeez
f25cef711b Improve TorBox status mapping to TorrentStatus and log any unmapped statuses for debugging. 2026-02-13 17:06:57 -05:00
omgbeez
40be170677 Refactor download progress calculation to use centralized stats and simplify logic across services.
- Fixes an issue where progress goes back to 50% as soon as downloads are done
- Prevents copy and update of torrent/nzb list by not updating download stats on every use, most callers don't require this data, notable perf/memory improvement.
2026-02-13 17:06:12 -05:00
omgbeez
a5f9cd353b SqLite doesn't support OrderBy on DateTimeOffset types
Sorting will require a copy to fix this for the moment, could probably change the underlying type later to prevent this.
2026-02-13 13:22:41 -05:00
omgbeez
e93e4f6f22 Usenet support 2026-02-13 13:15:57 -05:00
Roger Far
d76d26131c Remove obsolete caching. 2026-02-11 20:24:27 -07:00
Roger Far
580c7132c6 Cleanup. 2026-02-11 20:22:28 -07:00
Roger Far
0c5e38e01a
Merge branch 'main' into main 2026-02-11 20:20:47 -07:00
Roger Far
01a26c614b
Merge branch 'main' into upstream/websocket-perf 2026-02-11 20:04:57 -07:00
Roger Far
6b85d7bbbc
Merge branch 'main' into upstream/qbt-eta 2026-02-11 20:02:18 -07:00
Roger Far
ca325aaac1
Merge pull request #919 from jwmann/fix/qbittorrent-health-check-api
Fix qBittorrent Health Check API for Cleanuparr & others
2026-02-11 19:59:35 -07:00
Roger Far
a9648248f4 Global formatting. 2026-02-11 19:44:49 -07:00
Roger Far
24321a55c9 Upgrade Angular to 21 and .NET to 10. 2026-02-11 19:40:23 -07:00
jwmann
b74b5dd7a9
Add AllowAnonymous to QBittorrent health check endpoints
This fix allows Cleanuparr to successfully connect to RDT Client by making the
health check endpoints accessible without authentication, matching real qBittorrent
behavior. The three endpoints affected are:
- /api/v2/app/version
- /api/v2/app/webapiVersion
- /api/v2/app/buildInfo

Fixes #867
2026-02-11 19:08:59 -05:00
omgbeez
42ebd2c74b Calculate remaining time based on download speed and bytes remaining 2026-01-17 12:33:31 -05:00
omgbeez
9454ea1bd1 Refactored torrent and download models with DTOs to simplify serialization and API responses. 2026-01-17 12:23:16 -05:00
omgbeez
6cef70b979 Simplify download progress and remaining time calculations in QBittorrent service. 2026-01-17 12:21:13 -05:00
destrodxbad
15af54ed24 perf(cache): Remove aggressive cache invalidation and optimize queries 2025-11-18 02:04:51 +01:00
destrodxbad
47355030b5 perf(database): Configure SQLite with WAL mode and connection pooling 2025-11-18 02:03:13 +01:00
destrodxbad
a7bb8da1d5 perf(websocket): Fix scope leak and add adaptive polling 2025-11-18 02:01:41 +01:00
destrodxbad
6db556ed5c Fix: Bug refresh 2025-11-14 18:04:41 +01:00
destrodxbad
f12f28a8bb Fix: Refresh disk space status while paused 2025-11-14 15:17:11 +01:00
destrodxbad
27398ba993 Add automatic disk space monitoring for Bezzad downloader 2025-11-09 03:05:56 +01:00
Roger Versluis
c51f8cb503 Removed internal downloader from the GUI.
Some checks failed
Release Docker Image / build (map[arch:amd64 platform:linux/amd64 runs-on:ubuntu-latest]) (push) Has been cancelled
Release Docker Image / build (map[arch:arm64 platform:linux/arm64 runs-on:ubuntu-24.04-arm]) (push) Has been cancelled
Create GitHub Release / Test, Build, and Bundle (push) Has been cancelled
dotnet test / build (push) Has been cancelled
Release Docker Image / push-images (push) Has been cancelled
Create GitHub Release / Create GitHub release (push) Has been cancelled
2025-10-13 16:46:27 -06:00
Roger Versluis
1080143fce Added some fake qBittorrent API calls for decluttarr.
Some checks failed
Release Docker Image / build (map[arch:amd64 platform:linux/amd64 runs-on:ubuntu-latest]) (push) Has been cancelled
Release Docker Image / build (map[arch:arm64 platform:linux/arm64 runs-on:ubuntu-24.04-arm]) (push) Has been cancelled
Create GitHub Release / Test, Build, and Bundle (push) Has been cancelled
dotnet test / build (push) Has been cancelled
Release Docker Image / push-images (push) Has been cancelled
Create GitHub Release / Create GitHub release (push) Has been cancelled
2025-10-08 21:26:14 -06:00
Roger Versluis
123c4f29c6 Remove internal downloader. 2025-10-06 20:15:07 -06:00
Roger Far
02a97f3170 Add banned tracker setting. 2025-08-04 22:40:11 -06:00
Roger Far
f3d0b31fea Merge branch 'main' of https://github.com/rogerfar/rdt-client 2025-07-28 22:00:45 -06:00
Roger Far
d9858409db Cleanup, make sure the RD API adheres to the set timeout when trying to add a magnet or file. 2025-07-28 21:46:20 -06:00
Cucumberrbob
1be3e98ad7
Update server/RdtClient.Service/Services/TorrentRunner.cs
Co-authored-by: qodo-merge-pro[bot] <151058649+qodo-merge-pro[bot]@users.noreply.github.com>
2025-07-06 22:05:29 +01:00
Cucumberrbob
6bc9c06faa
add setting to delay FinishedAction 2025-07-06 21:59:36 +01:00
Cucumberrbob
0461058d86
set user agent for all HttpClients from IHttpClientFactory 2025-06-14 14:02:39 +01:00
Cucumberrbob
32fe929f48
Merge pull request #816 from mentalblank/magnet-enrichment
Tracker Enrichment
2025-05-31 12:42:13 +01:00
MentalBlank
60263ca685 Tracker enrichment test changes 2025-05-29 23:54:47 +10:00
MentalBlank
98042f8040 Improved enrichment validation, logging, and test coverage.
Strengthened URL Validation.
Improved HTTP Client Configuration.
Logged total rejected tracker count at the information level.
Logged individual rejected tracker details at the debug level.
Debug logs for bytes and enriched bytes are now conditional.
Converted some tests from Fact to Theory.
Used Assert.Collection in EnricherTest.cs.
Standardized URL Encoding in Enricher.cs.
2025-05-25 21:50:26 +10:00
MentalBlank
4be3280c3a Enricher code refactoring with small tweaks.
Added additional tests.
Changed enricher class to sealed.
Changed logging.
Changed how trackers are added.
Fixed some issues around edge cases.
2025-05-24 02:16:27 +10:00
Roger Far
bb9cc67ff7 Revert Synolog.Api.Client because of breaking changes. 2025-05-22 19:38:30 -06:00
MentalBlank
452d8cc1cf Split tracker grabbing and parsing logic.
Split grab and parse logic, recheck cache after semaphore lock, timeouts, add URL validation check, add torrent file tests, replace test hash with valid SHA1 format, tracker URL validation, fix token disposal issue
2025-05-23 00:02:07 +10:00
MentalBlank
408c475af5 Tracker list caching with configurable expiration
Add new option to general settings that allows the user to set the time in minutes to cache the tracker list. 0 disables caching. Default value is 60.
2025-05-21 00:45:14 +10:00
MentalBlank
80a8a1020c Expand enrichment to torrent files 2025-05-20 03:27:41 +10:00
Roger Far
4801b94c64 Upgrade packages. 2025-05-18 11:31:38 -06:00
Roger Far
2a38d43a1b
Merge pull request #817 from Cucumberrbob/feat/turn-off-auto-unpack
Don't unpack if `UnpackLimit` is set to `0`
2025-05-18 11:11:49 -06:00
Roger Far
6ec3b1072b
Update server/RdtClient.Service/Services/TorrentRunner.cs
Co-authored-by: qodo-merge-pro[bot] <151058649+qodo-merge-pro[bot]@users.noreply.github.com>
2025-05-18 11:11:17 -06:00
Roger Far
f131726cce
Merge pull request #813 from Cucumberrbob/fix/providerupdater-logging-categoryname
fix: make `ProviderUpdater` log under the correct category name
2025-05-18 11:06:13 -06:00
Cucumberrbob
e17c8c5c1a
make setting UnpackLimit to 0 turn unpacking off 2025-05-17 13:30:22 +01:00
Cucumberrbob
5de0bac9d5
reformat EnrichMagnetLink 2025-05-15 23:37:17 +01:00
MentalBlank
ae66b40a3d Allow user to define tracker list 2025-05-16 07:57:48 +10:00
MentalBlank
e6a22f6780 Magnet Enrichment
Add magnet link enrichment using configurable tracker lists from ngosang/trackerslist
2025-05-15 19:48:41 +10:00
Cucumberrbob
ba821ebc2f
use ILogger<ProviderUpdater> for ProviderUpdater, not ILogger<TaskRunner> 2025-05-14 14:45:06 +01:00
Cucumberrbob
e7c2b42bd2
lock RealDebridUpdateLock when dequeuing, not when adding to the queue 2025-05-14 14:05:33 +01:00
Roger Far
0265a48aa8
Merge pull request #798 from Cucumberrbob/fix/auto-import-host-download-action
fix: Set `HostDownloadAction` when auto-importing torrents
2025-04-23 21:45:58 -06:00
Roger Far
4f770d923a
Merge pull request #795 from Cucumberrbob/fix/censor-downloadstation-password
fix: censor download station password when logging settings at startup
2025-04-23 21:45:32 -06:00
Cucumberrbob
8929ba19d2
fix: Set HostDownloadAction when auto-importing torrents
we had a setting for it, just never used it!
2025-04-22 20:16:18 +01:00
Cucumberrbob
03459d0129
fix: censor download station password when logging settings at startup 2025-04-20 12:14:56 +01:00
Cucumberrbob
5ba630ff52
fix: don't autodelete queued torrents 2025-04-20 12:00:47 +01:00
Cucumberrbob
a4f20fd3a4
fix: catch and handle errors when dequeuing torrent 2025-04-20 12:00:21 +01:00
Cucumberrbob
b620e29209
Run WebsocketsUpdater as a HostedService 2025-04-13 18:32:59 +01:00
Roger Far
fab14f1f3f Changed how changelogs are fetched. 2025-04-13 10:39:14 -06:00
Roger Far
a25cd62ab0 Moved the websocket update process to its own background thread to improve UI update consistency. 2025-04-13 09:53:15 -06:00
Roger Far
b4385bcaad no message 2025-04-13 09:33:36 -06:00
Roger Far
5270375f5c
Merge branch 'main' into feat/debrid-queue 2025-04-13 09:16:46 -06:00
Roger Far
d436ea2482 Merge branch 'main' of https://github.com/rogerfar/rdt-client 2025-04-13 07:55:26 -06:00