From 59fc1a9d00389079cd4c5d653503a3a7eac0469c Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Fri, 25 Jul 2025 09:32:38 -0700 Subject: [PATCH] good --- logs/app.log | 189 ++++++++++++++++++++++ ui/pages/__pycache__/sync.cpython-312.pyc | Bin 214059 -> 215330 bytes ui/pages/sync.py | 45 +++++- 3 files changed, 230 insertions(+), 4 deletions(-) diff --git a/logs/app.log b/logs/app.log index 584ab92d..00c6e631 100644 --- a/logs/app.log +++ b/logs/app.log @@ -19226,3 +19226,192 @@ 2025-07-25 09:27:27 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} 2025-07-25 09:27:27 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 2025-07-25 09:27:27 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: [{"username":"borisk","directories":[{"directory":"@@tdzlm\\myzik_volume_III\\1 - zapad_modern\\03 Brit - Rock\\Bill Nelson\\2011 - Signals from Realms of Light","fileCount":1,"files":[{"id":"3cace47a-3a6b-4bf4-affe-7e0f811afe75","username":"borisk","direction":"Download","filename":"@@tdzlm\\myzik_volume_III\\1 - zapad_modern\\03 Brit - Rock\\Bill Nelson\\2011 - Signals from Realms of Light\\02 - Past And Present, (And The Space Between).flac","size":138819202,"startOffset":0,"state":"Complet... +2025-07-25 09:30:06 - newmusic.main - INFO - closeEvent:176 - Closing application... +2025-07-25 09:30:06 - newmusic.main - INFO - closeEvent:181 - Cleaning up Downloads page threads... +2025-07-25 09:30:06 - newmusic.main - INFO - closeEvent:186 - Stopping status monitoring thread... +2025-07-25 09:30:07 - newmusic.main - INFO - closeEvent:191 - Closing Soulseek client... +2025-07-25 09:30:07 - newmusic.main - INFO - closeEvent:197 - Application closed successfully +2025-07-25 09:30:20 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-25 09:30:20 - newmusic.main - INFO - main:211 - Starting NewMusic application +2025-07-25 09:30:20 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 09:30:20 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-25 09:30:20 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 09:30:20 - newmusic.main - INFO - change_page:163 - Changed to page: dashboard +2025-07-25 09:30:20 - newmusic.main - INFO - setup_media_player_connections:150 - Media player connections established between sidebar and downloads page +2025-07-25 09:30:21 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-25 09:30:21 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-25 09:30:21 - newmusic.main - INFO - change_page:163 - Changed to page: sync +2025-07-25 09:30:21 - newmusic.spotify_client - INFO - _ensure_user_id:195 - Successfully authenticated with Spotify as broquethomas +2025-07-25 09:30:22 - newmusic.spotify_client - INFO - get_user_playlists_metadata_only:256 - Retrieved 8 playlist metadata (first batch) +2025-07-25 09:30:24 - newmusic.sync_service - INFO - sync_playlist:94 - Starting sync for playlist: Failed test +2025-07-25 09:30:24 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:30:25 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:30:25 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'virtual mage signalsfromspace' +2025-07-25 09:30:25 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'signalsfromspace' +2025-07-25 09:30:26 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:30:26 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:30:26 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'virtual mage signals from space' +2025-07-25 09:30:27 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'signals from space' +2025-07-25 09:30:27 - 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:30:27 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'signalsfromspace' +2025-07-25 09:30:28 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'signalsfromspace' +2025-07-25 09:30:29 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'signals from space' +2025-07-25 09:30:29 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'signals from space' +2025-07-25 09:30:30 - newmusic.sync_service - DEBUG - _find_track_in_plex:290 - No Plex candidates found for 'Signals from Space' +2025-07-25 09:30:30 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:30:30 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:30:30 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'virtual mage zztlyksyrnqryss' +2025-07-25 09:30:31 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'zztlyksyrnqryss' +2025-07-25 09:30:31 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:30:31 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 09:30:31 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 09:30:31 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Zztlyk Syrn Qryss' (ratingKey: 539056) +2025-07-25 09:30:31 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Zztlyk Syrn Qryss' +2025-07-25 09:30:31 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:30:31 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 09:30:31 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 09:30:31 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Jyxkra' (ratingKey: 539057) +2025-07-25 09:30:31 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Jyxkra' +2025-07-25 09:30:31 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:30:31 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:30:31 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'virtual mage ktalvysh' +2025-07-25 09:30:32 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'ktalvysh' +2025-07-25 09:30:33 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:30:33 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 09:30:33 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 09:30:33 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Ktal Vysh' (ratingKey: 539058) +2025-07-25 09:30:33 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Ktal Vysh' +2025-07-25 09:30:33 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:30:33 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 09:30:33 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 09:30:33 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fluxx' (ratingKey: 539059) +2025-07-25 09:30:33 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Fluxx' +2025-07-25 09:30:33 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:30:33 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:30:33 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'virtual mage vwrntlyx' +2025-07-25 09:30:33 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'vwrntlyx' +2025-07-25 09:30:34 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'virtual mage' +2025-07-25 09:30:34 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 1 candidates. +2025-07-25 09:30:34 - newmusic.plex_client - INFO - search_tracks:344 - Found 1 candidates in Stage 1. Exiting early. +2025-07-25 09:30:34 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Vwrn Tlyx' (ratingKey: 539060) +2025-07-25 09:30:34 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'Vwrn Tlyx' +2025-07-25 09:30:34 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'kendrick lamar' +2025-07-25 09:30:34 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:30:34 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'kendrick lamar superbowllixhalftimeshowlive' +2025-07-25 09:30:35 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'superbowllixhalftimeshowlive' +2025-07-25 09:30:36 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'kendrick lamar' +2025-07-25 09:30:36 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:30:36 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'kendrick lamar super bowl lix halftime show' +2025-07-25 09:30:36 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'super bowl lix halftime show' +2025-07-25 09:30:37 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'nfl' +2025-07-25 09:30:37 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'nfl superbowllixhalftimeshowlive' +2025-07-25 09:30:38 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'superbowllixhalftimeshowlive' +2025-07-25 09:30:38 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'nfl' +2025-07-25 09:30:38 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'nfl super bowl lix halftime show' +2025-07-25 09:30:39 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'super bowl lix halftime show' +2025-07-25 09:30:40 - 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:30:40 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'superbowllixhalftimeshowlive' +2025-07-25 09:30:40 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'superbowllixhalftimeshowlive' +2025-07-25 09:30:41 - newmusic.sync_service - WARNING - sync_playlist:77 - Sync already in progress +2025-07-25 09:30:41 - newmusic.sync_service - WARNING - sync_playlist:77 - Sync already in progress +2025-07-25 09:30:41 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'super bowl lix halftime show' +2025-07-25 09:30:42 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'super bowl lix halftime show' +2025-07-25 09:30:42 - newmusic.sync_service - DEBUG - _find_track_in_plex:290 - No Plex candidates found for 'Super Bowl LIX Halftime Show - Live' +2025-07-25 09:30:42 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'bbno' +2025-07-25 09:30:42 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:30:42 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'bbno 1800' +2025-07-25 09:30:43 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for '1800' +2025-07-25 09:30:44 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1800 Satan' (ratingKey: 488568) +2025-07-25 09:30:44 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1800' (ratingKey: 195875) +2025-07-25 09:30:44 - newmusic.plex_client - INFO - search_tracks:390 - Found 2 total potential matches for '1800' by 'bbno' after all stages. +2025-07-25 09:30:44 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'bbno' +2025-07-25 09:30:44 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:30:44 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'bbno 1-800' +2025-07-25 09:30:45 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for '1-800' +2025-07-25 09:30:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-DIRTY' (ratingKey: 342942) +2025-07-25 09:30:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800MYLOVE' (ratingKey: 446003) +2025-07-25 09:30:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-273-8255' (ratingKey: 487383) +2025-07-25 09:30:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-273-8255' (ratingKey: 487532) +2025-07-25 09:30:45 - 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:30:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800-SMD' (ratingKey: 330399) +2025-07-25 09:30:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for '1-800 Nothing' (ratingKey: 327017) +2025-07-25 09:30:45 - newmusic.plex_client - INFO - search_tracks:390 - Found 7 total potential matches for '1-800' by 'bbno' after all stages. +2025-07-25 09:30:45 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for '1-800' +2025-07-25 09:30:45 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'bbno' +2025-07-25 09:30:46 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:30:46 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'bbno marypoppins' +2025-07-25 09:30:46 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'marypoppins' +2025-07-25 09:30:47 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'bbno' +2025-07-25 09:30:47 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:30:47 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'bbno mary poppins' +2025-07-25 09:30:48 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'mary poppins' +2025-07-25 09:30:49 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Mary Poppins' (ratingKey: 325667) +2025-07-25 09:30:49 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Introducing Mary Poppins' (ratingKey: 143885) +2025-07-25 09:30:49 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'A Cover Is Not the Book' (ratingKey: 143886) +2025-07-25 09:30:49 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Nowhere to Go But Up' (ratingKey: 143892) +2025-07-25 09:30:49 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Theme from Mary Poppins Returns' (ratingKey: 143894) +2025-07-25 09:30:49 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Mary Poppins Arrives' (ratingKey: 143896) +2025-07-25 09:30:49 - newmusic.plex_client - INFO - search_tracks:390 - Found 6 total potential matches for 'mary poppins' by 'bbno' after all stages. +2025-07-25 09:30:49 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'mary poppins' +2025-07-25 09:30:49 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'bbno' +2025-07-25 09:30:49 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-25 09:30:49 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'bbno boom' +2025-07-25 09:30:49 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'boom' +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'BOOM' (ratingKey: 258903) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'BOOM (Rap remix)' (ratingKey: 258943) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Boom (Ricky Pedretti Remix)' (ratingKey: 285354) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Boom (Original Mix)' (ratingKey: 285339) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Here Comes The Boom (Original Mix)' (ratingKey: 285349) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'pop ur shit' (ratingKey: 291146) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'dangerous' (ratingKey: 291148) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'n้e-nah' (ratingKey: 291149) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'just like me' (ratingKey: 291153) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'pop ur shit (nightcore version)' (ratingKey: 291130) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'dangerous (nightcore version)' (ratingKey: 291132) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'n้e-nah (nightcore version)' (ratingKey: 291133) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'just like me (nightcore version)' (ratingKey: 291137) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'pop ur shit (slowed down)' (ratingKey: 291098) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'dangerous (slowed down)' (ratingKey: 291100) +2025-07-25 09:30:50 - newmusic.plex_client - INFO - search_tracks:390 - Found 15 total potential matches for 'boom' by 'bbno' after all stages. +2025-07-25 09:30:50 - newmusic.sync_service - DEBUG - _find_track_in_plex:263 - Early confident match found for 'boom' +2025-07-25 09:30:50 - newmusic.sync_service - INFO - sync_playlist:141 - Found 8 matches out of 10 tracks +2025-07-25 09:30:50 - newmusic.sync_service - INFO - sync_playlist:173 - Creating playlist with 8 matched tracks +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: Zztlyk Syrn Qryss by Virtual Mage (ratingKey: 539056) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: Jyxkra by Virtual Mage (ratingKey: 539057) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: Ktal Vysh by Virtual Mage (ratingKey: 539058) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: Fluxx by Virtual Mage (ratingKey: 539059) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: Vwrn Tlyx by Virtual Mage (ratingKey: 539060) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: 1800 by Snoop Dogg (ratingKey: 195875) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: Mary Poppins by El่nne (ratingKey: 325667) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:198 - Using stored track reference for: BOOM by $ebu (ratingKey: 258903) +2025-07-25 09:30:50 - 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:30:50 - newmusic.plex_client - INFO - create_playlist:214 - Final validation: 8 valid tracks with ratingKeys +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:218 - About to create playlist with tracks: +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 1: Zztlyk Syrn Qryss (type: , ratingKey: 539056) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 2: Jyxkra (type: , ratingKey: 539057) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 3: Ktal Vysh (type: , ratingKey: 539058) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 4: Fluxx (type: , ratingKey: 539059) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 5: Vwrn Tlyx (type: , ratingKey: 539060) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 6: 1800 (type: , ratingKey: 195875) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 7: Mary Poppins (type: , ratingKey: 325667) +2025-07-25 09:30:50 - newmusic.plex_client - DEBUG - create_playlist:220 - Track 8: BOOM (type: , ratingKey: 258903) +2025-07-25 09:30:50 - newmusic.plex_client - ERROR - create_playlist:227 - CreatePlaylist failed: Must include items to add when creating new playlist. +2025-07-25 09:30:50 - newmusic.plex_client - INFO - create_playlist:231 - Created playlist 'Failed test' with 8 tracks (using items parameter) +2025-07-25 09:30:50 - newmusic.sync_service - INFO - sync_playlist:196 - Sync completed: 80.0% success rate +2025-07-25 09:31:16 - newmusic.main - INFO - closeEvent:176 - Closing application... +2025-07-25 09:31:16 - newmusic.main - INFO - closeEvent:181 - Cleaning up Downloads page threads... +2025-07-25 09:31:16 - newmusic.main - INFO - closeEvent:186 - Stopping status monitoring thread... +2025-07-25 09:31:18 - newmusic.main - INFO - closeEvent:191 - Closing Soulseek client... +2025-07-25 09:31:18 - newmusic.main - INFO - closeEvent:197 - Application closed successfully +2025-07-25 09:31:21 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-25 09:31:21 - newmusic.main - INFO - main:211 - Starting NewMusic application +2025-07-25 09:31:21 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 09:31:21 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-25 09:31:21 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-25 09:31:21 - newmusic.main - INFO - change_page:163 - Changed to page: dashboard +2025-07-25 09:31:21 - newmusic.main - INFO - setup_media_player_connections:150 - Media player connections established between sidebar and downloads page +2025-07-25 09:31:22 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-25 09:31:22 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +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) diff --git a/ui/pages/__pycache__/sync.cpython-312.pyc b/ui/pages/__pycache__/sync.cpython-312.pyc index a3b43737cb28fa030a456191aaecc0a7e5253bf6..5f2486c466d0fd79746f6ac01ae8e33c1ade961e 100644 GIT binary patch delta 7151 zcmaJ_3tZGy_Mda^%nxK{c!MCXK}8)<(A9i`f}*D81FhA31S5=sAmDEXl}RPc%FOaX zc`!4xtbb)`+9!WzyXt1TS=jZtdE-5^J^M=Kk-wgO6?ZvwS{$=id7}_q^}9 z=l9#Y-v0bnd+>*Ldyq-~nGZZzJo%H_;J1R|vC8m%U@|>oB9q%R7m7@Cv1kD8t%Np6 zr^lB;@7SWWb*8xkiuy}TUvF9ob2Da{oEiFBq+?MKV|=;{mRO*`$XNk7!u+Ud$zW<6 zAQFrRec%+(gI-?^s}ow|sw#_IUU$CkUZlG{#rX@XyxxlPe2-TyQtBF*2@8zXYhXGA zw`-xLhd!9Md`0(f0jHM5O3b2Hx4`(Yvw=Ntv%EPlwQkeJIK#dbwg7xV zyXv4f+-ba52RjgE8U@=R2%&^Z>!Au>GurB57trZ;h^86i!3qhKe;A@f=_;%{zATdV zJq-a*4S@)H|7lo8y&k~`sz`z;df)_DscZ*)1MBJTXW+b~7_t*)Yv+~Tv~efoz~AZP zosgxiU`-cN*t5{|vjEXo&%$%K5$dLX8NY2ijHdIu;8(P8HFoI|K|7y=SlTlaBB@}K z6uo~uYBXRb*y!?eFiigR-3=pd$aL+7S=ufZc7%@XhIKy^W{iFw4gqx1_b&kiS-Z&M~t<5;A4on%68bK+ow5$^lLonWcVi)zXZd(c0&gpc?r_s zw>0_{m}89oKdAWM8++0>FGKVV**~)EWF=d3>w1OWWJo?m82ksep;X5D0n>%BXv*u9 zu{pIDO0nHUgI|NiB<_QRx`HLqsHgG|wOb*wuKoGQr1h}gv1hG4c;g)#hrm z)8ZSETjHUb12S}vzYYb2`(U>W(4Kve91-Bp#dq1jT?|b~7x#g#eZz_@rG@+9j-NS` zj_-#%F%jynU+zi$-+&X;W1|emwKpJ`;;+j{wOb$^^_Lbmn;3*1Wk4#K*yKiWcDZ2cQ;{hMv+?E$9H^t$#lafa_rsD>Vzkgf}#Rb5^< z!?oC*?kTQVF@Cwb+-vV<*x!Ou(D?YYMpEr1hz$Ra6BIyu4#`3gYn(a+%@zovXMP36 zkYZSV4Ic@ZZZsW-y#mUNHSdAV6861Ky0LxNlj|Ha{q@J#bQ&HOiLKU~^~hVU&t`)z zGxTH#qO>!x2g0f045Vna-K1ID>Dd87q?QNe4fINcK7M$iIIa8OzcOs3zR0SozBAQ4U(+go6$ zCM|9F0w$W_7e>sNFbl)endN-R$f@ZW%-KP!FF=pD5xhQJf=8391rGU_?XN+7*)ExP zZ4iRyAmjHJU{An|ZcP3lE3ayqs$jhFzgjRy*&>NsZ6)O%x9*)?Qnc9Z)#I6ozv9xF zzru?$I-X0=6J{CPF2R##7(;0tFq4uxrBQ1;ARg8jyE@=AM4O=6N{FZ{XtL0g-$O0D zK+!+QJ7E$n`a$mBYCQS_oI!b~%)Scc*4xE2T$N-wlX>R~#~zb<`x+<5ppyah1xsZ4ajr*AF7bEr*aoqJHOKyTRp-aiTU8dwE8Ohvc~C5lyIhiRvF zt2(TLmEh69vBkCE>FHjoo1D{t@dJ< zC;x_$p4Ld7mekzjoX>W6S|fP*7H9veS+d~-SNYu<#Uy@P@^9JdOS~Df|N8toCr_1R zB0^=?O z+8aVM4=*@8y7@32%JI%u@GnOl=5lWLUf=$uP%9ryd%PCP!U9LbAt`5&72qAWnJQ>y8S!sU?w<$ zH>s#Vl3Do5SVafim_QAiA)sdHJ*ok7bQL^@zX5Zo2F$V0<#Ef5DDR5>ZL#)+%(@vr z2fMD-tS~UQE03nhf>Xc;Mn&>o9;v{p5YOYOYJTYABDB^t$&mYc-;BWj=m`U?G7gJX z9R6qxX|bj>T2szi`<@GlXbEvPg*eZJMz(~eHHM}&^v`Mz9epk=swK?X6n1O<snr_t7@+18J~3xYVKDG;|q)C8%vQ~0bC zDhjJSj;U3il0v-?JrIP?VT9G_X~htfHBFx1NZEr;w9Bf{$5?Df8^A>J24gQ6Y}5zi zb%1F^p*S*$tLkmFqOi>E((^0JT-9YI9AfnciZ@Us9x+V z9(}=(z>vg{%+Q;G`yai7fx8j^wJg~2CZ6&&s|PUrmZu}RX3t{?=d}oiz6?PO*$k6J zj>H@uPG^|OFqVO9o~}Zy0;|H#A=Q`ggA#^`4BZ6fR6)_tvt)HdGsFZ)R^fI_a7SXKC4)jE&}|K{+yx!sK^A96j8PSV1sW`;Ph;^8 z$TMs`ur?Cb&=ct>doQ|_j>CKW`^DTEm{V4=xcu&lN_2Hve*yeAH_9M_pbH zRb^g}zK_XwavZ{BlIwlhQ-KUG@PieK8N+sdx}HbsLfy*K4LrS{JlWV6YH3F{_QQCa zaWWgbVU*grim7gCRjX1}+b*~H9Q0f^MqA6>E4}$%-BnmR%t#!E-9b|u{gkkcX5`AN zG0X7f;+;5jx7^4r^v~Gxj#jbMwNfWmNa^Bd z&wI=sukWiiU2F3OFwu#fhRT=n&% zRe9JmV3Dgta`PE&v+zDMylQ06!D}FI{LHyn4v*5_xv0yxu*7+o0>>zKp7h*2zr}$e<9&hT3?0^jpxpUy6K~O)ZE8B&+_yBJW|E$0iLSkQ_G|6 z4BHsg$yviAWzG>EaR~Gj-g}Hkrx;X-vN;nR{6Hz6$Rnl5L>}EKLB6lkj7sPhq)cR( zM01zoPV@@e6oD~DSUGO7!1MHi2WzdXnKQpOwDyo)DE6R9UR;i7H-6*Aff{5O9X=du zmO;Iv1~;JmtZ=**he9g-Sc~&vu5tHT{AC~{)7}j@K||Td`0k*#4=_%?ePaN{K86vn z+8FQ{p3y@8y=3XZ6topzlGo9JtvCwy8JD)=@gT{6-%is#i56eVm`o!M!_-J>PjOP9>-F1RHl^WKd+;Cq>h|}zI+dRYnSBa)(Bd5S~k8( zCov4NXwXTi=4PYhBpwssBj;(E!s99LG!BMc#zUuZgFGZg=!aO0&`#B7uur;!x#lw5 z%b}Xj@E7)eEU&35G>z9T@>&l%b4H%5*NyCt@n5L@mDeuQ_(mM0l+j1iszzKUzZm?j z5kCg2(pc4+O#1C7vL*k>h&n4ff}~{T{XXZ+I3B4=IEv2`E7BT6$>%VJ{?sf@n!+YI zsQag~s5TiHpJF4o0dNk7!|#oe=WxEzW-yC9dge3ywRVpj`-b}?*E|=>)IF^LQj5; z2mAP#Bu!c^cPk>bM^PSD7OtY#guvK=RD ztd=j+Z_iilm<)Xl%Xb(ll3lEz=J(+(FPvb$&1{N`Mqa_GcU<9dEw8Fa%2c*ZU&Cvh zu+Bigm8*Ew&xw9@1&6>&`tAzOglR_Z_n5$+Ko?%ci?Roq+KIii@0jluTHc8ZqB>0XV7h(vc(Yr!q%S%U? z#Q?ZMgUljAzCVvQi`m^-mTUu5=-2Vq^{nbTdebcOw6${V8|8OUibXi!VPk?t9JRng zvRFm$DE5=Cf^mVj_TjTsMWe0aUYVcuR*|9keL`ofqCb2>omSDu>f=rRos?!1Ns0H% z1&{m^qu%rQU9and>Z5Yqm+hDSpiQJev+;^eTrn?bV*haX^={0|C%0DdC-5(KZgfmg zcd|3$wp2LGlqVS?S<7#EcN}lLRafrjsmhk;sWVLU9X*Q|ROYBEp-K}U>#jFie`+YF zvpF95ueA4nh1tM$+d(zqA`ZScc7%)G2pi~lq%@(FtA=_MPM5z%4TD1sN0c}Vn(8%2 zQfIVC)3!=}HxAl_?jjx|LXD#CVkuY^mAbsn(&sUv7cAWtD^j#kyg_AhB29`Fi5MSh zl*EcugcN!*PKH_SJIhJJyq&@y@STM5q94@zm6{SSVz5`J;f@!pL7RP>4kA&+L#p9O z6qC@(1>b+XRH2Pe)|K~emCv7l7{8YeIK&7TWPIxon*g5nzhsS}%{|2+$TZ&VDdguL zE*iRG{h}1C2e7KD6Y`U5*{n_)CqrUzVOfR8onKg1QdsIP8fWzGExxv>sv{3gXsTGL zbuhET^hByihK=+_s!YBYS)7A@N)=%+*$7D!{}k5SWKwj7D3srP^q!1JQ+*~n;$ z9VA9*n?q%M2TC6Ba3 z=7v8r4w7xK7zf*o8H2?uIQ&c2^F2<=sSIE7RJB}6gfd^1l5)vM)f4?UOm~3>4HZ-2 z8KY*XJl%NEOs+Ca2r6T$HzaJL&xgswT1Gz&6Ys$L^!9ME0A8o=BgAZ|NvgQiM{{tiT B=RN=c delta 6248 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 Y$Wk@s-|Ho=PrE_%I=^-k{~8|tKmE{>%K!iX diff --git a/ui/pages/sync.py b/ui/pages/sync.py index b2e52490..710d1be5 100644 --- a/ui/pages/sync.py +++ b/ui/pages/sync.py @@ -2019,6 +2019,9 @@ class SyncPage(QWidget): if hasattr(self, 'log_area'): self.log_area.append(f"๐Ÿ”„ Starting sync for playlist: {playlist.name}") + # Update refresh button state since we now have an active sync + self.update_refresh_button_state() + return True def toggle_playlist_selection(self, playlist_id): @@ -2075,6 +2078,9 @@ class SyncPage(QWidget): self.start_sync_btn.setText("Syncing...") self.start_sync_btn.setEnabled(False) + # Disable refresh button during sequential sync + self.update_refresh_button_state() + # Start first sync self.process_next_in_sync_queue() @@ -2107,6 +2113,9 @@ class SyncPage(QWidget): self.sequential_sync_queue.clear() self.start_sync_btn.setText("Start Sync") self.update_selection_ui() # Re-enable if playlists still selected + + # Update refresh button state since sequential sync is complete + self.update_refresh_button_state() def get_all_playlist_items(self): """Get all PlaylistItem widgets from the playlist layout""" @@ -2184,6 +2193,9 @@ class SyncPage(QWidget): else: print(f"DEBUG: Sync finished for {playlist_id}, not in sequential sync mode") + # Update refresh button state since a sync completed + self.update_refresh_button_state() + # Log completion if hasattr(self, 'log_area'): success_rate = result.success_rate @@ -2212,6 +2224,9 @@ class SyncPage(QWidget): if self.is_sequential_syncing: self.process_next_in_sync_queue() + # Update refresh button state since a sync completed (with error) + self.update_refresh_button_state() + # Log error if hasattr(self, 'log_area'): self.log_area.append(f"โŒ Sync failed: {error_msg}") @@ -2266,8 +2281,9 @@ class SyncPage(QWidget): print(f"Download process started for playlist: {playlist_id}. Disabling refresh.") self.active_download_processes[playlist_id] = playlist_item_widget playlist_item_widget.show_operation_status() - self.refresh_btn.setEnabled(False) - self.refresh_btn.setText("๐Ÿ”„ Working...") + + # Use centralized refresh button management + self.update_refresh_button_state() # --- FIX: Connect the finished signal from the modal --- # This ensures that when the modal is finished (or cancelled), the cleanup function is called. if playlist_item_widget.download_modal: @@ -2294,8 +2310,8 @@ class SyncPage(QWidget): if not self.active_download_processes: print("All download processes finished. Re-enabling refresh.") - self.refresh_btn.setEnabled(True) - self.refresh_btn.setText("๐Ÿ”„ Refresh") + # Use centralized refresh button management + self.update_refresh_button_state() def showEvent(self, event): @@ -2795,6 +2811,27 @@ class SyncPage(QWidget): self.refresh_btn.setEnabled(True) self.refresh_btn.setText("๐Ÿ”„ Refresh") + def has_active_operations(self): + """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 + + 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 + + def update_refresh_button_state(self): + """Update refresh button state based on active operations""" + if self.has_active_operations(): + if self.is_sequential_syncing: + self.disable_refresh_button("Sequential Sync") + elif self.active_sync_workers: + self.disable_refresh_button("Sync") + elif self.active_download_processes: + self.disable_refresh_button("Download") + else: + self.enable_refresh_button() + def load_initial_playlists(self): """Load initial playlist data (placeholder or real)""" if self.spotify_client and self.spotify_client.is_authenticated():