diff --git a/core/download_orchestrator.py b/core/download_orchestrator.py index b4963855..2f4b04db 100644 --- a/core/download_orchestrator.py +++ b/core/download_orchestrator.py @@ -133,16 +133,26 @@ class DownloadOrchestrator: elif self.mode == 'deezer_dl': return await self.deezer_dl.check_connection() elif self.mode == 'hybrid': - soulseek_ok = await self.soulseek.check_connection() - youtube_ok = await self.youtube.check_connection() - tidal_ok = await self.tidal.check_connection() - qobuz_ok = await self.qobuz.check_connection() - hifi_ok = await self.hifi.check_connection() - deezer_ok = await self.deezer_dl.check_connection() + # Only check sources that are in the configured hybrid order + clients = { + 'soulseek': self.soulseek, 'youtube': self.youtube, + 'tidal': self.tidal, 'qobuz': self.qobuz, + 'hifi': self.hifi, 'deezer_dl': self.deezer_dl, + } + sources_to_check = self.hybrid_order if self.hybrid_order else list(clients.keys()) + results = {} + for source in sources_to_check: + client = clients.get(source) + if client: + try: + results[source] = await client.check_connection() + except Exception: + results[source] = False - logger.info(f" Soulseek: {'✅' if soulseek_ok else '❌'} | YouTube: {'✅' if youtube_ok else '❌'} | Tidal: {'✅' if tidal_ok else '❌'} | Qobuz: {'✅' if qobuz_ok else '❌'} | HiFi: {'✅' if hifi_ok else '❌'} | Deezer: {'✅' if deezer_ok else '❌'}") + status_parts = [f"{s}: {'✅' if ok else '❌'}" for s, ok in results.items()] + logger.info(f" {' | '.join(status_parts)}") - return soulseek_ok or youtube_ok or tidal_ok or qobuz_ok or hifi_ok or deezer_ok + return any(results.values()) return False diff --git a/web_server.py b/web_server.py index ff226005..42bd09da 100644 --- a/web_server.py +++ b/web_server.py @@ -4094,14 +4094,24 @@ def get_status(): _status_cache_timestamps['media_server'] = current_time # else: use cached value - # Test Soulseek - with caching like other services + # Test Soulseek - only if it's the active source or in the hybrid order if current_time - _status_cache_timestamps['soulseek'] > STATUS_CACHE_TTL: - soulseek_start = time.time() - try: - soulseek_status = run_async(soulseek_client.check_connection()) if soulseek_client else False - except Exception: + download_mode = config_manager.get('download_source.mode', 'hybrid') + hybrid_order = config_manager.get('download_source.hybrid_order', ['hifi', 'youtube', 'soulseek']) + soulseek_relevant = (download_mode == 'soulseek' or + (download_mode == 'hybrid' and 'soulseek' in hybrid_order)) + + if soulseek_relevant and soulseek_client: + soulseek_start = time.time() + try: + soulseek_status = run_async(soulseek_client.check_connection()) + except Exception: + soulseek_status = False + soulseek_response_time = (time.time() - soulseek_start) * 1000 + else: soulseek_status = False - soulseek_response_time = (time.time() - soulseek_start) * 1000 + soulseek_response_time = 0 + _status_cache['soulseek'] = { 'connected': soulseek_status, 'response_time': round(soulseek_response_time, 1)