The DownloadStation downloader left downloads stuck or silently failing.
This fixes the core flow and documents setup:
- Create the per-download destination folder via File Station (force_parent)
before creating the task; DownloadStation does not create it for a
direct-file task, which otherwise fails with "Destination does not exist".
- Auto-set the account's default destination when it has none (DSM leaves
every task "Waiting" otherwise), preserving the other server settings.
- Detect completion across the terminal states (Finished/Downloaded/Seeding/
PreSeeding or fully transferred), then verify the file is visible at the
container path before signalling success, so a path-mapping mismatch is a
clear error instead of a silent import failure.
- Surface DownloadStation errors (status_extra.error_detail, captcha) instead
of polling progress forever.
- Harden task-list / get-info / delete handling against responses that fail
to deserialize (upstream #723/#792) so one bad task can't abort a download.
- Make task creation idempotent: adopt an existing task instead of throwing
"already added", which previously bricked every retry.
Adds unit tests, fixes a settings description typo, and documents Download
Station setup and the path-mapping requirement in the README.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Tests:
- Downloads successfully when everything goes right first time
- Downloads successfully when the 5th api call is successful after 4 failures
- Fails to download when 5 api calls fail in a row
- Fails to download if the file has already been added to `Download Station` (when `GetInfoAsync` does not error)
- FAils to download if `remotePath` cannot be parsed by `Path.GetDirectoryName()`