Wraps up the code-review refactor pass. - config/settings.py: ``download_source`` defaults gain ``album_bundle_poll_interval_seconds`` (default 2s) and ``album_bundle_timeout_seconds`` (default 6h, was a hard-coded ``6 * 60 * 60`` magic constant in torrent.py). The plugin reads these via ``album_bundle.get_poll_interval`` / ``get_poll_timeout`` with safe fallback to the defaults when the config value is missing / non-numeric. ``mode`` doc-comment extended to list ``torrent`` and ``usenet``. - core/downloads/validation.py: comment block above the album-name fallback rewritten to document when the fallback actually runs now — single-track hybrid downloads only, because the album- bundle gate handles single-source mode and the hybrid chain filter strips torrent / usenet from album batches. Code path unchanged; just clarifies the contract for the next reader. - webui/static/helper.js: WHATS_NEW entry summarising the refactor pass (helper extraction, dispatch lift, staging deps injection, atomic copy, configurable timeout, test additions). The /loop of: extract → inject → test was sweep enough to drop the gate code's coupling to 2-3 modules and put 49 unit tests behind the new boundaries. Code-review feedback addressed: 1. album_bundle.py extracted ✓ 2. Dispatch lifted out of master.py ✓ 3. staging.py decoupled from runtime_state ✓ 4. Validation fallback scope documented ✓ 5. Poll timeout config-driven ✓ 6. ``amazon`` provenance owned in a prior commit ✓ 7. End-to-end-shaped tests added (test_album_bundle_dispatch.py) 8. Auto-Import race closed via atomic copy ✓ |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| album_bundle_dispatch.py | ||
| cancel.py | ||
| candidates.py | ||
| cleanup.py | ||
| history.py | ||
| lifecycle.py | ||
| master.py | ||
| monitor.py | ||
| post_processing.py | ||
| staging.py | ||
| status.py | ||
| task_worker.py | ||
| validation.py | ||
| wishlist_failed.py | ||