From ee42ceaaafed2f87c9ce68198e7c03320e091eb5 Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Fri, 25 Jul 2025 08:36:19 -0700 Subject: [PATCH] better --- logs/app.log | 678 ++++++++++++++++++++++ ui/pages/__pycache__/sync.cpython-312.pyc | Bin 199186 -> 201112 bytes ui/pages/sync.py | 111 ++-- 3 files changed, 755 insertions(+), 34 deletions(-) diff --git a/logs/app.log b/logs/app.log index cde21796..4327596d 100644 --- a/logs/app.log +++ b/logs/app.log @@ -14859,3 +14859,681 @@ 2025-07-25 08:00:34 - newmusic.plex_client - ERROR - create_playlist:227 - CreatePlaylist failed: Must include items to add when creating new playlist. 2025-07-25 08:00:34 - newmusic.plex_client - INFO - create_playlist:231 - Created playlist 'Aether' with 3 tracks (using items parameter) 2025-07-25 08:00:34 - newmusic.sync_service - INFO - sync_playlist:196 - Sync completed: 100.0% success rate +2025-07-25 08:09:21 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-25 08:09:21 - newmusic.main - INFO - main:211 - Starting NewMusic application +2025-07-25 08:09:21 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 08:09:21 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-25 08:09:21 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 08:09:22 - newmusic.main - INFO - change_page:163 - Changed to page: dashboard +2025-07-25 08:09:22 - newmusic.main - INFO - setup_media_player_connections:150 - Media player connections established between sidebar and downloads page +2025-07-25 08:09:22 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-25 08:09:22 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-25 08:09:24 - newmusic.main - INFO - change_page:163 - Changed to page: sync +2025-07-25 08:09:24 - newmusic.spotify_client - INFO - _ensure_user_id:195 - Successfully authenticated with Spotify as broquethomas +2025-07-25 08:09:25 - newmusic.spotify_client - INFO - get_user_playlists_metadata_only:256 - Retrieved 8 playlist metadata (first batch) +2025-07-25 08:20:44 - newmusic.main - INFO - closeEvent:176 - Closing application... +2025-07-25 08:20:44 - newmusic.main - INFO - closeEvent:181 - Cleaning up Downloads page threads... +2025-07-25 08:20:44 - newmusic.main - INFO - closeEvent:186 - Stopping status monitoring thread... +2025-07-25 08:20:45 - newmusic.main - INFO - closeEvent:191 - Closing Soulseek client... +2025-07-25 08:20:45 - newmusic.main - INFO - closeEvent:197 - Application closed successfully +2025-07-25 08:20:47 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-25 08:20:47 - newmusic.main - INFO - main:211 - Starting NewMusic application +2025-07-25 08:20:47 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 08:20:47 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-25 08:20:47 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 08:20:48 - newmusic.main - INFO - change_page:163 - Changed to page: dashboard +2025-07-25 08:20:48 - newmusic.main - INFO - setup_media_player_connections:150 - Media player connections established between sidebar and downloads page +2025-07-25 08:20:49 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-25 08:20:49 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-25 08:20:50 - newmusic.main - INFO - change_page:163 - Changed to page: sync +2025-07-25 08:20:50 - newmusic.spotify_client - INFO - _ensure_user_id:195 - Successfully authenticated with Spotify as broquethomas +2025-07-25 08:20:50 - newmusic.spotify_client - INFO - get_user_playlists_metadata_only:256 - Retrieved 8 playlist metadata (first batch) +2025-07-25 08:21:35 - newmusic.main - INFO - closeEvent:176 - Closing application... +2025-07-25 08:21:35 - newmusic.main - INFO - closeEvent:181 - Cleaning up Downloads page threads... +2025-07-25 08:21:35 - newmusic.main - INFO - closeEvent:186 - Stopping status monitoring thread... +2025-07-25 08:21:37 - newmusic.main - INFO - closeEvent:191 - Closing Soulseek client... +2025-07-25 08:21:37 - newmusic.main - INFO - closeEvent:197 - Application closed successfully +2025-07-25 08:21:39 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-25 08:21:39 - newmusic.main - INFO - main:211 - Starting NewMusic application +2025-07-25 08:21:39 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 08:21:39 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-25 08:21:39 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 08:21:40 - newmusic.main - INFO - change_page:163 - Changed to page: dashboard +2025-07-25 08:21:40 - newmusic.main - INFO - setup_media_player_connections:150 - Media player connections established between sidebar and downloads page +2025-07-25 08:21:40 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-25 08:21:40 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-25 08:21:41 - newmusic.main - INFO - change_page:163 - Changed to page: sync +2025-07-25 08:21:41 - newmusic.spotify_client - INFO - _ensure_user_id:195 - Successfully authenticated with Spotify as broquethomas +2025-07-25 08:21:41 - newmusic.spotify_client - INFO - get_user_playlists_metadata_only:256 - Retrieved 8 playlist metadata (first batch) +2025-07-25 08:22:14 - newmusic.sync_service - INFO - sync_playlist:94 - Starting sync for playlist: Favorite Artists +2025-07-25 08:22:14 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 08:22:14 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:14 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'virtual mage spaceflute' +2025-07-25 08:22:15 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'spaceflute' +2025-07-25 08:22:16 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 08:22:16 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:16 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:16 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Space Flute' (ratingKey: 155525) +2025-07-25 08:22:16 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Space Flute' +2025-07-25 08:22:16 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'youth 83' +2025-07-25 08:22:16 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:16 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'youth 83 goldeyes' +2025-07-25 08:22:17 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'goldeyes' +2025-07-25 08:22:17 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'youth 83' +2025-07-25 08:22:17 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:17 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'youth 83 gold eyes' +2025-07-25 08:22:18 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'gold eyes' +2025-07-25 08:22:19 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Gold Eyes (feat. Spherelet)' (ratingKey: 451921) +2025-07-25 08:22:19 - newmusic.plex_client - INFO - search_tracks:390 - Found 1 total potential matches for 'gold eyes' by 'youth 83' after all stages. +2025-07-25 08:22:19 - newmusic.sync_service - DEBUG - _find_track_in_plex:299 - No confident match for 'Gold Eyes' (best score: 0.69) +2025-07-25 08:22:19 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'inteus' +2025-07-25 08:22:19 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:19 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'inteus poolparty' +2025-07-25 08:22:20 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'poolparty' +2025-07-25 08:22:20 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Poolparty' (ratingKey: 351361) +2025-07-25 08:22:20 - newmusic.plex_client - INFO - search_tracks:390 - Found 1 total potential matches for 'poolparty' by 'inteus' after all stages. +2025-07-25 08:22:20 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'inteus' +2025-07-25 08:22:20 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:20 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:20 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Pool Party' (ratingKey: 391917) +2025-07-25 08:22:20 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Pool Party' +2025-07-25 08:22:20 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'the g' +2025-07-25 08:22:21 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:21 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:21 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Starshine' (ratingKey: 391979) +2025-07-25 08:22:21 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Starshine' +2025-07-25 08:22:21 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'rezz' +2025-07-25 08:22:21 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:21 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'rezz puzzlebox' +2025-07-25 08:22:21 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'puzzlebox' +2025-07-25 08:22:22 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Puzzlebox (feat. Juice Jackal)' (ratingKey: 506426) +2025-07-25 08:22:22 - newmusic.plex_client - INFO - search_tracks:390 - Found 1 total potential matches for 'puzzlebox' by 'rezz' after all stages. +2025-07-25 08:22:22 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'rezz' +2025-07-25 08:22:22 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:22 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:22 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Puzzle Box' (ratingKey: 159681) +2025-07-25 08:22:22 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Puzzle Box' +2025-07-25 08:22:22 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'exmag' +2025-07-25 08:22:22 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:22 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'exmag timepiece' +2025-07-25 08:22:23 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'timepiece' +2025-07-25 08:22:24 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'exmag' +2025-07-25 08:22:24 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 2 candidates. +2025-07-25 08:22:24 - newmusic.plex_client - INFO - search_tracks:344 - Found 2 candidates in Stage 1. Exiting early. +2025-07-25 08:22:24 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Time Piece' (ratingKey: 452411) +2025-07-25 08:22:24 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Time Piece' (ratingKey: 452354) +2025-07-25 08:22:24 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Time Piece' +2025-07-25 08:22:24 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'goodlife' +2025-07-25 08:22:24 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'goodlife goodlifevipmix' +2025-07-25 08:22:25 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'goodlifevipmix' +2025-07-25 08:22:25 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'goodlife' +2025-07-25 08:22:25 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'goodlife good life' +2025-07-25 08:22:26 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'good life' +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Good Life' (ratingKey: 346863) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Good Life' (ratingKey: 490517) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Good Life (Live at Royal Albert Hall)' (ratingKey: 490531) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Good Life' (ratingKey: 183756) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Good Life' (ratingKey: 464348) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '(I Hope You Find) The Good Life' (ratingKey: 231222) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '(I Hope You Find) The Good Life (Instrumental)' (ratingKey: 231211) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'You're the Only Good Thing In My Life' (ratingKey: 383673) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Tha Good Life (feat. Mod Sun & Pat Brown)' (ratingKey: 395450) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Living the Good Life' (ratingKey: 464065) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Good Riddance (Time of Your Life)' (ratingKey: 437125) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'The Good Life' (ratingKey: 378485) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Good Life' (ratingKey: 520902) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Good Life' (ratingKey: 520892) +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Good Life (VIP Mix)' (ratingKey: 520904) +2025-07-25 08:22:27 - newmusic.plex_client - INFO - search_tracks:390 - Found 15 total potential matches for 'good life' by 'goodlife' after all stages. +2025-07-25 08:22:27 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Good Life - VIP Mix' +2025-07-25 08:22:27 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'anomalie' +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 2 candidates. +2025-07-25 08:22:28 - newmusic.plex_client - INFO - search_tracks:344 - Found 2 candidates in Stage 1. Exiting early. +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Velours' (ratingKey: 392143) +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Velours' (ratingKey: 392090) +2025-07-25 08:22:28 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Velours' +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'lucid monday' +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:28 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Beatbox' (ratingKey: 392198) +2025-07-25 08:22:28 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Beatbox' +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'alex boychuk' +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:28 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Neonoir (feat. Lebedev Sax)' (ratingKey: 255927) +2025-07-25 08:22:28 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Neonoir' +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'ark patrol' +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 2 candidates. +2025-07-25 08:22:28 - newmusic.plex_client - INFO - search_tracks:344 - Found 2 candidates in Stage 1. Exiting early. +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Hex (VIP)' (ratingKey: 520063) +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Hex' (ratingKey: 520080) +2025-07-25 08:22:28 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Hex' +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'haezer' +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:28 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Energy' (ratingKey: 519431) +2025-07-25 08:22:28 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Energy' +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'zapravka' +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:28 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'zapravka votchtoialiubliu' +2025-07-25 08:22:29 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'votchtoialiubliu' +2025-07-25 08:22:30 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'zapravka' +2025-07-25 08:22:30 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:30 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'zapravka vot chto ia liubliu' +2025-07-25 08:22:30 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'vot chto ia liubliu' +2025-07-25 08:22:31 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'votchtoialiubliu' +2025-07-25 08:22:32 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'votchtoialiubliu' +2025-07-25 08:22:32 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'vot chto ia liubliu' +2025-07-25 08:22:33 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'vot chto ia liubliu' +2025-07-25 08:22:34 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'ava low' +2025-07-25 08:22:34 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:34 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'ava low casualchic' +2025-07-25 08:22:34 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'casualchic' +2025-07-25 08:22:35 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'ava low' +2025-07-25 08:22:35 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:35 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:35 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Casual Chic' (ratingKey: 518596) +2025-07-25 08:22:35 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Casual Chic' +2025-07-25 08:22:35 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'deti rave' +2025-07-25 08:22:35 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'deti rave mazdarx7' +2025-07-25 08:22:36 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'mazdarx7' +2025-07-25 08:22:37 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'deti rave' +2025-07-25 08:22:37 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'deti rave mazda rx-7' +2025-07-25 08:22:37 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'mazda rx-7' +2025-07-25 08:22:38 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'MAZDA RX-7' (ratingKey: 517899) +2025-07-25 08:22:38 - newmusic.plex_client - INFO - search_tracks:390 - Found 1 total potential matches for 'mazda rx-7' by 'deti rave' after all stages. +2025-07-25 08:22:38 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'MAZDA RX-7' +2025-07-25 08:22:38 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'faneone' +2025-07-25 08:22:38 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:38 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Going' (ratingKey: 518293) +2025-07-25 08:22:38 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Going' +2025-07-25 08:22:38 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'wsde' +2025-07-25 08:22:38 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:38 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'wsde phonkmeharder' +2025-07-25 08:22:39 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'phonkmeharder' +2025-07-25 08:22:40 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'wsde' +2025-07-25 08:22:40 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 3 candidates. +2025-07-25 08:22:40 - newmusic.plex_client - INFO - search_tracks:344 - Found 3 candidates in Stage 1. Exiting early. +2025-07-25 08:22:40 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Phonk Me Harder' (ratingKey: 517441) +2025-07-25 08:22:40 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Phonk Me Harder 2' (ratingKey: 517451) +2025-07-25 08:22:40 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Phonk Me Harder 3' (ratingKey: 517433) +2025-07-25 08:22:40 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Phonk Me Harder' +2025-07-25 08:22:40 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'pinkdesperado' +2025-07-25 08:22:41 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'pinkdesperado' +2025-07-25 08:22:41 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'pink desperado' +2025-07-25 08:22:42 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'pink desperado' +2025-07-25 08:22:43 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'posij' +2025-07-25 08:22:43 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:43 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'posij pinkdesperado' +2025-07-25 08:22:43 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'pinkdesperado' +2025-07-25 08:22:44 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'posij' +2025-07-25 08:22:44 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:44 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'posij pink desperado' +2025-07-25 08:22:45 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'pink desperado' +2025-07-25 08:22:45 - newmusic.sync_service - DEBUG - _find_track_in_plex:272 - No artist-based matches found. Using title-only fallback for 'Pink Desperado' +2025-07-25 08:22:45 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'pinkdesperado' +2025-07-25 08:22:46 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'pinkdesperado' +2025-07-25 08:22:47 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'pink desperado' +2025-07-25 08:22:47 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'pink desperado' +2025-07-25 08:22:48 - newmusic.sync_service - DEBUG - _find_track_in_plex:290 - No Plex candidates found for 'Pink Desperado' +2025-07-25 08:22:48 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'lestmor' +2025-07-25 08:22:48 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 3 candidates. +2025-07-25 08:22:48 - newmusic.plex_client - INFO - search_tracks:344 - Found 3 candidates in Stage 1. Exiting early. +2025-07-25 08:22:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Triplav (Slowed)' (ratingKey: 517314) +2025-07-25 08:22:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Triplav (Sped Up)' (ratingKey: 517305) +2025-07-25 08:22:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Triplav' (ratingKey: 517256) +2025-07-25 08:22:48 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Triplav' +2025-07-25 08:22:48 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'teddybears' +2025-07-25 08:22:48 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:48 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'teddybears cobrastylefeatmadcobraasfeaturedinsuperman' +2025-07-25 08:22:49 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'cobrastylefeatmadcobraasfeaturedinsuperman' +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'teddybears' +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:50 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Cobrastyle (feat. Mad Cobra)' (ratingKey: 514935) +2025-07-25 08:22:50 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Cobrastyle (feat. Mad Cobra) - As featured in Superman' +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'funkin matt' +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:50 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Joi' (ratingKey: 513038) +2025-07-25 08:22:50 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Joi' +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'nielsir' +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:50 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Theta' (ratingKey: 512938) +2025-07-25 08:22:50 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Theta' +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'adieu aru' +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:50 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Euphorie' (ratingKey: 518052) +2025-07-25 08:22:50 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Euphorie' +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'peregrihn' +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:50 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Isles' (ratingKey: 512724) +2025-07-25 08:22:50 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Isles' +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'alison' +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:50 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'alison screens' +2025-07-25 08:22:51 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'screens' +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Screens' (ratingKey: 204948) +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Screensaver' (ratingKey: 300144) +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'The Killing Screens' (ratingKey: 399065) +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'The Killing Screens' (ratingKey: 399031) +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'screenshot me like one of your french girls' (ratingKey: 167710) +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Green Screens' (ratingKey: 239365) +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Tiny Glowing Screens, Pt. 1' (ratingKey: 487227) +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Tiny Glowing Screens, Pt. 2' (ratingKey: 487228) +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Tiny Glowing Screens, Pt. 3' (ratingKey: 487175) +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Tiny Glowing Screens, Pt. 3' (ratingKey: 487254) +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Centrefolds & Empty Screens' (ratingKey: 454179) +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Screens' (ratingKey: 459756) +2025-07-25 08:22:53 - newmusic.plex_client - INFO - search_tracks:390 - Found 13 total potential matches for 'screens' by 'alison' after all stages. +2025-07-25 08:22:53 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Screens' +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'rosentwig' +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:53 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Imagination' (ratingKey: 512607) +2025-07-25 08:22:53 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Imagination' +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'fantom 87' +2025-07-25 08:22:53 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'fantom 87 thecomet' +2025-07-25 08:22:54 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'thecomet' +2025-07-25 08:22:54 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'fantom 87' +2025-07-25 08:22:54 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'fantom 87 the comet' +2025-07-25 08:22:55 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'the comet' +2025-07-25 08:22:56 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'The Comet' (ratingKey: 512548) +2025-07-25 08:22:56 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'The Juiceman Cometh' (ratingKey: 310634) +2025-07-25 08:22:56 - newmusic.plex_client - INFO - search_tracks:390 - Found 2 total potential matches for 'the comet' by 'fantom 87' after all stages. +2025-07-25 08:22:56 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'The Comet' +2025-07-25 08:22:56 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'miami nights 1984' +2025-07-25 08:22:56 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:56 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'miami nights 1984 mn84theme' +2025-07-25 08:22:57 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'mn84theme' +2025-07-25 08:22:57 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'miami nights 1984' +2025-07-25 08:22:57 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:22:57 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:22:57 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'MN84 Theme' (ratingKey: 156745) +2025-07-25 08:22:57 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'MN84 Theme' +2025-07-25 08:22:57 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'admo' +2025-07-25 08:22:58 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:22:58 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'admo equinox' +2025-07-25 08:22:58 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'equinox' +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'equinox (for me!)' (ratingKey: 258625) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Équinoxe' (ratingKey: 484278) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Equinox' (ratingKey: 322403) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Equinoxe' (ratingKey: 260391) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Equinox' (ratingKey: 327924) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Equinox Desire' (ratingKey: 399415) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Equinox' (ratingKey: 508939) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'springtime equinox offering (ambient)' (ratingKey: 487602) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Equinox' (ratingKey: 303443) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Equinox Dub' (ratingKey: 498926) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Equinox' (ratingKey: 438203) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Equinox' (ratingKey: 438156) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Celestial Equinox' (ratingKey: 166032) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Equinox' (ratingKey: 322081) +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Equinox' (ratingKey: 185067) +2025-07-25 08:23:00 - newmusic.plex_client - INFO - search_tracks:390 - Found 15 total potential matches for 'equinox' by 'admo' after all stages. +2025-07-25 08:23:00 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Equinox' +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'voyage' +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:23:00 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Astra' (ratingKey: 511997) +2025-07-25 08:23:00 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Astra' +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'adieu aru' +2025-07-25 08:23:00 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 4 candidates. +2025-07-25 08:23:00 - newmusic.plex_client - INFO - search_tracks:344 - Found 4 candidates in Stage 1. Exiting early. +2025-07-25 08:23:01 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Release' (ratingKey: 518033) +2025-07-25 08:23:01 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Release (Slowed)' (ratingKey: 518034) +2025-07-25 08:23:01 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Release (Super Slowed)' (ratingKey: 518035) +2025-07-25 08:23:01 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Release (Sped Up)' (ratingKey: 518036) +2025-07-25 08:23:01 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Release' +2025-07-25 08:23:01 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'portugal the man' +2025-07-25 08:23:01 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:23:01 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'portugal the man grimgeneration' +2025-07-25 08:23:02 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'grimgeneration' +2025-07-25 08:23:02 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'portugal the man' +2025-07-25 08:23:02 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:23:02 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:23:02 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Grim Generation' (ratingKey: 511221) +2025-07-25 08:23:02 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Grim Generation' +2025-07-25 08:23:02 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'dr fresch' +2025-07-25 08:23:02 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:23:02 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:23:03 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Armageddon' (ratingKey: 510712) +2025-07-25 08:23:03 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Armageddon' +2025-07-25 08:23:03 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'no signe' +2025-07-25 08:23:03 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:23:03 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'no signe begood' +2025-07-25 08:23:03 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'begood' +2025-07-25 08:23:04 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'no signe' +2025-07-25 08:23:04 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:23:04 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:23:04 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Be Good' (ratingKey: 509577) +2025-07-25 08:23:04 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Be Good' +2025-07-25 08:23:04 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'laika beats' +2025-07-25 08:23:04 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:23:04 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:23:04 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Different' (ratingKey: 509065) +2025-07-25 08:23:04 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Different' +2025-07-25 08:23:04 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'mat zo' +2025-07-25 08:23:04 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:23:04 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'mat zo lesmishegas' +2025-07-25 08:23:05 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'lesmishegas' +2025-07-25 08:23:06 - newmusic.sync_service - INFO - cancel_sync:57 - PlaylistSyncService.cancel_sync() called - setting cancellation flag +2025-07-25 08:23:06 - newmusic.sync_service - DEBUG - _find_track_in_plex:251 - Sync cancelled after search for 'Les Mishegas' +2025-07-25 08:24:53 - newmusic.main - INFO - closeEvent:176 - Closing application... +2025-07-25 08:24:53 - newmusic.main - INFO - closeEvent:181 - Cleaning up Downloads page threads... +2025-07-25 08:24:53 - newmusic.main - INFO - closeEvent:186 - Stopping status monitoring thread... +2025-07-25 08:24:55 - newmusic.main - INFO - closeEvent:191 - Closing Soulseek client... +2025-07-25 08:24:55 - newmusic.main - INFO - closeEvent:197 - Application closed successfully +2025-07-25 08:24:57 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-25 08:24:57 - newmusic.main - INFO - main:211 - Starting NewMusic application +2025-07-25 08:24:57 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 08:24:57 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-25 08:24:57 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 08:24:58 - newmusic.main - INFO - change_page:163 - Changed to page: dashboard +2025-07-25 08:24:58 - newmusic.main - INFO - setup_media_player_connections:150 - Media player connections established between sidebar and downloads page +2025-07-25 08:24:58 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-25 08:24:58 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-25 08:25:00 - newmusic.main - INFO - change_page:163 - Changed to page: sync +2025-07-25 08:25:00 - newmusic.spotify_client - INFO - _ensure_user_id:195 - Successfully authenticated with Spotify as broquethomas +2025-07-25 08:25:00 - newmusic.spotify_client - INFO - get_user_playlists_metadata_only:256 - Retrieved 8 playlist metadata (first batch) +2025-07-25 08:28:19 - newmusic.main - INFO - closeEvent:176 - Closing application... +2025-07-25 08:28:19 - newmusic.main - INFO - closeEvent:181 - Cleaning up Downloads page threads... +2025-07-25 08:28:19 - newmusic.main - INFO - closeEvent:186 - Stopping status monitoring thread... +2025-07-25 08:28:20 - newmusic.main - INFO - closeEvent:191 - Closing Soulseek client... +2025-07-25 08:28:20 - newmusic.main - INFO - closeEvent:197 - Application closed successfully +2025-07-25 08:29:54 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-25 08:29:54 - newmusic.main - INFO - main:211 - Starting NewMusic application +2025-07-25 08:29:54 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 08:29:54 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-25 08:29:54 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 08:29:54 - newmusic.main - INFO - change_page:163 - Changed to page: dashboard +2025-07-25 08:29:54 - newmusic.main - INFO - setup_media_player_connections:150 - Media player connections established between sidebar and downloads page +2025-07-25 08:29:55 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-25 08:29:55 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-25 08:29:55 - newmusic.main - INFO - change_page:163 - Changed to page: sync +2025-07-25 08:29:56 - newmusic.spotify_client - INFO - _ensure_user_id:195 - Successfully authenticated with Spotify as broquethomas +2025-07-25 08:29:56 - newmusic.spotify_client - INFO - get_user_playlists_metadata_only:256 - Retrieved 8 playlist metadata (first batch) +2025-07-25 08:35:42 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Virtual Mage' +2025-07-25 08:35:42 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:35:42 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Virtual Mage Signals from Space' +2025-07-25 08:35:42 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'Signals from Space' +2025-07-25 08:35:43 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Signals from Space' +2025-07-25 08:35:44 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'Signals from Space' +2025-07-25 08:35:44 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Virtual Mage' +2025-07-25 08:35:44 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:35:44 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Zztlyk Syrn Qryss' (ratingKey: 539056) +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Virtual Mage' +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:35:45 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Jyxkra' (ratingKey: 539057) +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Virtual Mage' +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:35:45 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Ktal Vysh' (ratingKey: 539058) +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Virtual Mage' +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:35:45 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fluxx' (ratingKey: 539059) +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Virtual Mage' +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 08:35:45 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Vwrn Tlyx' (ratingKey: 539060) +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Kendrick Lamar' +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:35:45 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Kendrick Lamar Super Bowl LIX Halftime Show - Live' +2025-07-25 08:35:46 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'Super Bowl LIX Halftime Show - Live' +2025-07-25 08:35:46 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Kendrick Lamar' +2025-07-25 08:35:47 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:35:47 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Kendrick Lamar Super Bowl LIX Halftime Show' +2025-07-25 08:35:47 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'Super Bowl LIX Halftime Show' +2025-07-25 08:35:48 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'NFL' +2025-07-25 08:35:48 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'NFL Super Bowl LIX Halftime Show - Live' +2025-07-25 08:35:49 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'Super Bowl LIX Halftime Show - Live' +2025-07-25 08:35:49 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'NFL' +2025-07-25 08:35:49 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'NFL Super Bowl LIX Halftime Show' +2025-07-25 08:35:50 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'Super Bowl LIX Halftime Show' +2025-07-25 08:35:51 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Super Bowl LIX Halftime Show - Live' +2025-07-25 08:35:51 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'Super Bowl LIX Halftime Show - Live' +2025-07-25 08:35:52 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Super Bowl LIX Halftime Show' +2025-07-25 08:35:53 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'Super Bowl LIX Halftime Show' +2025-07-25 08:35:53 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'bbno$' +2025-07-25 08:35:54 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:35:54 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'bbno$ 1-800' +2025-07-25 08:35:54 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for '1-800' +2025-07-25 08:35:55 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-DIRTY' (ratingKey: 342942) +2025-07-25 08:35:55 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800MYLOVE' (ratingKey: 446003) +2025-07-25 08:35:55 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-273-8255' (ratingKey: 487383) +2025-07-25 08:35:55 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-273-8255' (ratingKey: 487532) +2025-07-25 08:35:55 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Captain Save a Hoe (feat. 1-800-lost)' (ratingKey: 330364) +2025-07-25 08:35:55 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-SMD' (ratingKey: 330399) +2025-07-25 08:35:55 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800 Nothing' (ratingKey: 327017) +2025-07-25 08:35:55 - newmusic.plex_client - INFO - search_tracks:390 - Found 7 total potential matches for '1-800' by 'bbno$' after all stages. +2025-07-25 08:35:55 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Ironmouse' +2025-07-25 08:35:55 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Ironmouse 1-800' +2025-07-25 08:35:56 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for '1-800' +2025-07-25 08:35:57 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-DIRTY' (ratingKey: 342942) +2025-07-25 08:35:57 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800MYLOVE' (ratingKey: 446003) +2025-07-25 08:35:57 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-273-8255' (ratingKey: 487383) +2025-07-25 08:35:57 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-273-8255' (ratingKey: 487532) +2025-07-25 08:35:57 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Captain Save a Hoe (feat. 1-800-lost)' (ratingKey: 330364) +2025-07-25 08:35:57 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-SMD' (ratingKey: 330399) +2025-07-25 08:35:57 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800 Nothing' (ratingKey: 327017) +2025-07-25 08:35:57 - newmusic.plex_client - INFO - search_tracks:390 - Found 7 total potential matches for '1-800' by 'Ironmouse' after all stages. +2025-07-25 08:35:57 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'bbno$' +2025-07-25 08:35:57 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:35:57 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'bbno$ mary poppins' +2025-07-25 08:35:58 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'mary poppins' +2025-07-25 08:35:59 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Mary Poppins' (ratingKey: 325667) +2025-07-25 08:35:59 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Introducing Mary Poppins' (ratingKey: 143885) +2025-07-25 08:35:59 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'A Cover Is Not the Book' (ratingKey: 143886) +2025-07-25 08:35:59 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Nowhere to Go But Up' (ratingKey: 143892) +2025-07-25 08:35:59 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Theme from Mary Poppins Returns' (ratingKey: 143894) +2025-07-25 08:35:59 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Mary Poppins Arrives' (ratingKey: 143896) +2025-07-25 08:35:59 - newmusic.plex_client - INFO - search_tracks:390 - Found 6 total potential matches for 'mary poppins' by 'bbno$' after all stages. +2025-07-25 08:35:59 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'bbno$' +2025-07-25 08:35:59 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 08:35:59 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'bbno$ boom' +2025-07-25 08:36:00 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'boom' +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'BOOM' (ratingKey: 258903) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'BOOM (Rap remix)' (ratingKey: 258943) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Boom (Ricky Pedretti Remix)' (ratingKey: 285354) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Boom (Original Mix)' (ratingKey: 285339) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Here Comes The Boom (Original Mix)' (ratingKey: 285349) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'pop ur shit' (ratingKey: 291146) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'dangerous' (ratingKey: 291148) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'née-nah' (ratingKey: 291149) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'just like me' (ratingKey: 291153) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'pop ur shit (nightcore version)' (ratingKey: 291130) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'dangerous (nightcore version)' (ratingKey: 291132) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'née-nah (nightcore version)' (ratingKey: 291133) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'just like me (nightcore version)' (ratingKey: 291137) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'pop ur shit (slowed down)' (ratingKey: 291098) +2025-07-25 08:36:01 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'dangerous (slowed down)' (ratingKey: 291100) +2025-07-25 08:36:01 - newmusic.plex_client - INFO - search_tracks:390 - Found 15 total potential matches for 'boom' by 'bbno$' after all stages. +2025-07-25 08:36:01 - newmusic.soulseek_client - INFO - search:551 - Starting search for: 'Virtual Mage Signals from Space' +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - search:561 - Search data: {'searchText': 'Virtual Mage Signals from Space', 'timeout': 30000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - search:562 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:245 - JSON payload: {'searchText': 'Virtual Mage Signals from Space', 'timeout': 30000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-25 08:36:01 - newmusic.soulseek_client - INFO - search:551 - Starting search for: 'Kendrick Lamar Super Bowl LIX Halftime Show - Live' +2025-07-25 08:36:01 - newmusic.soulseek_client - INFO - search:551 - Starting search for: 'bbno$ 1-800' +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - search:561 - Search data: {'searchText': 'Kendrick Lamar Super Bowl LIX Halftime Show - Live', 'timeout': 30000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - search:561 - Search data: {'searchText': 'bbno$ 1-800', 'timeout': 30000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - search:562 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - search:562 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:245 - JSON payload: {'searchText': 'Kendrick Lamar Super Bowl LIX Halftime Show - Live', 'timeout': 30000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:245 - JSON payload: {'searchText': 'bbno$ 1-800', 'timeout': 30000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: {"fileCount":0,"id":"001af632-70fa-49c1-9c2b-911b88550105","isComplete":false,"lockedFileCount":0,"responseCount":0,"responses":[],"searchText":"Kendrick Lamar Super Bowl LIX Halftime Show - Live","startedAt":"2025-07-25T15:36:01.7386842Z","state":"InProgress","token":209}... +2025-07-25 08:36:01 - newmusic.soulseek_client - INFO - search:575 - Search initiated with ID: 001af632-70fa-49c1-9c2b-911b88550105 +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 1/20) - elapsed: 0.0s +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/001af632-70fa-49c1-9c2b-911b88550105/responses +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: {"fileCount":0,"id":"1f53c469-d16f-4d47-987a-0d04ee1ac5b7","isComplete":false,"lockedFileCount":0,"responseCount":0,"responses":[],"searchText":"Virtual Mage Signals from Space","startedAt":"2025-07-25T15:36:01.7384845Z","state":"InProgress","token":208}... +2025-07-25 08:36:01 - newmusic.soulseek_client - INFO - search:575 - Search initiated with ID: 1f53c469-d16f-4d47-987a-0d04ee1ac5b7 +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 1/20) - elapsed: 0.0s +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/1f53c469-d16f-4d47-987a-0d04ee1ac5b7/responses +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: {"fileCount":0,"id":"bf3c3a96-0979-4bcb-b5ad-0776df3493aa","isComplete":false,"lockedFileCount":0,"responseCount":0,"responses":[],"searchText":"bbno$ 1-800","startedAt":"2025-07-25T15:36:01.7379047Z","state":"InProgress","token":207}... +2025-07-25 08:36:01 - newmusic.soulseek_client - INFO - search:575 - Search initiated with ID: bf3c3a96-0979-4bcb-b5ad-0776df3493aa +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 1/20) - elapsed: 0.0s +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/bf3c3a96-0979-4bcb-b5ad-0776df3493aa/responses +2025-07-25 08:36:01 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:02 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:02 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:02 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:02 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:02 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:02 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 2/20) - elapsed: 1.5s +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/001af632-70fa-49c1-9c2b-911b88550105/responses +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 2/20) - elapsed: 1.5s +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/1f53c469-d16f-4d47-987a-0d04ee1ac5b7/responses +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 2/20) - elapsed: 1.5s +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/bf3c3a96-0979-4bcb-b5ad-0776df3493aa/responses +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:03 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 3/20) - elapsed: 3.0s +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/001af632-70fa-49c1-9c2b-911b88550105/responses +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 3/20) - elapsed: 3.0s +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/1f53c469-d16f-4d47-987a-0d04ee1ac5b7/responses +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 3/20) - elapsed: 3.0s +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/bf3c3a96-0979-4bcb-b5ad-0776df3493aa/responses +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:05 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 4/20) - elapsed: 4.5s +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/001af632-70fa-49c1-9c2b-911b88550105/responses +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 4/20) - elapsed: 4.5s +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/1f53c469-d16f-4d47-987a-0d04ee1ac5b7/responses +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 4/20) - elapsed: 4.5s +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/bf3c3a96-0979-4bcb-b5ad-0776df3493aa/responses +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:07 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:07 - newmusic.main - INFO - closeEvent:176 - Closing application... +2025-07-25 08:36:07 - newmusic.main - INFO - closeEvent:181 - Cleaning up Downloads page threads... +2025-07-25 08:36:07 - newmusic.main - INFO - closeEvent:186 - Stopping status monitoring thread... +2025-07-25 08:36:08 - newmusic.main - INFO - closeEvent:191 - Closing Soulseek client... +2025-07-25 08:36:08 - newmusic.main - INFO - closeEvent:197 - Application closed successfully +2025-07-25 08:36:08 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 5/20) - elapsed: 6.0s +2025-07-25 08:36:08 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/001af632-70fa-49c1-9c2b-911b88550105/responses +2025-07-25 08:36:08 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:08 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 5/20) - elapsed: 6.0s +2025-07-25 08:36:08 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/1f53c469-d16f-4d47-987a-0d04ee1ac5b7/responses +2025-07-25 08:36:08 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:09 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 5/20) - elapsed: 6.0s +2025-07-25 08:36:09 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/bf3c3a96-0979-4bcb-b5ad-0776df3493aa/responses +2025-07-25 08:36:09 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:09 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:09 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:09 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:09 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:09 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:09 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:10 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 6/20) - elapsed: 7.5s +2025-07-25 08:36:10 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/001af632-70fa-49c1-9c2b-911b88550105/responses +2025-07-25 08:36:10 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:10 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 6/20) - elapsed: 7.5s +2025-07-25 08:36:10 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/1f53c469-d16f-4d47-987a-0d04ee1ac5b7/responses +2025-07-25 08:36:10 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:10 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 6/20) - elapsed: 7.5s +2025-07-25 08:36:10 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/bf3c3a96-0979-4bcb-b5ad-0776df3493aa/responses +2025-07-25 08:36:10 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:10 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:10 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:10 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:10 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:11 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:11 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 7/20) - elapsed: 9.0s +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/001af632-70fa-49c1-9c2b-911b88550105/responses +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 7/20) - elapsed: 9.0s +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/1f53c469-d16f-4d47-987a-0d04ee1ac5b7/responses +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 7/20) - elapsed: 9.0s +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/bf3c3a96-0979-4bcb-b5ad-0776df3493aa/responses +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:12 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 8/20) - elapsed: 10.5s +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/001af632-70fa-49c1-9c2b-911b88550105/responses +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 8/20) - elapsed: 10.5s +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/1f53c469-d16f-4d47-987a-0d04ee1ac5b7/responses +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 8/20) - elapsed: 10.5s +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/bf3c3a96-0979-4bcb-b5ad-0776df3493aa/responses +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:14 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:15 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 9/20) - elapsed: 12.0s +2025-07-25 08:36:15 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/001af632-70fa-49c1-9c2b-911b88550105/responses +2025-07-25 08:36:15 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:15 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 9/20) - elapsed: 12.0s +2025-07-25 08:36:15 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/1f53c469-d16f-4d47-987a-0d04ee1ac5b7/responses +2025-07-25 08:36:15 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:16 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 9/20) - elapsed: 12.0s +2025-07-25 08:36:16 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/bf3c3a96-0979-4bcb-b5ad-0776df3493aa/responses +2025-07-25 08:36:16 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:16 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:16 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:16 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:16 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:16 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:16 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:17 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 10/20) - elapsed: 13.5s +2025-07-25 08:36:17 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/001af632-70fa-49c1-9c2b-911b88550105/responses +2025-07-25 08:36:17 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:17 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 10/20) - elapsed: 13.5s +2025-07-25 08:36:17 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/1f53c469-d16f-4d47-987a-0d04ee1ac5b7/responses +2025-07-25 08:36:17 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:17 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 10/20) - elapsed: 13.5s +2025-07-25 08:36:17 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/bf3c3a96-0979-4bcb-b5ad-0776df3493aa/responses +2025-07-25 08:36:17 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-25 08:36:18 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:18 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:18 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:18 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-25 08:36:18 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-25 08:36:18 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... diff --git a/ui/pages/__pycache__/sync.cpython-312.pyc b/ui/pages/__pycache__/sync.cpython-312.pyc index 4b266210f04961a6b5bdf92ec3bc477b92be0be9..b5a9e80518fa0c2bcd4d9ee0e16a3dde3cd28b67 100644 GIT binary patch delta 30148 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 |$ji&KO{{a&IV$iWACt{nJgi5f zP>&~iG*Z0WodKeqpsi3{qU*0hy_#Kx9hQSSap$&xFELKzY+>0_x)&6eJ~y8os`{`j zG3dWbWxh}JpE)eEWK5L%`@=FDGd}GIDf$Ao_2;8SHY70&-FP|$z^(07K&c(;%8-ga1SPp*~TcDjDLV22o$Na5BqXu7g6ufpHIzRN6l{oi-I6F=NZ~A_Bg*{019(J*F~6wyw5s{0)ifxR3*==sd#>W1U#7Wv`f*eNzODIY*O2sWX1@;!lacvFeO+@cHq6hROi07>Le5! z+%ff2lS~=K#1(@$R+DJl6ID$PUO*wzb@M*msP&@q>s??vO3iso4j0e6AAC!$B55%` z>*;w$&NMY(@JEzR35>M%GUO7>sEZ(gFJngVna7;CW=gCT*^l9!a{vJYH3oFEp5wsk zT0-VY^B#dRKC__>NHzXlX)V!M39>q5lZ?&ZSbE=Q%rYZ}0wK83%0a&&SZ$p_mJKa= zZPe=5WVm?GefN3V2R80*+U}9NOVFSCaPMIDwT&pH8NmF%0j+qC^q>`-G_X5ss-4ss z%sOLv?*uchH=UG9`a8v4dblV2UEVH6v6M?%lX_8I9BASdiF^BOpv=D$zFZG0+moU%k4^sLnDm3w4ff%dS9za+Cnkt)6jbr=0j3PJIu<8F=#(*;b}RtB*gSOfKeP|5MU`WaFmb(eYsOON2`MOm+UZ z++kjU^tbAjf6Lwt%mZ$Kl_hueD3yC+U?tHV*f>2+rbm&GIoxO`jf{9e92d??-?2EZF?DM&2>V6Qy~yvYTak33Mq2r1&} z-L-X5;Tq-sL1y#Cidr2#laXShn!es5t3_{@QAYhh!(u7BN~bc$|3JrS8q^Ix(j4~& z!q@#Mr^*F9VgcE}=o|grMSV0jKgS_&Hy*k3OfmcREFDZccjY+h?E!1dlpfsO)Ppt8>7KV1;#pD*49Vi>)isOs2bgLe${m4+V~404$#v4U($>4zlQiyr)q-N%zE> zk|t=k5Vrfku`nv5f%r~_M)ok+zZMNalzm#>k4Qt2!MSiJ+(79Vw?p}P!Rg{`R^LAl1ZG%HmWAr4dYAwFo&gF&wV@Oe`N?6rRaaAX{zQH>&x zbO8*A<%l5%3&)^6>UsG=P7&h1nD#*wg2XoWa@= zl@x0F(L5duI;s-GOqmUxk)8@L9iRfB3g8gH(*S=3cmv=UfJhJ&3y=bk4v@!rX!=e7 zK4{CP2$M4(ulcptPhtJ(C~aMpW1zM^n1qC04RV&LBVnd-(chS}MD~^u-vrU0uSN(J c8g4omRTnAx@96bS5dMBstxklSMzdD_f2bPeQvd(} delta 28188 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 diff --git a/ui/pages/sync.py b/ui/pages/sync.py index 6747b3bf..3c1185d8 100644 --- a/ui/pages/sync.py +++ b/ui/pages/sync.py @@ -12,6 +12,42 @@ import re import asyncio from core.matching_engine import MusicMatchingEngine + +class EllipsisLabel(QLabel): + """A label that shows ellipsis for long text and tooltip on hover""" + def __init__(self, text="", parent=None): + super().__init__(text, parent) + self.full_text = text + self.setText(text) + + def setText(self, text): + self.full_text = text + # Set elided text with ellipsis + fm = self.fontMetrics() + elided_text = fm.elidedText(text, Qt.TextElideMode.ElideRight, self.width() - 10) + super().setText(elided_text) + + # Set tooltip to show full text if it's elided + if elided_text != text: + self.setToolTip(text) + else: + self.setToolTip("") # Clear tooltip if text fits + + def resizeEvent(self, event): + """Handle resize events to recalculate ellipsis""" + super().resizeEvent(event) + # Re-elide text with new width + if self.full_text: + fm = self.fontMetrics() + elided_text = fm.elidedText(self.full_text, Qt.TextElideMode.ElideRight, self.width() - 10) + super().setText(elided_text) + + # Update tooltip + if elided_text != self.full_text: + self.setToolTip(self.full_text) + else: + self.setToolTip("") + def clean_track_name_for_search(track_name): """ Cleans a track name for searching by removing text in parentheses and brackets. @@ -883,11 +919,11 @@ class PlaylistDetailsModal(QDialog): border-radius: 16px; gridline-color: transparent; color: #ffffff; - font-size: 13px; + font-size: 11px; selection-background-color: rgba(29, 185, 84, 0.2); } QTableWidget::item { - padding: 16px 24px; + padding: 12px 16px; border-bottom: 1px solid rgba(255, 255, 255, 0.05); background: transparent; } @@ -905,11 +941,11 @@ class PlaylistDetailsModal(QDialog): QHeaderView::section { background: transparent; color: #b3b3b3; - padding: 16px 24px; + padding: 12px 16px; border: none; border-bottom: 2px solid rgba(255, 255, 255, 0.1); font-weight: 600; - font-size: 12px; + font-size: 10px; text-transform: uppercase; letter-spacing: 0.5px; } @@ -921,30 +957,30 @@ class PlaylistDetailsModal(QDialog): # Populate table with proper styling if self.playlist.tracks: for row, track in enumerate(self.playlist.tracks): - # Track name with proper styling - track_item = QTableWidgetItem(track.name) - track_item.setFlags(track_item.flags() & ~Qt.ItemFlag.ItemIsEditable) - track_item.setFont(QFont("SF Pro Text", 13, QFont.Weight.Medium)) - self.track_table.setItem(row, 0, track_item) + # Track name with ellipsis label + track_label = EllipsisLabel(track.name) + track_label.setFont(QFont("SF Pro Text", 11, QFont.Weight.Medium)) + track_label.setStyleSheet("color: #ffffff; background: transparent; border: none;") + self.track_table.setCellWidget(row, 0, track_label) - # Artist(s) with subtle styling + # Artist(s) with ellipsis label artists = ", ".join(track.artists) - artist_item = QTableWidgetItem(artists) - artist_item.setFlags(artist_item.flags() & ~Qt.ItemFlag.ItemIsEditable) - artist_item.setFont(QFont("SF Pro Text", 13)) - self.track_table.setItem(row, 1, artist_item) + artist_label = EllipsisLabel(artists) + artist_label.setFont(QFont("SF Pro Text", 11)) + artist_label.setStyleSheet("color: #ffffff; background: transparent; border: none;") + self.track_table.setCellWidget(row, 1, artist_label) - # Album with subtle styling - album_item = QTableWidgetItem(track.album) - album_item.setFlags(album_item.flags() & ~Qt.ItemFlag.ItemIsEditable) - album_item.setFont(QFont("SF Pro Text", 13)) - self.track_table.setItem(row, 2, album_item) + # Album with ellipsis label + album_label = EllipsisLabel(track.album) + album_label.setFont(QFont("SF Pro Text", 11)) + album_label.setStyleSheet("color: #ffffff; background: transparent; border: none;") + self.track_table.setCellWidget(row, 2, album_label) - # Duration with monospace font + # Duration with standard item (doesn't need scrolling) duration = self.format_duration(track.duration_ms) duration_item = QTableWidgetItem(duration) duration_item.setFlags(duration_item.flags() & ~Qt.ItemFlag.ItemIsEditable) - duration_item.setFont(QFont("SF Mono", 12)) + duration_item.setFont(QFont("SF Mono", 10)) self.track_table.setItem(row, 3, duration_item) else: # Show placeholder while tracks are being loaded @@ -989,6 +1025,9 @@ class PlaylistDetailsModal(QDialog): self.track_table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows) self.track_table.setAlternatingRowColors(False) + # Set uniform row height to accommodate the labels properly + self.track_table.verticalHeader().setDefaultSectionSize(40) # Height for each row + layout.addWidget(self.track_table) return container @@ -1380,26 +1419,30 @@ class PlaylistDetailsModal(QDialog): # Populate table for row, track in enumerate(self.playlist.tracks): - # Track name - track_item = QTableWidgetItem(track.name) - track_item.setFlags(track_item.flags() & ~Qt.ItemFlag.ItemIsEditable) - self.track_table.setItem(row, 0, track_item) + # Track name with ellipsis label + track_label = EllipsisLabel(track.name) + track_label.setFont(QFont("SF Pro Text", 11, QFont.Weight.Medium)) + track_label.setStyleSheet("color: #ffffff; background: transparent; border: none;") + self.track_table.setCellWidget(row, 0, track_label) - # Artist(s) + # Artist(s) with ellipsis label artists = ", ".join(track.artists) - artist_item = QTableWidgetItem(artists) - artist_item.setFlags(artist_item.flags() & ~Qt.ItemFlag.ItemIsEditable) - self.track_table.setItem(row, 1, artist_item) + artist_label = EllipsisLabel(artists) + artist_label.setFont(QFont("SF Pro Text", 11)) + artist_label.setStyleSheet("color: #ffffff; background: transparent; border: none;") + self.track_table.setCellWidget(row, 1, artist_label) - # Album - album_item = QTableWidgetItem(track.album) - album_item.setFlags(album_item.flags() & ~Qt.ItemFlag.ItemIsEditable) - self.track_table.setItem(row, 2, album_item) + # Album with ellipsis label + album_label = EllipsisLabel(track.album) + album_label.setFont(QFont("SF Pro Text", 11)) + album_label.setStyleSheet("color: #ffffff; background: transparent; border: none;") + self.track_table.setCellWidget(row, 2, album_label) - # Duration + # Duration with standard item (doesn't need scrolling) duration = self.format_duration(track.duration_ms) duration_item = QTableWidgetItem(duration) duration_item.setFlags(duration_item.flags() & ~Qt.ItemFlag.ItemIsEditable) + duration_item.setFont(QFont("SF Mono", 10)) self.track_table.setItem(row, 3, duration_item) class PlaylistItem(QFrame):