diff --git a/web_server.py b/web_server.py index 32ba02dc..c835715d 100644 --- a/web_server.py +++ b/web_server.py @@ -1631,7 +1631,10 @@ def _register_automation_handlers(): hybrid_order = config_manager.get('download_source.hybrid_order', ['hifi', 'youtube', 'soulseek']) soulseek_active = (dl_mode == 'soulseek' or (dl_mode == 'hybrid' and 'soulseek' in hybrid_order)) - if not soulseek_active or not soulseek_client or not soulseek_client.base_url: + # soulseek_client is a DownloadOrchestrator; the real client lives on + # .soulseek. Match the getattr pattern used at the other call sites. + slskd = getattr(soulseek_client, 'soulseek', None) if soulseek_client else None + if not soulseek_active or not slskd or not slskd.base_url: _update_automation_progress(automation_id, log_line='Soulseek not active — skipped', log_type='skip') return {'status': 'skipped'} @@ -4452,6 +4455,12 @@ SERVICE_CONFIG_REGISTRY = { 'acoustid': {'required': ['api_key']}, 'listenbrainz': {'required': ['token']}, 'hydrabase': {'required': ['url', 'api_key']}, + # Soulseek (slskd) needs a base URL. Used by the search source picker + # to dim Soulseek and redirect to Settings when the user has no slskd + # configured — clicking it would otherwise fire searches that always + # fail. URL field lives on Settings → Downloads, gated behind the + # download-source-mode dropdown. + 'soulseek': {'required': ['slskd_url']}, } diff --git a/webui/index.html b/webui/index.html index 7223c1cd..c73140d7 100644 --- a/webui/index.html +++ b/webui/index.html @@ -1859,23 +1859,10 @@ - -
- -
- - -
-
+ +
@@ -1988,10 +1975,6 @@ placeholder="Search for artists, albums, or tracks...">
- @@ -2017,8 +2000,9 @@