BUG: TransmissionClient is incomplete / proof-of-concept only (missing arrQueueId, control methods, status mapping) #63

Closed
opened 2026-05-28 10:40:44 +01:00 by Gandalf · 0 comments
Owner

Description:

The Transmission download client implementation (server/clients/TransmissionClient.js) is only a partial / proof-of-concept integration despite being listed as a fully supported download client in the README and architecture docs.

Detailed Investigation Findings (release/1.7.31)

1. Incomplete extractArrInfo()

  • Detects series (SxxEyy) and movie (year in parentheses) patterns but never extracts queueId.
  • Returns only { type: 'series' | 'movie' }arrQueueId and arrType are always undefined in the normalized output.
  • Breaks user-specific matching and history linking for Transmission users.

2. Incomplete Status Mapping

  • Transmission status codes 1 (Queued), 2 (Checking), 3 (Queued) are handled, but 7 (TORRENT_IS_CHECKING) is incorrectly mapped to "Unknown" (it should be "Checking").
  • Missing proper handling for other edge states.

3. Missing Control Methods

  • The DownloadClient base class interface expects startTorrent(), stopTorrent(), removeTorrent(), etc. (part of the Pluggable Download Client Architecture – PDCA).
  • TransmissionClient implements none of them.

4. Other Robustness Issues

  • No timeout or retry logic in makeRequest().
  • No validation for missing arguments.torrents in responses → potential runtime errors on unexpected API replies.
  • Session ID handling for 409 errors is present but fragile.

Impact:

  • Transmission users get incomplete or broken download information.
  • No ability to control torrents from the dashboard.
  • Contradicts the "full support for Transmission" claim.

Proposed Solution / Fix Plan:

  1. Complete extractArrInfo() to also return queueId (parse from filename or use Transmission's id field mapped to Sonarr/Radarr queue).
  2. Fix status mapping (add TORRENT_IS_CHECKING → "Checking").
  3. Implement the missing control methods using Transmission RPC (torrent-start, torrent-stop, torrent-remove).
  4. Add defensive response validation and timeout/retry logic.
  5. Update README to mark Transmission as "experimental / partial support" until complete, or fully implement it.

Cross-Dependencies:

  • This affects the same normalized download pipeline used by the season pack queue handling (#61) and webhook refreshes.
  • Once fixed, Transmission downloads will correctly appear in the dashboard alongside Sonarr/Radarr data.

Suggested Labels:
Kind/Bug, Priority: High, Area/Download Clients, Compat/Non-Breaking (with note that control methods are new)

Affected Versions: All versions since Transmission support was added.

**Description:** The Transmission download client implementation (`server/clients/TransmissionClient.js`) is only a partial / proof-of-concept integration despite being listed as a fully supported download client in the README and architecture docs. ### Detailed Investigation Findings (release/1.7.31) **1. Incomplete `extractArrInfo()`** - Detects series (`SxxEyy`) and movie (year in parentheses) patterns but **never extracts `queueId`**. - Returns only `{ type: 'series' | 'movie' }` → `arrQueueId` and `arrType` are always undefined in the normalized output. - Breaks user-specific matching and history linking for Transmission users. **2. Incomplete Status Mapping** - Transmission status codes `1` (Queued), `2` (Checking), `3` (Queued) are handled, but `7` (`TORRENT_IS_CHECKING`) is incorrectly mapped to `"Unknown"` (it should be "Checking"). - Missing proper handling for other edge states. **3. Missing Control Methods** - The `DownloadClient` base class interface expects `startTorrent()`, `stopTorrent()`, `removeTorrent()`, etc. (part of the Pluggable Download Client Architecture – PDCA). - TransmissionClient implements none of them. **4. Other Robustness Issues** - No timeout or retry logic in `makeRequest()`. - No validation for missing `arguments.torrents` in responses → potential runtime errors on unexpected API replies. - Session ID handling for 409 errors is present but fragile. **Impact:** - Transmission users get incomplete or broken download information. - No ability to control torrents from the dashboard. - Contradicts the "full support for Transmission" claim. **Proposed Solution / Fix Plan:** 1. Complete `extractArrInfo()` to also return `queueId` (parse from filename or use Transmission's `id` field mapped to Sonarr/Radarr queue). 2. Fix status mapping (add `TORRENT_IS_CHECKING` → "Checking"). 3. Implement the missing control methods using Transmission RPC (`torrent-start`, `torrent-stop`, `torrent-remove`). 4. Add defensive response validation and timeout/retry logic. 5. Update README to mark Transmission as "experimental / partial support" until complete, or fully implement it. **Cross-Dependencies:** - This affects the same normalized download pipeline used by the season pack queue handling (#61) and webhook refreshes. - Once fixed, Transmission downloads will correctly appear in the dashboard alongside Sonarr/Radarr data. **Suggested Labels:** Kind/Bug, Priority: High, Area/Download Clients, Compat/Non-Breaking (with note that control methods are new) **Affected Versions:** All versions since Transmission support was added.
Gandalf added the Kind/Bug
Priority
Low
4
labels 2026-05-28 10:40:44 +01:00
Gandalf added the Area/Download ClientsCompat/Non-Breaking labels 2026-05-28 11:57:25 +01:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Gandalf/sofarr#63