diff --git a/logs/app.log b/logs/app.log index 00c6e631..e7ff6c13 100644 --- a/logs/app.log +++ b/logs/app.log @@ -19415,3 +19415,179 @@ 2025-07-25 09:31:36 - newmusic.main - INFO - change_page:163 - Changed to page: sync 2025-07-25 09:31:36 - newmusic.spotify_client - INFO - _ensure_user_id:195 - Successfully authenticated with Spotify as broquethomas 2025-07-25 09:31:36 - newmusic.spotify_client - INFO - get_user_playlists_metadata_only:256 - Retrieved 8 playlist metadata (first batch) +2025-07-25 09:36:37 - newmusic.main - INFO - closeEvent:176 - Closing application... +2025-07-25 09:36:37 - newmusic.main - INFO - closeEvent:181 - Cleaning up Downloads page threads... +2025-07-25 09:36:37 - newmusic.main - INFO - closeEvent:186 - Stopping status monitoring thread... +2025-07-25 09:36:37 - newmusic.main - INFO - closeEvent:191 - Closing Soulseek client... +2025-07-25 09:36:37 - newmusic.main - INFO - closeEvent:197 - Application closed successfully +2025-07-25 09:36:43 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-25 09:36:43 - newmusic.main - INFO - main:211 - Starting NewMusic application +2025-07-25 09:36:43 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 09:36:43 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-25 09:36:43 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 09:36:43 - newmusic.main - INFO - change_page:163 - Changed to page: dashboard +2025-07-25 09:36:43 - newmusic.main - INFO - setup_media_player_connections:150 - Media player connections established between sidebar and downloads page +2025-07-25 09:36:44 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-25 09:36:44 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-25 09:37:00 - newmusic.main - INFO - change_page:163 - Changed to page: sync +2025-07-25 09:37:00 - newmusic.spotify_client - INFO - _ensure_user_id:195 - Successfully authenticated with Spotify as broquethomas +2025-07-25 09:37:00 - newmusic.spotify_client - INFO - get_user_playlists_metadata_only:256 - Retrieved 8 playlist metadata (first batch) +2025-07-25 09:37:08 - newmusic.sync_service - INFO - sync_playlist:94 - Starting sync for playlist: Failed test +2025-07-25 09:37:08 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:37:08 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:37:08 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'virtual mage signalsfromspace' +2025-07-25 09:37:08 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'signalsfromspace' +2025-07-25 09:37:09 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:37:09 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:37:09 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'virtual mage signals from space' +2025-07-25 09:37:10 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'signals from space' +2025-07-25 09:37:11 - newmusic.sync_service - DEBUG - _find_track_in_plex:272 - No artist-based matches found. Using title-only fallback for 'Signals from Space' +2025-07-25 09:37:11 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'signalsfromspace' +2025-07-25 09:37:11 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'signalsfromspace' +2025-07-25 09:37:12 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'signals from space' +2025-07-25 09:37:13 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'signals from space' +2025-07-25 09:37:13 - newmusic.sync_service - DEBUG - _find_track_in_plex:290 - No Plex candidates found for 'Signals from Space' +2025-07-25 09:37:13 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:37:13 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:37:13 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'virtual mage zztlyksyrnqryss' +2025-07-25 09:37:14 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'zztlyksyrnqryss' +2025-07-25 09:37:15 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:37:15 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 09:37:15 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 09:37:15 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Zztlyk Syrn Qryss' (ratingKey: 539056) +2025-07-25 09:37:15 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Zztlyk Syrn Qryss' +2025-07-25 09:37:15 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:37:15 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 09:37:15 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 09:37:15 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Jyxkra' (ratingKey: 539057) +2025-07-25 09:37:15 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Jyxkra' +2025-07-25 09:37:15 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:37:15 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:37:15 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'virtual mage ktalvysh' +2025-07-25 09:37:15 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'ktalvysh' +2025-07-25 09:37:16 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:37:16 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 09:37:16 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 09:37:16 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Ktal Vysh' (ratingKey: 539058) +2025-07-25 09:37:16 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Ktal Vysh' +2025-07-25 09:37:16 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:37:16 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 09:37:16 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 09:37:16 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fluxx' (ratingKey: 539059) +2025-07-25 09:37:16 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Fluxx' +2025-07-25 09:37:16 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:37:16 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:37:16 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'virtual mage vwrntlyx' +2025-07-25 09:37:17 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'vwrntlyx' +2025-07-25 09:37:18 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:37:18 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 09:37:18 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 09:37:18 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Vwrn Tlyx' (ratingKey: 539060) +2025-07-25 09:37:18 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Vwrn Tlyx' +2025-07-25 09:37:18 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'kendrick lamar' +2025-07-25 09:37:18 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:37:18 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'kendrick lamar superbowllixhalftimeshowlive' +2025-07-25 09:37:18 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'superbowllixhalftimeshowlive' +2025-07-25 09:37:19 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'kendrick lamar' +2025-07-25 09:37:19 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:37:19 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'kendrick lamar super bowl lix halftime show' +2025-07-25 09:37:20 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'super bowl lix halftime show' +2025-07-25 09:37:21 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'nfl' +2025-07-25 09:37:21 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'nfl superbowllixhalftimeshowlive' +2025-07-25 09:37:21 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'superbowllixhalftimeshowlive' +2025-07-25 09:37:22 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'nfl' +2025-07-25 09:37:22 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'nfl super bowl lix halftime show' +2025-07-25 09:37:23 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'super bowl lix halftime show' +2025-07-25 09:37:23 - newmusic.sync_service - DEBUG - _find_track_in_plex:272 - No artist-based matches found. Using title-only fallback for 'Super Bowl LIX Halftime Show - Live' +2025-07-25 09:37:23 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'superbowllixhalftimeshowlive' +2025-07-25 09:37:24 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'superbowllixhalftimeshowlive' +2025-07-25 09:37:25 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'super bowl lix halftime show' +2025-07-25 09:37:25 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'super bowl lix halftime show' +2025-07-25 09:37:26 - newmusic.sync_service - DEBUG - _find_track_in_plex:290 - No Plex candidates found for 'Super Bowl LIX Halftime Show - Live' +2025-07-25 09:37:26 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'bbno' +2025-07-25 09:37:26 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:37:26 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'bbno 1800' +2025-07-25 09:37:27 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for '1800' +2025-07-25 09:37:28 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1800 Satan' (ratingKey: 488568) +2025-07-25 09:37:28 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1800' (ratingKey: 195875) +2025-07-25 09:37:28 - newmusic.plex_client - INFO - search_tracks:390 - Found 2 total potential matches for '1800' by 'bbno' after all stages. +2025-07-25 09:37:28 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'bbno' +2025-07-25 09:37:28 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:37:28 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'bbno 1-800' +2025-07-25 09:37:28 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for '1-800' +2025-07-25 09:37:29 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-DIRTY' (ratingKey: 342942) +2025-07-25 09:37:29 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800MYLOVE' (ratingKey: 446003) +2025-07-25 09:37:29 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-273-8255' (ratingKey: 487383) +2025-07-25 09:37:29 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-273-8255' (ratingKey: 487532) +2025-07-25 09:37:29 - 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 09:37:29 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-SMD' (ratingKey: 330399) +2025-07-25 09:37:29 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800 Nothing' (ratingKey: 327017) +2025-07-25 09:37:29 - newmusic.plex_client - INFO - search_tracks:390 - Found 7 total potential matches for '1-800' by 'bbno' after all stages. +2025-07-25 09:37:29 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for '1-800' +2025-07-25 09:37:29 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'bbno' +2025-07-25 09:37:29 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:37:29 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'bbno marypoppins' +2025-07-25 09:37:30 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'marypoppins' +2025-07-25 09:37:31 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'bbno' +2025-07-25 09:37:31 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:37:31 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'bbno mary poppins' +2025-07-25 09:37:31 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'mary poppins' +2025-07-25 09:37:32 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Mary Poppins' (ratingKey: 325667) +2025-07-25 09:37:32 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Introducing Mary Poppins' (ratingKey: 143885) +2025-07-25 09:37:32 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'A Cover Is Not the Book' (ratingKey: 143886) +2025-07-25 09:37:32 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Nowhere to Go But Up' (ratingKey: 143892) +2025-07-25 09:37:32 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Theme from Mary Poppins Returns' (ratingKey: 143894) +2025-07-25 09:37:32 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Mary Poppins Arrives' (ratingKey: 143896) +2025-07-25 09:37:32 - newmusic.plex_client - INFO - search_tracks:390 - Found 6 total potential matches for 'mary poppins' by 'bbno' after all stages. +2025-07-25 09:37:32 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'mary poppins' +2025-07-25 09:37:32 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'bbno' +2025-07-25 09:37:32 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:37:32 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'bbno boom' +2025-07-25 09:37:33 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'boom' +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'BOOM' (ratingKey: 258903) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'BOOM (Rap remix)' (ratingKey: 258943) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Boom (Ricky Pedretti Remix)' (ratingKey: 285354) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Boom (Original Mix)' (ratingKey: 285339) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Here Comes The Boom (Original Mix)' (ratingKey: 285349) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'pop ur shit' (ratingKey: 291146) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'dangerous' (ratingKey: 291148) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'née-nah' (ratingKey: 291149) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'just like me' (ratingKey: 291153) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'pop ur shit (nightcore version)' (ratingKey: 291130) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'dangerous (nightcore version)' (ratingKey: 291132) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'née-nah (nightcore version)' (ratingKey: 291133) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'just like me (nightcore version)' (ratingKey: 291137) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'pop ur shit (slowed down)' (ratingKey: 291098) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'dangerous (slowed down)' (ratingKey: 291100) +2025-07-25 09:37:34 - newmusic.plex_client - INFO - search_tracks:390 - Found 15 total potential matches for 'boom' by 'bbno' after all stages. +2025-07-25 09:37:34 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'boom' +2025-07-25 09:37:34 - newmusic.sync_service - INFO - sync_playlist:141 - Found 8 matches out of 10 tracks +2025-07-25 09:37:34 - newmusic.sync_service - INFO - sync_playlist:173 - Creating playlist with 8 matched tracks +2025-07-25 09:37:34 - newmusic.plex_client - INFO - update_playlist:277 - Playlist 'Failed test' not found, creating new one +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: Zztlyk Syrn Qryss by Virtual Mage (ratingKey: 539056) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: Jyxkra by Virtual Mage (ratingKey: 539057) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: Ktal Vysh by Virtual Mage (ratingKey: 539058) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: Fluxx by Virtual Mage (ratingKey: 539059) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: Vwrn Tlyx by Virtual Mage (ratingKey: 539060) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: 1800 by Snoop Dogg (ratingKey: 195875) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: Mary Poppins by Elènne (ratingKey: 325667) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: BOOM by $ebu (ratingKey: 258903) +2025-07-25 09:37:34 - newmusic.plex_client - INFO - create_playlist:209 - Processed 8 input tracks, resulting in 8 valid Plex tracks for playlist 'Failed test' +2025-07-25 09:37:34 - newmusic.plex_client - INFO - create_playlist:214 - Final validation: 8 valid tracks with ratingKeys +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:218 - About to create playlist with tracks: +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 1: Zztlyk Syrn Qryss (type: , ratingKey: 539056) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 2: Jyxkra (type: , ratingKey: 539057) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 3: Ktal Vysh (type: , ratingKey: 539058) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 4: Fluxx (type: , ratingKey: 539059) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 5: Vwrn Tlyx (type: , ratingKey: 539060) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 6: 1800 (type: , ratingKey: 195875) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 7: Mary Poppins (type: , ratingKey: 325667) +2025-07-25 09:37:34 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 8: BOOM (type: , ratingKey: 258903) +2025-07-25 09:37:34 - newmusic.plex_client - ERROR - create_playlist:227 - CreatePlaylist failed: Must include items to add when creating new playlist. +2025-07-25 09:37:34 - newmusic.plex_client - INFO - create_playlist:231 - Created playlist 'Failed test' with 8 tracks (using items parameter) +2025-07-25 09:37:34 - newmusic.sync_service - INFO - sync_playlist:196 - Sync completed: 80.0% success rate +2025-07-25 09:37:48 - newmusic.main - INFO - closeEvent:176 - Closing application... +2025-07-25 09:37:48 - newmusic.main - INFO - closeEvent:181 - Cleaning up Downloads page threads... +2025-07-25 09:37:48 - newmusic.main - INFO - closeEvent:186 - Stopping status monitoring thread... +2025-07-25 09:37:50 - newmusic.main - INFO - closeEvent:191 - Closing Soulseek client... +2025-07-25 09:37:50 - newmusic.main - INFO - closeEvent:197 - Application closed successfully diff --git a/ui/pages/__pycache__/sync.cpython-312.pyc b/ui/pages/__pycache__/sync.cpython-312.pyc index 5f2486c4..91c4b8f6 100644 Binary files a/ui/pages/__pycache__/sync.cpython-312.pyc and b/ui/pages/__pycache__/sync.cpython-312.pyc differ diff --git a/ui/pages/sync.py b/ui/pages/sync.py index 710d1be5..d1ecc0d8 100644 --- a/ui/pages/sync.py +++ b/ui/pages/sync.py @@ -1952,7 +1952,8 @@ class SyncPage(QWidget): self.track_cache = {} # playlist_id -> tracks # Sync worker management - self.active_sync_workers = {} # playlist_id -> SyncWorker + self.active_sync_workers = {} # playlist_id -> SyncWorker (for individual modal syncs) + self.sequential_sync_worker = None # Current sequential sync worker # Selection tracking self.selected_playlists = set() # Set of selected playlist IDs @@ -2024,6 +2025,46 @@ class SyncPage(QWidget): return True + def start_sequential_playlist_sync(self, playlist): + """Start sync for a playlist as part of sequential sync (separate from individual syncs)""" + # Create sync service if not available + if not hasattr(self, 'sync_service'): + from services.sync_service import PlaylistSyncService + self.sync_service = PlaylistSyncService( + self.spotify_client, + self.plex_client, + self.soulseek_client + ) + + # Create sync worker for sequential sync + sync_worker = SyncWorker( + playlist=playlist, + sync_service=self.sync_service + ) + + # Connect worker signals for sequential sync + sync_worker.signals.finished.connect(lambda result: self.on_sequential_sync_finished(playlist.id, result)) + sync_worker.signals.error.connect(lambda error: self.on_sequential_sync_error(playlist.id, error)) + sync_worker.signals.progress.connect(lambda progress: self.on_sync_progress(playlist.id, progress)) + + # Store the sequential sync worker + self.sequential_sync_worker = sync_worker + + # Start the worker + self.thread_pool.start(sync_worker) + + # Update playlist item status + playlist_item = self.find_playlist_item_widget(playlist.id) + if playlist_item: + playlist_item.is_syncing = True + playlist_item.update_sync_status(len(playlist.tracks), 0, 0) + + # Log start + if hasattr(self, 'log_area'): + self.log_area.append(f"🔄 Starting sequential sync for playlist: {playlist.name}") + + return True + def toggle_playlist_selection(self, playlist_id): """Toggle selection state of a playlist""" if playlist_id in self.selected_playlists: @@ -2040,15 +2081,15 @@ class SyncPage(QWidget): """Update the selection info label and button state""" selected_count = len(self.selected_playlists) - print(f"Updating UI with {selected_count} selected playlists, sequential syncing: {self.is_sequential_syncing}") + print(f"Updating UI with {selected_count} selected playlists, sequential syncing: {self.is_sequential_syncing}, individual syncs: {len(self.active_sync_workers)}") if selected_count == 0: self.selection_info.setText("Select playlists to sync") self.start_sync_btn.setEnabled(False) print("Button disabled - no selection") - elif self.is_sequential_syncing: - # Don't change button state during sequential sync - print(f"Sequential sync in progress - keeping button as is") + elif self.has_active_operations(): + # Don't change button state during any active operations + print(f"Active operations in progress - keeping button as is") elif selected_count == 1: self.selection_info.setText("1 playlist selected") self.start_sync_btn.setEnabled(True) @@ -2063,6 +2104,11 @@ class SyncPage(QWidget): if not self.selected_playlists or self.is_sequential_syncing: return + # Don't allow sequential sync if individual syncs are already running + if self.active_sync_workers: + print(f"DEBUG: Cannot start sequential sync - {len(self.active_sync_workers)} individual syncs are running") + return + # Get selected playlist objects selected_playlist_objects = [] for playlist_item in self.get_all_playlist_items(): @@ -2098,9 +2144,9 @@ class SyncPage(QWidget): next_playlist = self.sequential_sync_queue.pop(0) print(f"DEBUG: Starting sync for next playlist: {next_playlist.name}") - # Start sync for this playlist - success = self.start_playlist_sync(next_playlist) - print(f"DEBUG: start_playlist_sync returned: {success}") + # Start sync for this playlist using dedicated sequential sync method + success = self.start_sequential_playlist_sync(next_playlist) + print(f"DEBUG: start_sequential_playlist_sync returned: {success}") if not success: # If sync failed to start, move to next print("DEBUG: Sync failed to start, moving to next playlist") @@ -2117,6 +2163,68 @@ class SyncPage(QWidget): # Update refresh button state since sequential sync is complete self.update_refresh_button_state() + def on_sequential_sync_finished(self, playlist_id, result): + """Handle completion of individual playlist in sequential sync""" + print(f"DEBUG: Sequential sync finished for playlist {playlist_id}") + + # Clear sequential sync worker + self.sequential_sync_worker = None + + # Update playlist item status + playlist_item = self.find_playlist_item_widget(playlist_id) + if playlist_item: + playlist_item.is_syncing = False + playlist_item.update_sync_status( + result.total_tracks, + result.matched_tracks, + result.failed_tracks + ) + + # Hide status widget after completion with delay + QTimer.singleShot(3000, lambda: playlist_item.sync_status_widget.hide() if playlist_item.sync_status_widget else None) + + # Update any open modals + self.update_open_modals_completion(playlist_id, result) + + # Continue sequential sync to next playlist + if self.is_sequential_syncing: + print(f"DEBUG: Sequential sync continuing to next playlist") + self.process_next_in_sync_queue() + + # Log completion + if hasattr(self, 'log_area'): + success_rate = result.success_rate + msg = f"✅ Sequential sync complete: {result.synced_tracks}/{result.total_tracks} tracks synced ({success_rate:.1f}%)" + if result.failed_tracks > 0: + msg += f", {result.failed_tracks} failed" + self.log_area.append(msg) + + def on_sequential_sync_error(self, playlist_id, error_msg): + """Handle error in individual playlist during sequential sync""" + print(f"DEBUG: Sequential sync error for playlist {playlist_id}: {error_msg}") + + # Clear sequential sync worker + self.sequential_sync_worker = None + + # Update playlist item status + playlist_item = self.find_playlist_item_widget(playlist_id) + if playlist_item: + playlist_item.is_syncing = False + if playlist_item.sync_status_widget: + playlist_item.sync_status_widget.hide() + + # Update any open modals + self.update_open_modals_error(playlist_id, error_msg) + + # Continue sequential sync even on error + if self.is_sequential_syncing: + print(f"DEBUG: Sequential sync continuing to next playlist despite error") + self.process_next_in_sync_queue() + + # Log error + if hasattr(self, 'log_area'): + self.log_area.append(f"⌠Sequential sync failed: {error_msg}") + def get_all_playlist_items(self): """Get all PlaylistItem widgets from the playlist layout""" playlist_items = [] @@ -2815,7 +2923,7 @@ class SyncPage(QWidget): """Check if any sync or download operations are currently active""" has_downloads = bool(self.active_download_processes) has_individual_syncs = bool(self.active_sync_workers) - has_sequential_sync = self.is_sequential_syncing + has_sequential_sync = self.is_sequential_syncing or self.sequential_sync_worker is not None print(f"DEBUG: Active operations check - downloads: {has_downloads}, individual syncs: {has_individual_syncs}, sequential: {has_sequential_sync}") return has_downloads or has_individual_syncs or has_sequential_sync