From 96f68dcb22a55c938aa2998b83e9df202049757d Mon Sep 17 00:00:00 2001 From: Yaknar Date: Fri, 11 Sep 2026 12:26:44 +0200 Subject: [PATCH 1/2] feat: add HIGHWAY provider support Add high-way.me as a debrid provider (Provider.HIGHWAY), modeled on TorBoxDebridClient since it's the only existing client that already handles both torrents and NZBs against a polled, non-instant backend. Server integration (HighwayDebridClient, transfers.php): - add/list/status/delete via bearer token (API key setting) - 32-hex spool-reference -> numeric transfer id promotion once HIGHWAY starts a queued transfer, mirrored in Torrents' reconcile loop - state mapping (queued/downloading/completed/error -> TorrentStatus) - account info via ?stats=1 (username, premium, plan expiry) - pre-add cache check via ?check= for GetAvailableFiles() Two download modes: - Symlink: resolves files straight from an rclone WebDAV mount (content_path + files[].path), no HTTP transfer - Internal/Aria2c: downloads each file via its own signed files[].download_url (respects include/exclude/min-size filters, no unzip step); falls back to the whole-transfer ZIP only when per-file signed URLs aren't available server-side Fixes found while testing against the live server: - DownloadClient: fall back to the provider's reported size when a download's Content-Length is unknown (HIGHWAY's on-the-fly ZIP streams without one, so progress got stuck at 0%) - DebridClientUser/Profile: add a Premium flag so accounts with an unlimited/no-expiry plan don't show "Not premium" in the navbar - torrent.component.html: fix the status label switch, which used stale numeric literals from before TorrentStatus.Queued=0 was added and was off by one for every provider, not just HIGHWAY UI: HIGHWAY option + help text in the setup wizard and navbar provider link; the Settings page picks up the new provider and its API-key field automatically via the existing enum/reflection UI. Docs: README HIGHWAY section incl. rclone.conf snippet. HIGHWAY_PROVIDER_SPEC.md documents the transfers.php API this is built against. Tests: new HighwayDebridClientTest (add/list/status/delete, state mapping, symlink path resolution, per-file vs ZIP fallback, error handling); existing Torrents(...) call sites updated for the new ctor parameter. --- README.md | 47 +- client/src/app/models/profile.model.ts | 1 + client/src/app/navbar/navbar.component.html | 2 + client/src/app/navbar/navbar.component.ts | 3 + client/src/app/setup/setup.component.html | 11 +- client/src/app/torrent/torrent.component.html | 16 +- client/src/app/torrent/torrent.component.ts | 4 +- server/RdtClient.Data/Enums/Provider.cs | 5 +- .../Models/DebridClient/DebridClientUser.cs | 6 + .../Models/Internal/DbSettings.cs | 4 +- .../RdtClient.Data/Models/Internal/Profile.cs | 1 + .../WatchFolderCheckerTests.cs | 2 +- .../Services/NzbTorrentsTest.cs | 1 + .../Services/QBittorrentTest.cs | 2 +- .../Services/SabnzbdTest.cs | 2 +- .../TorrentClients/HighwayDebridClientTest.cs | 587 +++++++++++++ .../Services/TorrentRunnerTest.cs | 1 + .../Services/TorrentsTest.cs | 7 + server/RdtClient.Service/DiConfig.cs | 1 + .../DebridClients/HighwayDebridClient.cs | 788 ++++++++++++++++++ .../Services/DownloadClient.cs | 13 +- server/RdtClient.Service/Services/Torrents.cs | 32 + .../Controllers/QBittorrentControllerTest.cs | 2 +- .../Controllers/SabnzbdControllerTest.cs | 2 +- .../Controllers/TorrentsControllerNzbTest.cs | 2 +- 25 files changed, 1521 insertions(+), 21 deletions(-) create mode 100644 server/RdtClient.Service.Test/Services/TorrentClients/HighwayDebridClientTest.cs create mode 100644 server/RdtClient.Service/Services/DebridClients/HighwayDebridClient.cs diff --git a/README.md b/README.md index 7fccf690..84757a86 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # Real-Debrid Torrent & Usenet Client -This is a web interface to manage your torrents on Real-Debrid, AllDebrid, Premiumize, TorBox or DebridLink. It supports the following features: +This is a web interface to manage your torrents on Real-Debrid, AllDebrid, Premiumize, TorBox, DebridLink or HIGHWAY. It supports the following features: - Add new torrents through magnets or files -- Add usenet downloads through NZB files (TorBox and Premiumize only) -- Download all files from Real-Debrid, AllDebrid, Premiumize or TorBox to your local machine automatically +- Add usenet downloads through NZB files (TorBox, Premiumize and HIGHWAY only) +- Download all files from Real-Debrid, AllDebrid, Premiumize, TorBox or HIGHWAY to your local machine automatically - Unpack all files when finished downloading - Implements a fake qBittorrent API so you can hook up other applications like Sonarr, Radarr or Couchpotato. - Built with Angular 21 and .NET 10 -**You will need a Premium service at Real-Debrid, AllDebrid, Premiumize, Torbox or DebridLink!** +**You will need a Premium service at Real-Debrid, AllDebrid, Premiumize, Torbox or DebridLink, or a HIGHWAY account!** [Click here to sign up for Real-Debrid.](https://real-debrid.com/?id=1348683) @@ -21,6 +21,8 @@ This is a web interface to manage your torrents on Real-Debrid, AllDebrid, Premi [Click here to sign up for DebridLink.](https://debrid-link.fr/id/6duif) +[Click here for HIGHWAY.](https://high-way.me/) + (referal links so I can get a few free premium days) ## Docker Setup @@ -171,6 +173,41 @@ It has the following options: > **The Synology *Download Path* (above) and rdt-client's general *Download path* must resolve to the exact same physical folder on the NAS.** +### HIGHWAY provider + +[HIGHWAY](https://high-way.me/) (`high-way.me`) is also a multi hoster that downloads torrents **and** usenet server-side. rdt-client pushes magnets/NZBs to it and pulls the finished files down. + +Configuration under `Settings` → `Provider`: + +- **Provider**: `HIGHWAY` +- **API Key**: a token you create once in the [HIGHWAY Center](https://high-way.me/) (log in, open **Sitzungen** → **API-Token erstellen**). This is a 32-character hex string and is revocable from that same list. + +Getting the bytes to disk — two modes: + +**A. Symlink + rclone WebDAV mount (recommended).** Mount HIGHWAY's WebDAV and use the **Symlink** download client. Example `rclone.conf`: + +```ini +[highway] +type = webdav +url = https://cloud.high-way.me/dav/ +vendor = other +user = +pass = +``` + +``` +rclone mount highway: /mnt/highway --vfs-cache-mode full +``` + +Set **Rclone mount path** to `/mnt/highway/` and set the **Post Torrent Download Action** so it does **not** remove the transfer from the provider. rdt-client symlinks the finished files straight from the mount — no re-download. + +**B. Internal / Aria2c (no mount).** rdt-client downloads each file directly using its own signed URL. The usual file filters (include/exclude regex, minimum size) apply. If HIGHWAY hasn't signed per-file it falls back to fetching the whole transfer as one ZIP. + +Notes: + +- HIGHWAY torrents leech from peers server-side, so expect real `downloading` progress for minutes/hours. Only content HIGHWAY already has is linked instantly. +- When HIGHWAY is at its active-transfer limit a new add goes into HIGHWAY's own queue and reports `queued`; this is normal and it will start automatically. + ### Troubleshooting - If you forgot your logins simply delete the `rdtclient.db` and restart the service. @@ -199,7 +236,7 @@ Notice: the progress and ETA reported in Sonarr's Activity tab will not be accur #### Usenet/NZB -RdtClient also emulates part of the SABnzbd API so Sonarr and Radarr can add NZB downloads. This requires a provider that supports Usenet/NZB downloads, currently TorBox or Premiumize. +RdtClient also emulates part of the SABnzbd API so Sonarr and Radarr can add NZB downloads. This requires a provider that supports Usenet/NZB downloads, currently TorBox, Premiumize or HIGHWAY. 1. Login to Sonarr or Radarr and click `Settings`. 1. Go to the `Download Client` tab and click the plus to add. diff --git a/client/src/app/models/profile.model.ts b/client/src/app/models/profile.model.ts index 041bc6d3..99dd1621 100644 --- a/client/src/app/models/profile.model.ts +++ b/client/src/app/models/profile.model.ts @@ -2,6 +2,7 @@ export class Profile { public provider: string; public userName: string; public expiration: Date; + public premium: boolean; public currentVersion: string; public latestVersion: string; public isInsecure: boolean; diff --git a/client/src/app/navbar/navbar.component.html b/client/src/app/navbar/navbar.component.html index ba581244..c2a9bbea 100644 --- a/client/src/app/navbar/navbar.component.html +++ b/client/src/app/navbar/navbar.component.html @@ -45,6 +45,8 @@ @if (profile.expiration) { Premium Status: {{ profile.expiration | date }} + } @else if (profile.premium) { + Premium Status: Unlimited } @else { Not premium } diff --git a/client/src/app/navbar/navbar.component.ts b/client/src/app/navbar/navbar.component.ts index 80ffe366..0ad79030 100644 --- a/client/src/app/navbar/navbar.component.ts +++ b/client/src/app/navbar/navbar.component.ts @@ -60,6 +60,9 @@ export class NavbarComponent implements OnInit { case 'DebridLink': this.providerLink = 'https://debrid-link.com/'; break; + case 'HIGHWAY': + this.providerLink = 'https://high-way.me/'; + break; } }); diff --git a/client/src/app/setup/setup.component.html b/client/src/app/setup/setup.component.html index e71b18f5..6da4ec18 100644 --- a/client/src/app/setup/setup.component.html +++ b/client/src/app/setup/setup.component.html @@ -62,7 +62,7 @@
To be able to use the Real-Debrid Client you need a premium subscription to download torrents.

- Not premium yet? You have the choice of 5 providers: + Not premium yet? You have the choice of 6 providers:
Use this link to sign up to Real-Debrid.Use this link to sign up to DebridLink. +
+ Use this link to sign up to HIGHWAY. (Referal links)
@@ -92,6 +94,7 @@ +
@@ -147,6 +150,12 @@ >.

} + @if (provider === 5) { +

+ Log in to your HIGHWAY Center, open Sitzungen and use + API-Token erstellen to create a token. +

+ }