diff --git a/core/__pycache__/soulseek_client.cpython-312.pyc b/core/__pycache__/soulseek_client.cpython-312.pyc index 60cff0df..1e891a6e 100644 Binary files a/core/__pycache__/soulseek_client.cpython-312.pyc and b/core/__pycache__/soulseek_client.cpython-312.pyc differ diff --git a/core/soulseek_client.py b/core/soulseek_client.py index e6f938c1..de5550a6 100644 --- a/core/soulseek_client.py +++ b/core/soulseek_client.py @@ -201,7 +201,40 @@ class SoulseekClient: except: pass - async def search(self, query: str, timeout: int = 10) -> List[SearchResult]: + def _process_search_responses(self, responses_data: List[Dict[str, Any]]) -> List[SearchResult]: + """Process search response data into SearchResult objects""" + search_results = [] + + logger.debug(f"Processing {len(responses_data)} user responses") + + for response_data in responses_data: + username = response_data.get('username', '') + files = response_data.get('files', []) + logger.debug(f"User {username} has {len(files)} files") + + for file_data in files: + filename = file_data.get('filename', '') + size = file_data.get('size', 0) + + file_ext = Path(filename).suffix.lower().lstrip('.') + quality = file_ext if file_ext in ['flac', 'mp3', 'ogg', 'aac', 'wma'] else 'unknown' + + result = SearchResult( + username=username, + filename=filename, + size=size, + bitrate=file_data.get('bitRate'), + duration=file_data.get('length'), + quality=quality, + free_upload_slots=response_data.get('freeUploadSlots', 0), + upload_speed=response_data.get('uploadSpeed', 0), + queue_length=response_data.get('queueLength', 0) + ) + search_results.append(result) + + return search_results + + async def search(self, query: str, timeout: int = 30) -> List[SearchResult]: if not self.base_url: logger.error("Soulseek client not configured") return [] @@ -233,59 +266,40 @@ class SoulseekClient: logger.info(f"Search initiated with ID: {search_id}") - # Wait for search to complete (reduced timeout for testing) - await asyncio.sleep(timeout) + # Poll for results instead of blocking sleep - like web interface does + all_results = [] + poll_interval = 1.5 # Check every 1.5 seconds for more responsive updates + max_polls = int(timeout / poll_interval) # 20 attempts over 30 seconds - logger.debug(f"Getting results for search ID: {search_id}") - - # Use the correct endpoint to get search responses (actual files) - responses_data = await self._make_request('GET', f'searches/{search_id}/responses') - if not responses_data: - logger.error("No response from search responses GET request") - return [] - - logger.debug(f"Responses data type: {type(responses_data)}") - logger.debug(f"Responses data length: {len(responses_data) if isinstance(responses_data, list) else 'Not a list'}") - - search_results = [] - - # responses_data should be a list of user responses - if isinstance(responses_data, list): - responses = responses_data - else: - logger.error(f"Expected list of responses, got: {type(responses_data)}") - return [] + for poll_count in range(max_polls): + logger.debug(f"Polling for results (attempt {poll_count + 1}/{max_polls}) - elapsed: {poll_count * poll_interval:.1f}s") - logger.info(f"Processing {len(responses)} user responses") - - for response_data in responses: - username = response_data.get('username', '') - files = response_data.get('files', []) - logger.debug(f"User {username} has {len(files)} files") + # Get current search responses + responses_data = await self._make_request('GET', f'searches/{search_id}/responses') + if responses_data and isinstance(responses_data, list): + current_results = self._process_search_responses(responses_data) + + # Add new unique results + existing_filenames = {r.filename for r in all_results} + new_results = [r for r in current_results if r.filename not in existing_filenames] + all_results.extend(new_results) + + if new_results: + logger.info(f"Found {len(new_results)} new results (total: {len(all_results)}) at {poll_count * poll_interval:.1f}s") + elif len(all_results) > 0: + logger.debug(f"No new results, total still: {len(all_results)}") + else: + logger.debug(f"Still waiting for results... ({poll_count * poll_interval:.1f}s elapsed)") - for file_data in files: - filename = file_data.get('filename', '') - size = file_data.get('size', 0) - - file_ext = Path(filename).suffix.lower().lstrip('.') - quality = file_ext if file_ext in ['flac', 'mp3', 'ogg', 'aac', 'wma'] else 'unknown' - - result = SearchResult( - username=username, - filename=filename, - size=size, - bitrate=file_data.get('bitRate'), - duration=file_data.get('length'), - quality=quality, - free_upload_slots=response_data.get('freeUploadSlots', 0), - upload_speed=response_data.get('uploadSpeed', 0), - queue_length=response_data.get('queueLength', 0) - ) - search_results.append(result) + # Wait before next poll (unless this is the last attempt) + if poll_count < max_polls - 1: + await asyncio.sleep(poll_interval) - search_results.sort(key=lambda x: x.quality_score, reverse=True) - logger.info(f"Found {len(search_results)} results for query: {query}") - return search_results + logger.info(f"Search completed. Found {len(all_results)} total results for query: {query}") + + # Sort by quality score and return + all_results.sort(key=lambda x: x.quality_score, reverse=True) + return all_results except Exception as e: logger.error(f"Error searching: {e}") @@ -301,10 +315,12 @@ class SoulseekClient: # Use the exact format observed in the web interface # Payload: [{filename: "...", size: 123}] - array of files + # Try adding path parameter to see if slskd supports custom download paths download_data = [ { "filename": filename, - "size": file_size + "size": file_size, + "path": str(self.download_path) # Try custom download path } ] diff --git a/logs/app.log b/logs/app.log index 2f61deac..0a82c805 100644 --- a/logs/app.log +++ b/logs/app.log @@ -3955,3 +3955,484 @@ 2025-07-09 21:44:16 - newmusic.main - INFO - closeEvent:162 - Stopping status monitoring thread... 2025-07-09 21:44:16 - newmusic.main - INFO - closeEvent:167 - Closing Soulseek client... 2025-07-09 21:44:16 - newmusic.main - INFO - closeEvent:173 - Application closed successfully +2025-07-09 21:44:40 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-09 21:44:40 - newmusic.main - INFO - main:187 - Starting NewMusic application +2025-07-09 21:44:40 - newmusic.spotify_client - INFO - _setup_client:84 - Successfully authenticated with Spotify as broquethomas +2025-07-09 21:44:40 - newmusic.plex_client - INFO - _find_music_library:98 - Found music library: Music +2025-07-09 21:44:40 - newmusic.plex_client - INFO - _setup_client:84 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-09 21:44:40 - newmusic.soulseek_client - INFO - _setup_client:87 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-09 21:44:41 - newmusic.main - INFO - change_page:139 - Changed to page: dashboard +2025-07-09 21:44:41 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Aether +2025-07-09 21:44:41 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Favorite Artists +2025-07-09 21:44:42 - newmusic.main - INFO - change_page:139 - Changed to page: downloads +2025-07-09 21:44:43 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Brittnea +2025-07-09 21:44:44 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Baleigh +2025-07-09 21:44:46 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Extra Music +2025-07-09 21:44:47 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Maggi Main +2025-07-09 21:44:52 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Broque Main +2025-07-09 21:44:59 - newmusic.spotify_client - INFO - get_user_playlists:113 - Retrieved 7 playlists +2025-07-09 21:51:01 - newmusic.main - INFO - closeEvent:152 - Closing application... +2025-07-09 21:51:01 - newmusic.main - INFO - closeEvent:157 - Cleaning up Downloads page threads... +2025-07-09 21:51:01 - newmusic.main - INFO - closeEvent:162 - Stopping status monitoring thread... +2025-07-09 21:51:03 - newmusic.main - INFO - closeEvent:167 - Closing Soulseek client... +2025-07-09 21:51:03 - newmusic.main - INFO - closeEvent:173 - Application closed successfully +2025-07-09 21:57:34 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-09 21:57:34 - newmusic.main - INFO - main:187 - Starting NewMusic application +2025-07-09 21:57:34 - newmusic.spotify_client - INFO - _setup_client:84 - Successfully authenticated with Spotify as broquethomas +2025-07-09 21:57:34 - newmusic.plex_client - INFO - _find_music_library:98 - Found music library: Music +2025-07-09 21:57:34 - newmusic.plex_client - INFO - _setup_client:84 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-09 21:57:34 - newmusic.soulseek_client - INFO - _setup_client:87 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-09 21:57:35 - newmusic.main - INFO - change_page:139 - Changed to page: dashboard +2025-07-09 21:57:35 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Aether +2025-07-09 21:57:35 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Favorite Artists +2025-07-09 21:57:38 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Brittnea +2025-07-09 21:57:39 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Baleigh +2025-07-09 21:57:40 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Extra Music +2025-07-09 21:57:41 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Maggi Main +2025-07-09 21:57:46 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Broque Main +2025-07-09 21:57:46 - newmusic.main - INFO - change_page:139 - Changed to page: sync +2025-07-09 21:57:53 - newmusic.spotify_client - INFO - get_user_playlists:113 - Retrieved 7 playlists +2025-07-09 21:57:57 - newmusic.main - INFO - change_page:139 - Changed to page: downloads +2025-07-09 21:58:03 - newmusic.soulseek_client - INFO - search:243 - Starting search for: 'Virtual Mage' +2025-07-09 21:58:03 - newmusic.soulseek_client - DEBUG - search:253 - Search data: {'searchText': 'Virtual Mage', 'timeout': 15000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-09 21:58:03 - newmusic.soulseek_client - DEBUG - search:254 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-09 21:58:03 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-09 21:58:03 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:03 - newmusic.soulseek_client - DEBUG - _make_request:112 - JSON payload: {'searchText': 'Virtual Mage', 'timeout': 15000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-09 21:58:03 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:03 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: {"fileCount":0,"id":"6ea08485-f94a-49cd-8fc1-bbd0813a7422","isComplete":false,"lockedFileCount":0,"responseCount":0,"responses":[],"searchText":"Virtual Mage","startedAt":"2025-07-10T04:58:03.4074246Z","state":"InProgress","token":92}... +2025-07-09 21:58:03 - newmusic.soulseek_client - INFO - search:267 - Search initiated with ID: 6ea08485-f94a-49cd-8fc1-bbd0813a7422 +2025-07-09 21:58:03 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 1/7) +2025-07-09 21:58:03 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6ea08485-f94a-49cd-8fc1-bbd0813a7422/responses +2025-07-09 21:58:03 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:03 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:03 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:58:05 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 2/7) +2025-07-09 21:58:05 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6ea08485-f94a-49cd-8fc1-bbd0813a7422/responses +2025-07-09 21:58:05 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:05 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:05 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:58:07 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 3/7) +2025-07-09 21:58:07 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6ea08485-f94a-49cd-8fc1-bbd0813a7422/responses +2025-07-09 21:58:07 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:08 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:08 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:58:10 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 4/7) +2025-07-09 21:58:10 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6ea08485-f94a-49cd-8fc1-bbd0813a7422/responses +2025-07-09 21:58:10 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:10 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:10 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:58:12 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 5/7) +2025-07-09 21:58:12 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6ea08485-f94a-49cd-8fc1-bbd0813a7422/responses +2025-07-09 21:58:12 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:12 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:12 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:58:14 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 6/7) +2025-07-09 21:58:14 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6ea08485-f94a-49cd-8fc1-bbd0813a7422/responses +2025-07-09 21:58:14 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:15 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:15 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:58:17 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 7/7) +2025-07-09 21:58:17 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6ea08485-f94a-49cd-8fc1-bbd0813a7422/responses +2025-07-09 21:58:17 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:17 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:17 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:58:19 - newmusic.soulseek_client - INFO - search:293 - Search completed. Found 0 total results for query: Virtual Mage +2025-07-09 21:58:44 - newmusic.soulseek_client - INFO - search:243 - Starting search for: 'Virtual Mage - Aether' +2025-07-09 21:58:44 - newmusic.soulseek_client - DEBUG - search:253 - Search data: {'searchText': 'Virtual Mage - Aether', 'timeout': 15000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-09 21:58:44 - newmusic.soulseek_client - DEBUG - search:254 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-09 21:58:44 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-09 21:58:44 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:44 - newmusic.soulseek_client - DEBUG - _make_request:112 - JSON payload: {'searchText': 'Virtual Mage - Aether', 'timeout': 15000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-09 21:58:44 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:44 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: {"fileCount":0,"id":"6667776b-fbc6-4c69-8997-df5702cd4df0","isComplete":false,"lockedFileCount":0,"responseCount":0,"responses":[],"searchText":"Virtual Mage - Aether","startedAt":"2025-07-10T04:58:44.5710082Z","state":"InProgress","token":93}... +2025-07-09 21:58:44 - newmusic.soulseek_client - INFO - search:267 - Search initiated with ID: 6667776b-fbc6-4c69-8997-df5702cd4df0 +2025-07-09 21:58:44 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 1/7) +2025-07-09 21:58:44 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6667776b-fbc6-4c69-8997-df5702cd4df0/responses +2025-07-09 21:58:44 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:44 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:44 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:58:46 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 2/7) +2025-07-09 21:58:46 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6667776b-fbc6-4c69-8997-df5702cd4df0/responses +2025-07-09 21:58:46 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:47 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:47 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:58:49 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 3/7) +2025-07-09 21:58:49 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6667776b-fbc6-4c69-8997-df5702cd4df0/responses +2025-07-09 21:58:49 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:49 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:49 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:58:51 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 4/7) +2025-07-09 21:58:51 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6667776b-fbc6-4c69-8997-df5702cd4df0/responses +2025-07-09 21:58:51 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:51 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:51 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:58:53 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 5/7) +2025-07-09 21:58:53 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6667776b-fbc6-4c69-8997-df5702cd4df0/responses +2025-07-09 21:58:53 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:53 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:53 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:58:55 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 6/7) +2025-07-09 21:58:55 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6667776b-fbc6-4c69-8997-df5702cd4df0/responses +2025-07-09 21:58:55 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:56 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:56 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:58:58 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 7/7) +2025-07-09 21:58:58 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/6667776b-fbc6-4c69-8997-df5702cd4df0/responses +2025-07-09 21:58:58 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 21:58:58 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 21:58:58 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 21:59:00 - newmusic.soulseek_client - INFO - search:293 - Search completed. Found 0 total results for query: Virtual Mage - Aether +2025-07-09 22:01:02 - newmusic.main - INFO - closeEvent:152 - Closing application... +2025-07-09 22:01:02 - newmusic.main - INFO - closeEvent:157 - Cleaning up Downloads page threads... +2025-07-09 22:01:02 - newmusic.main - INFO - closeEvent:162 - Stopping status monitoring thread... +2025-07-09 22:01:02 - newmusic.main - INFO - closeEvent:167 - Closing Soulseek client... +2025-07-09 22:01:02 - newmusic.main - INFO - closeEvent:173 - Application closed successfully +2025-07-09 22:02:15 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-09 22:02:15 - newmusic.main - INFO - main:187 - Starting NewMusic application +2025-07-09 22:02:15 - newmusic.spotify_client - INFO - _setup_client:84 - Successfully authenticated with Spotify as broquethomas +2025-07-09 22:02:45 - newmusic.plex_client - ERROR - _setup_client:87 - Failed to connect to Plex server: HTTPConnectionPool(host='192.168.86.36', port=32400): Read timed out. (read timeout=30) +2025-07-09 22:02:45 - newmusic.soulseek_client - INFO - _setup_client:87 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-09 22:02:46 - newmusic.main - INFO - change_page:139 - Changed to page: dashboard +2025-07-09 22:02:46 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Aether +2025-07-09 22:02:46 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Favorite Artists +2025-07-09 22:02:49 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Brittnea +2025-07-09 22:02:49 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Baleigh +2025-07-09 22:02:51 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Extra Music +2025-07-09 22:02:52 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Maggi Main +2025-07-09 22:02:54 - newmusic.main - INFO - change_page:139 - Changed to page: settings +2025-07-09 22:02:57 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Broque Main +2025-07-09 22:03:04 - newmusic.spotify_client - INFO - get_user_playlists:113 - Retrieved 7 playlists +2025-07-09 22:03:26 - newmusic.plex_client - ERROR - _setup_client:87 - Failed to connect to Plex server: HTTPConnectionPool(host='192.168.86.36', port=32400): Read timed out. (read timeout=30) +2025-07-09 22:04:22 - newmusic.plex_client - INFO - _find_music_library:98 - Found music library: Music +2025-07-09 22:04:22 - newmusic.plex_client - INFO - _setup_client:84 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-09 22:04:24 - newmusic.main - INFO - closeEvent:152 - Closing application... +2025-07-09 22:04:24 - newmusic.main - INFO - closeEvent:157 - Cleaning up Downloads page threads... +2025-07-09 22:04:24 - newmusic.main - INFO - closeEvent:162 - Stopping status monitoring thread... +2025-07-09 22:04:25 - newmusic.main - INFO - closeEvent:167 - Closing Soulseek client... +2025-07-09 22:04:25 - newmusic.main - INFO - closeEvent:173 - Application closed successfully +2025-07-09 22:04:28 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-09 22:04:28 - newmusic.main - INFO - main:187 - Starting NewMusic application +2025-07-09 22:04:28 - newmusic.spotify_client - INFO - _setup_client:84 - Successfully authenticated with Spotify as broquethomas +2025-07-09 22:04:28 - newmusic.plex_client - INFO - _find_music_library:98 - Found music library: Music +2025-07-09 22:04:28 - newmusic.plex_client - INFO - _setup_client:84 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-09 22:04:28 - newmusic.soulseek_client - INFO - _setup_client:87 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-09 22:04:29 - newmusic.main - INFO - change_page:139 - Changed to page: dashboard +2025-07-09 22:04:29 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Aether +2025-07-09 22:04:29 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Favorite Artists +2025-07-09 22:04:32 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Brittnea +2025-07-09 22:04:33 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Baleigh +2025-07-09 22:04:34 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Extra Music +2025-07-09 22:04:35 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Maggi Main +2025-07-09 22:04:40 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Broque Main +2025-07-09 22:04:46 - newmusic.spotify_client - INFO - get_user_playlists:113 - Retrieved 7 playlists +2025-07-09 22:04:50 - newmusic.main - INFO - change_page:139 - Changed to page: downloads +2025-07-09 22:04:56 - newmusic.soulseek_client - INFO - search:243 - Starting search for: 'virtual mage' +2025-07-09 22:04:56 - newmusic.soulseek_client - DEBUG - search:253 - Search data: {'searchText': 'virtual mage', 'timeout': 30000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-09 22:04:56 - newmusic.soulseek_client - DEBUG - search:254 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-09 22:04:56 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-09 22:04:56 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:04:56 - newmusic.soulseek_client - DEBUG - _make_request:112 - JSON payload: {'searchText': 'virtual mage', 'timeout': 30000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-09 22:04:56 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:04:56 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: {"fileCount":0,"id":"d3790420-d533-495a-8ae4-fa21a572eaaa","isComplete":false,"lockedFileCount":0,"responseCount":0,"responses":[],"searchText":"virtual mage","startedAt":"2025-07-10T05:04:56.4191321Z","state":"InProgress","token":94}... +2025-07-09 22:04:56 - newmusic.soulseek_client - INFO - search:267 - Search initiated with ID: d3790420-d533-495a-8ae4-fa21a572eaaa +2025-07-09 22:04:56 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 1/20) - elapsed: 0.0s +2025-07-09 22:04:56 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:04:56 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:04:56 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:04:56 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 22:04:58 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 2/20) - elapsed: 1.5s +2025-07-09 22:04:58 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:04:58 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:04:58 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:04:58 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 22:04:59 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 3/20) - elapsed: 3.0s +2025-07-09 22:04:59 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:04:59 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:00 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:00 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 22:05:01 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 4/20) - elapsed: 4.5s +2025-07-09 22:05:01 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:01 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:02 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:02 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 22:05:03 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 5/20) - elapsed: 6.0s +2025-07-09 22:05:03 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:03 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:03 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:03 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 22:05:05 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 6/20) - elapsed: 7.5s +2025-07-09 22:05:05 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:05 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:05 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:05 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 22:05:07 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 7/20) - elapsed: 9.0s +2025-07-09 22:05:07 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:07 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:07 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:07 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 22:05:08 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 8/20) - elapsed: 10.5s +2025-07-09 22:05:08 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:08 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:09 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:09 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 22:05:10 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 9/20) - elapsed: 12.0s +2025-07-09 22:05:10 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:10 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:10 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:10 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 22:05:12 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 10/20) - elapsed: 13.5s +2025-07-09 22:05:12 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:12 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:12 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:12 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 11/20) - elapsed: 15.0s +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: [{"fileCount":2,"files":[{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\03 - Virtual Mage - Breaking the Dream (Lucid Dream Edit).ogg","isVariableBitRate":false,"length":256,"size":6269644,"isLocked":false},{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\09 - Virtual Mage - Moondust.ogg","isVariableBitRate":false,"length":138,"size":4266916,"isLocked":false}],"hasFreeUploadSlot":true,"lockedF... +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:208 - Processing 17 user responses +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User zeroscan has 2 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User buk4 has 1 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Letham has 3 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User nightmare_dronemk12 has 3 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Ultravod has 9 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User RuuqoHoosk has 346 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User koalabeer has 3 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User raspberry2 has 10 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User KindaRatchet has 1 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User HomotopicCensorship has 3 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Kaya-Sem has 1 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User belthane has 3 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User leonardoclk has 3 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Dax_VR has 10 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User exsanguinidraculae has 2 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User ofoijacussa has 0 files +2025-07-09 22:05:14 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Shooby has 6 files +2025-07-09 22:05:14 - newmusic.soulseek_client - INFO - search:288 - Found 406 new results (total: 406) at 15.0s +2025-07-09 22:05:15 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 12/20) - elapsed: 16.5s +2025-07-09 22:05:15 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:15 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: [{"fileCount":2,"files":[{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\03 - Virtual Mage - Breaking the Dream (Lucid Dream Edit).ogg","isVariableBitRate":false,"length":256,"size":6269644,"isLocked":false},{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\09 - Virtual Mage - Moondust.ogg","isVariableBitRate":false,"length":138,"size":4266916,"isLocked":false}],"hasFreeUploadSlot":true,"lockedF... +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:208 - Processing 17 user responses +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User zeroscan has 2 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User buk4 has 1 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Letham has 3 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User nightmare_dronemk12 has 3 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Ultravod has 9 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User RuuqoHoosk has 346 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User koalabeer has 3 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User raspberry2 has 10 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User KindaRatchet has 1 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User HomotopicCensorship has 3 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Kaya-Sem has 1 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User belthane has 3 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User leonardoclk has 3 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Dax_VR has 10 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User exsanguinidraculae has 2 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User ofoijacussa has 0 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Shooby has 6 files +2025-07-09 22:05:16 - newmusic.soulseek_client - DEBUG - search:290 - No new results, total still: 406 +2025-07-09 22:05:17 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 13/20) - elapsed: 18.0s +2025-07-09 22:05:17 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:17 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: [{"fileCount":2,"files":[{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\03 - Virtual Mage - Breaking the Dream (Lucid Dream Edit).ogg","isVariableBitRate":false,"length":256,"size":6269644,"isLocked":false},{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\09 - Virtual Mage - Moondust.ogg","isVariableBitRate":false,"length":138,"size":4266916,"isLocked":false}],"hasFreeUploadSlot":true,"lockedF... +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:208 - Processing 17 user responses +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User zeroscan has 2 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User buk4 has 1 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Letham has 3 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User nightmare_dronemk12 has 3 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Ultravod has 9 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User RuuqoHoosk has 346 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User koalabeer has 3 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User raspberry2 has 10 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User KindaRatchet has 1 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User HomotopicCensorship has 3 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Kaya-Sem has 1 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User belthane has 3 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User leonardoclk has 3 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Dax_VR has 10 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User exsanguinidraculae has 2 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User ofoijacussa has 0 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Shooby has 6 files +2025-07-09 22:05:18 - newmusic.soulseek_client - DEBUG - search:290 - No new results, total still: 406 +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 14/20) - elapsed: 19.5s +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: [{"fileCount":2,"files":[{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\03 - Virtual Mage - Breaking the Dream (Lucid Dream Edit).ogg","isVariableBitRate":false,"length":256,"size":6269644,"isLocked":false},{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\09 - Virtual Mage - Moondust.ogg","isVariableBitRate":false,"length":138,"size":4266916,"isLocked":false}],"hasFreeUploadSlot":true,"lockedF... +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:208 - Processing 17 user responses +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User zeroscan has 2 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User buk4 has 1 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Letham has 3 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User nightmare_dronemk12 has 3 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Ultravod has 9 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User RuuqoHoosk has 346 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User koalabeer has 3 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User raspberry2 has 10 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User KindaRatchet has 1 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User HomotopicCensorship has 3 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Kaya-Sem has 1 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User belthane has 3 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User leonardoclk has 3 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Dax_VR has 10 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User exsanguinidraculae has 2 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User ofoijacussa has 0 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Shooby has 6 files +2025-07-09 22:05:19 - newmusic.soulseek_client - DEBUG - search:290 - No new results, total still: 406 +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 15/20) - elapsed: 21.0s +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: [{"fileCount":2,"files":[{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\03 - Virtual Mage - Breaking the Dream (Lucid Dream Edit).ogg","isVariableBitRate":false,"length":256,"size":6269644,"isLocked":false},{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\09 - Virtual Mage - Moondust.ogg","isVariableBitRate":false,"length":138,"size":4266916,"isLocked":false}],"hasFreeUploadSlot":true,"lockedF... +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:208 - Processing 17 user responses +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User zeroscan has 2 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User buk4 has 1 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Letham has 3 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User nightmare_dronemk12 has 3 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Ultravod has 9 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User RuuqoHoosk has 346 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User koalabeer has 3 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User raspberry2 has 10 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User KindaRatchet has 1 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User HomotopicCensorship has 3 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Kaya-Sem has 1 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User belthane has 3 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User leonardoclk has 3 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Dax_VR has 10 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User exsanguinidraculae has 2 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User ofoijacussa has 0 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Shooby has 6 files +2025-07-09 22:05:21 - newmusic.soulseek_client - DEBUG - search:290 - No new results, total still: 406 +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 16/20) - elapsed: 22.5s +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: [{"fileCount":2,"files":[{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\03 - Virtual Mage - Breaking the Dream (Lucid Dream Edit).ogg","isVariableBitRate":false,"length":256,"size":6269644,"isLocked":false},{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\09 - Virtual Mage - Moondust.ogg","isVariableBitRate":false,"length":138,"size":4266916,"isLocked":false}],"hasFreeUploadSlot":true,"lockedF... +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:208 - Processing 17 user responses +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User zeroscan has 2 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User buk4 has 1 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Letham has 3 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User nightmare_dronemk12 has 3 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Ultravod has 9 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User RuuqoHoosk has 346 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User koalabeer has 3 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User raspberry2 has 10 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User KindaRatchet has 1 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User HomotopicCensorship has 3 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Kaya-Sem has 1 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User belthane has 3 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User leonardoclk has 3 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Dax_VR has 10 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User exsanguinidraculae has 2 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User ofoijacussa has 0 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Shooby has 6 files +2025-07-09 22:05:23 - newmusic.soulseek_client - DEBUG - search:290 - No new results, total still: 406 +2025-07-09 22:05:24 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 17/20) - elapsed: 24.0s +2025-07-09 22:05:24 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:24 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: [{"fileCount":2,"files":[{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\03 - Virtual Mage - Breaking the Dream (Lucid Dream Edit).ogg","isVariableBitRate":false,"length":256,"size":6269644,"isLocked":false},{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\09 - Virtual Mage - Moondust.ogg","isVariableBitRate":false,"length":138,"size":4266916,"isLocked":false}],"hasFreeUploadSlot":true,"lockedF... +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:208 - Processing 17 user responses +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User zeroscan has 2 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User buk4 has 1 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Letham has 3 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User nightmare_dronemk12 has 3 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Ultravod has 9 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User RuuqoHoosk has 346 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User koalabeer has 3 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User raspberry2 has 10 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User KindaRatchet has 1 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User HomotopicCensorship has 3 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Kaya-Sem has 1 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User belthane has 3 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User leonardoclk has 3 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Dax_VR has 10 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User exsanguinidraculae has 2 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User ofoijacussa has 0 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Shooby has 6 files +2025-07-09 22:05:25 - newmusic.soulseek_client - DEBUG - search:290 - No new results, total still: 406 +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 18/20) - elapsed: 25.5s +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: [{"fileCount":2,"files":[{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\03 - Virtual Mage - Breaking the Dream (Lucid Dream Edit).ogg","isVariableBitRate":false,"length":256,"size":6269644,"isLocked":false},{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\09 - Virtual Mage - Moondust.ogg","isVariableBitRate":false,"length":138,"size":4266916,"isLocked":false}],"hasFreeUploadSlot":true,"lockedF... +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:208 - Processing 17 user responses +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User zeroscan has 2 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User buk4 has 1 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Letham has 3 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User nightmare_dronemk12 has 3 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Ultravod has 9 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User RuuqoHoosk has 346 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User koalabeer has 3 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User raspberry2 has 10 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User KindaRatchet has 1 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User HomotopicCensorship has 3 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Kaya-Sem has 1 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User belthane has 3 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User leonardoclk has 3 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Dax_VR has 10 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User exsanguinidraculae has 2 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User ofoijacussa has 0 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Shooby has 6 files +2025-07-09 22:05:26 - newmusic.soulseek_client - DEBUG - search:290 - No new results, total still: 406 +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 19/20) - elapsed: 27.0s +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: [{"fileCount":2,"files":[{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\03 - Virtual Mage - Breaking the Dream (Lucid Dream Edit).ogg","isVariableBitRate":false,"length":256,"size":6269644,"isLocked":false},{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\09 - Virtual Mage - Moondust.ogg","isVariableBitRate":false,"length":138,"size":4266916,"isLocked":false}],"hasFreeUploadSlot":true,"lockedF... +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:208 - Processing 17 user responses +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User zeroscan has 2 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User buk4 has 1 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Letham has 3 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User nightmare_dronemk12 has 3 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Ultravod has 9 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User RuuqoHoosk has 346 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User koalabeer has 3 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User raspberry2 has 10 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User KindaRatchet has 1 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User HomotopicCensorship has 3 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Kaya-Sem has 1 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User belthane has 3 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User leonardoclk has 3 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Dax_VR has 10 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User exsanguinidraculae has 2 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User ofoijacussa has 0 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Shooby has 6 files +2025-07-09 22:05:28 - newmusic.soulseek_client - DEBUG - search:290 - No new results, total still: 406 +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 20/20) - elapsed: 28.5s +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/d3790420-d533-495a-8ae4-fa21a572eaaa/responses +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: [{"fileCount":2,"files":[{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\03 - Virtual Mage - Breaking the Dream (Lucid Dream Edit).ogg","isVariableBitRate":false,"length":256,"size":6269644,"isLocked":false},{"bitRate":160,"code":1,"extension":"","filename":"Music\\aofd3\\Mallsoft & Shopping Mall Ambience\\09 - Virtual Mage - Moondust.ogg","isVariableBitRate":false,"length":138,"size":4266916,"isLocked":false}],"hasFreeUploadSlot":true,"lockedF... +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:208 - Processing 17 user responses +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User zeroscan has 2 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User buk4 has 1 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Letham has 3 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User nightmare_dronemk12 has 3 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Ultravod has 9 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User RuuqoHoosk has 346 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User koalabeer has 3 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User raspberry2 has 10 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User KindaRatchet has 1 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User HomotopicCensorship has 3 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Kaya-Sem has 1 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User belthane has 3 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User leonardoclk has 3 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Dax_VR has 10 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User exsanguinidraculae has 2 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User ofoijacussa has 0 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Shooby has 6 files +2025-07-09 22:05:30 - newmusic.soulseek_client - DEBUG - search:290 - No new results, total still: 406 +2025-07-09 22:05:30 - newmusic.soulseek_client - INFO - search:298 - Search completed. Found 406 total results for query: virtual mage +2025-07-09 22:05:45 - newmusic.soulseek_client - DEBUG - download:314 - Attempting to download: @@bmlwc\Soulseek Downloads\c34wkpcv\Relaxing Synthwave Top 105\083 - Virtual Mage - Aether.mp3 from buk4 (size: 8344437) +2025-07-09 22:05:45 - newmusic.soulseek_client - DEBUG - download:327 - Using web interface API format: [{'filename': '@@bmlwc\\Soulseek Downloads\\c34wkpcv\\Relaxing Synthwave Top 105\\083 - Virtual Mage - Aether.mp3', 'size': 8344437, 'path': 'E:\\Broque Projects\\newMusic\\downloads'}] +2025-07-09 22:05:45 - newmusic.soulseek_client - DEBUG - download:331 - Trying web interface endpoint: transfers/downloads/buk4 +2025-07-09 22:05:45 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making POST request to: http://localhost:5030/api/v0/transfers/downloads/buk4 +2025-07-09 22:05:45 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-09 22:05:45 - newmusic.soulseek_client - DEBUG - _make_request:112 - JSON payload: [{'filename': '@@bmlwc\\Soulseek Downloads\\c34wkpcv\\Relaxing Synthwave Top 105\\083 - Virtual Mage - Aether.mp3', 'size': 8344437, 'path': 'E:\\Broque Projects\\newMusic\\downloads'}] +2025-07-09 22:05:46 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 201 +2025-07-09 22:05:46 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: ... +2025-07-09 22:05:46 - newmusic.soulseek_client - INFO - download:336 - [SUCCESS] Started download: @@bmlwc\Soulseek Downloads\c34wkpcv\Relaxing Synthwave Top 105\083 - Virtual Mage - Aether.mp3 from buk4 diff --git a/ui/pages/__pycache__/downloads.cpython-312.pyc b/ui/pages/__pycache__/downloads.cpython-312.pyc index f8091661..de68df99 100644 Binary files a/ui/pages/__pycache__/downloads.cpython-312.pyc and b/ui/pages/__pycache__/downloads.cpython-312.pyc differ diff --git a/ui/pages/downloads.py b/ui/pages/downloads.py index 49701b2c..b758d31b 100644 --- a/ui/pages/downloads.py +++ b/ui/pages/downloads.py @@ -237,91 +237,267 @@ class SearchResultItem(QFrame): def __init__(self, search_result, parent=None): super().__init__(parent) self.search_result = search_result + self.is_downloading = False self.setup_ui() def setup_ui(self): - self.setFixedHeight(60) + self.setFixedHeight(120) # Increased height for better spacing self.setStyleSheet(""" SearchResultItem { - background: #282828; - border-radius: 6px; - border: 1px solid #404040; - margin: 2px; + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 rgba(40, 40, 40, 0.95), + stop:1 rgba(30, 30, 30, 0.95)); + border-radius: 12px; + border: 1px solid rgba(64, 64, 64, 0.8); + margin: 8px; } SearchResultItem:hover { - background: #333333; - border: 1px solid #1db954; + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 rgba(51, 51, 51, 0.95), + stop:1 rgba(40, 40, 40, 0.95)); + border: 1px solid rgba(29, 185, 84, 0.6); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); } """) layout = QHBoxLayout(self) - layout.setContentsMargins(15, 10, 15, 10) - layout.setSpacing(12) + layout.setContentsMargins(20, 15, 20, 15) + layout.setSpacing(20) - # File info - info_layout = QVBoxLayout() - info_layout.setSpacing(3) + # Album art placeholder + album_art = QLabel() + album_art.setFixedSize(80, 80) + album_art.setStyleSheet(""" + QLabel { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 rgba(29, 185, 84, 0.3), + stop:1 rgba(29, 185, 84, 0.1)); + border-radius: 8px; + border: 2px solid rgba(29, 185, 84, 0.2); + } + """) + album_art.setAlignment(Qt.AlignmentFlag.AlignCenter) + album_art.setText("đŸŽĩ") + album_art.setFont(QFont("Arial", 24)) - # Filename - filename_label = QLabel(self.search_result.filename) - filename_label.setFont(QFont("Arial", 10, QFont.Weight.Medium)) - filename_label.setStyleSheet("color: #ffffff;") - filename_label.setWordWrap(True) + # Main content area + content_layout = QVBoxLayout() + content_layout.setSpacing(8) - # Details - details = [] - if self.search_result.bitrate: - details.append(f"{self.search_result.bitrate}kbps") - details.append(self.search_result.quality.upper()) - details.append(f"{self.search_result.size // (1024*1024)}MB") - details.append(f"User: {self.search_result.username}") + # Primary info (song/artist extracted from filename) + primary_info = self._extract_song_info() - details_label = QLabel(" â€ĸ ".join(details)) - details_label.setFont(QFont("Arial", 9)) - details_label.setStyleSheet("color: #b3b3b3;") + # Song title + song_title = QLabel(primary_info['title']) + song_title.setFont(QFont("Arial", 14, QFont.Weight.Bold)) + song_title.setStyleSheet("color: #ffffff; margin-bottom: 2px;") + song_title.setWordWrap(True) - info_layout.addWidget(filename_label) - info_layout.addWidget(details_label) + # Artist/Album info + artist_info = QLabel(primary_info['artist']) + artist_info.setFont(QFont("Arial", 12, QFont.Weight.Normal)) + artist_info.setStyleSheet("color: #b3b3b3; margin-bottom: 6px;") - # Quality indicator - quality_label = QLabel(f"★ {self.search_result.quality_score:.1f}") - quality_label.setFixedWidth(50) - quality_label.setAlignment(Qt.AlignmentFlag.AlignCenter) - quality_label.setFont(QFont("Arial", 9, QFont.Weight.Bold)) + # Technical details + tech_layout = QHBoxLayout() + tech_layout.setSpacing(15) + + # Quality badge + quality_badge = self._create_quality_badge() + tech_layout.addWidget(quality_badge) + + # File size + size_mb = self.search_result.size // (1024*1024) + size_label = QLabel(f"{size_mb} MB") + size_label.setFont(QFont("Arial", 10, QFont.Weight.Medium)) + size_label.setStyleSheet("color: #888888;") + tech_layout.addWidget(size_label) + + # Duration if available + if self.search_result.duration: + duration_mins = self.search_result.duration // 60 + duration_secs = self.search_result.duration % 60 + duration_label = QLabel(f"{duration_mins}:{duration_secs:02d}") + duration_label.setFont(QFont("Arial", 10, QFont.Weight.Medium)) + duration_label.setStyleSheet("color: #888888;") + tech_layout.addWidget(duration_label) + + tech_layout.addStretch() + + # User info + user_layout = QHBoxLayout() + user_layout.setSpacing(10) + + # User avatar placeholder + user_avatar = QLabel("👤") + user_avatar.setFont(QFont("Arial", 14)) + user_avatar.setStyleSheet("color: #1db954;") + + # Username + username_label = QLabel(self.search_result.username) + username_label.setFont(QFont("Arial", 11, QFont.Weight.Medium)) + username_label.setStyleSheet("color: #1db954;") + + # Upload speed indicator + speed_indicator = self._create_speed_indicator() + + user_layout.addWidget(user_avatar) + user_layout.addWidget(username_label) + user_layout.addWidget(speed_indicator) + user_layout.addStretch() + + content_layout.addWidget(song_title) + content_layout.addWidget(artist_info) + content_layout.addLayout(tech_layout) + content_layout.addLayout(user_layout) + content_layout.addStretch() + + # Action area + action_layout = QVBoxLayout() + action_layout.setSpacing(10) + action_layout.setAlignment(Qt.AlignmentFlag.AlignCenter) + + # Quality score + quality_score = QLabel(f"★ {self.search_result.quality_score:.1f}") + quality_score.setAlignment(Qt.AlignmentFlag.AlignCenter) + quality_score.setFont(QFont("Arial", 12, QFont.Weight.Bold)) if self.search_result.quality_score >= 0.9: - quality_label.setStyleSheet("color: #1db954;") + quality_score.setStyleSheet("color: #1db954; background: rgba(29, 185, 84, 0.1); padding: 4px 8px; border-radius: 6px;") elif self.search_result.quality_score >= 0.7: - quality_label.setStyleSheet("color: #ffa500;") + quality_score.setStyleSheet("color: #ffa500; background: rgba(255, 165, 0, 0.1); padding: 4px 8px; border-radius: 6px;") else: - quality_label.setStyleSheet("color: #e22134;") + quality_score.setStyleSheet("color: #e22134; background: rgba(226, 33, 52, 0.1); padding: 4px 8px; border-radius: 6px;") # Download button - download_btn = QPushButton("đŸ“Ĩ Download") - download_btn.setFixedSize(90, 30) - download_btn.clicked.connect(self.request_download) - download_btn.setStyleSheet(""" + self.download_btn = QPushButton("âŦ‡ī¸ Download") + self.download_btn.setFixedSize(120, 40) + self.download_btn.clicked.connect(self.request_download) + self.download_btn.setStyleSheet(""" QPushButton { - background: rgba(29, 185, 84, 0.2); - border: 1px solid #1db954; - border-radius: 15px; - color: #1db954; - font-size: 9px; + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 rgba(29, 185, 84, 0.9), + stop:1 rgba(24, 156, 71, 0.9)); + border: none; + border-radius: 20px; + color: #000000; + font-size: 12px; font-weight: bold; } QPushButton:hover { - background: #1db954; - color: #000000; + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 rgba(30, 215, 96, 1.0), + stop:1 rgba(25, 180, 80, 1.0)); + transform: translateY(-1px); + } + QPushButton:pressed { + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 rgba(24, 156, 71, 1.0), + stop:1 rgba(20, 130, 60, 1.0)); } """) - layout.addLayout(info_layout) - layout.addStretch() - layout.addWidget(quality_label) - layout.addWidget(download_btn) + action_layout.addWidget(quality_score) + action_layout.addWidget(self.download_btn) + action_layout.addStretch() + + layout.addWidget(album_art) + layout.addLayout(content_layout) + layout.addLayout(action_layout) + + def _extract_song_info(self): + """Extract song title and artist from filename""" + filename = self.search_result.filename + + # Remove file extension + name_without_ext = filename.rsplit('.', 1)[0] + + # Common patterns for artist - title separation + separators = [' - ', ' – ', ' — ', '_-_', ' | '] + + for sep in separators: + if sep in name_without_ext: + parts = name_without_ext.split(sep, 1) + return { + 'title': parts[1].strip(), + 'artist': parts[0].strip() + } + + # If no separator found, use filename as title + return { + 'title': name_without_ext, + 'artist': 'Unknown Artist' + } + + def _create_quality_badge(self): + """Create a quality indicator badge""" + quality = self.search_result.quality.upper() + bitrate = self.search_result.bitrate + + if quality == 'FLAC': + badge_text = "FLAC" + badge_color = "#1db954" + elif bitrate and bitrate >= 320: + badge_text = f"{bitrate}k" + badge_color = "#1db954" + elif bitrate and bitrate >= 256: + badge_text = f"{bitrate}k" + badge_color = "#ffa500" + elif bitrate and bitrate >= 192: + badge_text = f"{bitrate}k" + badge_color = "#ffaa00" + else: + badge_text = quality + badge_color = "#e22134" + + badge = QLabel(badge_text) + badge.setFont(QFont("Arial", 9, QFont.Weight.Bold)) + badge.setAlignment(Qt.AlignmentFlag.AlignCenter) + badge.setFixedSize(60, 24) + badge.setStyleSheet(f""" + QLabel {{ + background: {badge_color}; + color: #000000; + border-radius: 12px; + padding: 2px 8px; + }} + """) + + return badge + + def _create_speed_indicator(self): + """Create upload speed indicator""" + speed = self.search_result.upload_speed + slots = self.search_result.free_upload_slots + + if slots > 0 and speed > 100: + indicator_color = "#1db954" + speed_text = "🚀 Fast" + elif slots > 0: + indicator_color = "#ffa500" + speed_text = "⚡ Available" + else: + indicator_color = "#e22134" + speed_text = "âŗ Queued" + + indicator = QLabel(speed_text) + indicator.setFont(QFont("Arial", 9, QFont.Weight.Medium)) + indicator.setStyleSheet(f"color: {indicator_color};") + + return indicator def request_download(self): - self.download_requested.emit(self.search_result) + if not self.is_downloading: + self.is_downloading = True + self.download_btn.setText("âŗ Downloading...") + self.download_btn.setEnabled(False) + self.download_requested.emit(self.search_result) + + def reset_download_state(self): + """Reset the download button state""" + self.is_downloading = False + self.download_btn.setText("âŦ‡ī¸ Download") + self.download_btn.setEnabled(True) class DownloadItem(QFrame): def __init__(self, title: str, artist: str, status: str, progress: int = 0, parent=None): @@ -881,113 +1057,6 @@ class DownloadsPage(QWidget): self.download_threads.remove(thread) thread.deleteLater() - def explore_slskd_api(self): - """Explore slskd API endpoints to find the correct download endpoint""" - if not self.soulseek_client: - QMessageBox.warning(self, "Error", "Soulseek client not available") - return - - # Stop any existing exploration thread - if self.explore_thread and self.explore_thread.isRunning(): - self.explore_thread.stop() - self.explore_thread.wait(1000) # Wait up to 1 second - if self.explore_thread.isRunning(): - self.explore_thread.terminate() - - # Create and track new exploration thread - self.explore_thread = ExploreApiThread(self.soulseek_client) - self.explore_thread.exploration_completed.connect(self.on_api_exploration_completed) - self.explore_thread.exploration_failed.connect(self.on_api_exploration_failed) - self.explore_thread.finished.connect(self.on_explore_thread_finished) - self.explore_thread.start() - - def on_api_exploration_completed(self, api_info): - """Handle API exploration results""" - message = "slskd API Exploration Results:\n\n" - - if api_info.get('swagger_available'): - message += "✓ Swagger Documentation Available\n\n" - download_endpoints = api_info.get('download_endpoints', {}) - if download_endpoints: - message += "Download/Transfer Endpoints Found:\n" - for path, methods in download_endpoints.items(): - message += f" {path}: {list(methods.keys())}\n" - else: - message += "No download/transfer endpoints found in Swagger docs\n" - else: - message += "✗ Swagger Documentation Not Available\n\n" - available_endpoints = api_info.get('available_endpoints', {}) - if available_endpoints: - message += "Available Endpoints Found:\n" - for endpoint, status in available_endpoints.items(): - message += f" {endpoint}: {status}\n" - else: - message += "No endpoints found\n" - - message += f"\nBase URL: {api_info.get('base_url', 'Unknown')}" - message += f"\n\nYou can also check: {api_info.get('base_url', 'http://localhost:5030')}/swagger" - - QMessageBox.information(self, "API Exploration Results", message) - - def on_api_exploration_failed(self, error_msg): - """Handle API exploration failure""" - QMessageBox.critical(self, "API Exploration Failed", f"Failed to explore API: {error_msg}") - - def on_explore_thread_finished(self): - """Clean up when explore thread finishes""" - if self.explore_thread: - self.explore_thread.deleteLater() - self.explore_thread = None - - def get_session_info(self): - """Get slskd session info including version""" - if not self.soulseek_client: - QMessageBox.warning(self, "Error", "Soulseek client not available") - return - - # Stop any existing session thread - if self.session_thread and self.session_thread.isRunning(): - self.session_thread.stop() - self.session_thread.wait(1000) # Wait up to 1 second - if self.session_thread.isRunning(): - self.session_thread.terminate() - - # Create and track new session thread - self.session_thread = SessionInfoThread(self.soulseek_client) - self.session_thread.session_info_completed.connect(self.on_session_info_completed) - self.session_thread.session_info_failed.connect(self.on_session_info_failed) - self.session_thread.finished.connect(self.on_session_thread_finished) - self.session_thread.start() - - def on_session_info_completed(self, session_info): - """Handle session info results""" - message = "slskd Session Information:\n\n" - - if session_info: - for key, value in session_info.items(): - message += f"{key}: {value}\n" - else: - message += "No session information available" - - message += f"\n\nManual Steps:\n" - message += f"1. Open: http://localhost:5030\n" - message += f"2. Press F12 → Network tab\n" - message += f"3. Search for a file\n" - message += f"4. Click Download\n" - message += f"5. Check the HTTP request in Network tab\n" - message += f"6. Note the endpoint, method, and payload" - - QMessageBox.information(self, "slskd Session Info", message) - - def on_session_info_failed(self, error_msg): - """Handle session info failure""" - QMessageBox.critical(self, "Session Info Failed", f"Failed to get session info: {error_msg}") - - def on_session_thread_finished(self): - """Clean up when session thread finishes""" - if self.session_thread: - self.session_thread.deleteLater() - self.session_thread = None def cleanup_all_threads(self): """Stop and cleanup all active threads""" @@ -1097,47 +1166,9 @@ class DownloadsPage(QWidget): } """) - # API Explorer button (for debugging) - explore_btn = QPushButton("🔍 Explore API") - explore_btn.setFixedHeight(35) - explore_btn.clicked.connect(self.explore_slskd_api) - explore_btn.setStyleSheet(""" - QPushButton { - background: transparent; - border: 1px solid #1db954; - border-radius: 17px; - color: #1db954; - font-size: 11px; - font-weight: bold; - } - QPushButton:hover { - background: rgba(29, 185, 84, 0.1); - } - """) - - # Session Info button (for debugging) - session_btn = QPushButton("â„šī¸ Session Info") - session_btn.setFixedHeight(35) - session_btn.clicked.connect(self.get_session_info) - session_btn.setStyleSheet(""" - QPushButton { - background: transparent; - border: 1px solid #ffa500; - border-radius: 17px; - color: #ffa500; - font-size: 11px; - font-weight: bold; - } - QPushButton:hover { - background: rgba(255, 165, 0, 0.1); - } - """) - controls_layout.addWidget(controls_title) controls_layout.addWidget(pause_btn) controls_layout.addWidget(clear_btn) - controls_layout.addWidget(explore_btn) - controls_layout.addWidget(session_btn) # Download stats stats_frame = QFrame()