From 32bfdbaefea2517ec415e4b8dc45481ef40bd942 Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Sat, 26 Jul 2025 22:04:59 -0700 Subject: [PATCH] this is working --- .spotify_cache | 2 +- logs/app.log | 1464 ++++++++++++++++++ ui/pages/__pycache__/artists.cpython-312.pyc | Bin 129113 -> 185005 bytes ui/pages/artists.py | 1107 ++++++++++++- 4 files changed, 2525 insertions(+), 48 deletions(-) diff --git a/.spotify_cache b/.spotify_cache index bf9c3a22..c0df45bb 100644 --- a/.spotify_cache +++ b/.spotify_cache @@ -1 +1 @@ -{"access_token": "BQCHyfsm-m-dGmQ8e9HsHGZgYuJ0EqrdxbzoKDRtIo0iuW3wGmpxdn01OfvcHK2-8aXlNmTAU1Q2qRWSJMMCEnBxX4cNjWG0L-OiFsSUqWt_ESQ5dMqBGw5I5hAwgCC5WEzz24yu7hGQHmOKlmCcwriWcuItLT6y529tmBiPE0FVvkMjrcLpFoU_evLX5b0_wx7H79m7H7TNRbRuSO90ZJtlNJGjJhAVxK-yRNJoTfCPe0X7yDMBSdHp5jEQaKmM", "token_type": "Bearer", "expires_in": 3600, "scope": "user-library-read user-read-private playlist-read-private playlist-read-collaborative user-read-email", "expires_at": 1753586601, "refresh_token": "AQDmfQkPCGObfJeTUIbW1hAAwhSqkuHRA3Qh2dqVYMRh0eCkFMQgPNJDDzF8y-BiaVbj80zePkK_XSfYH1aJutMtNbnsqRKWuxP31BTrMc7pdUdbE7Fma4oH8wpDUKdG3MM"} \ No newline at end of file +{"access_token": "BQBLgCrkibuxPE8cTnfcwLA71kNHLIXZzSM_AJREWUi-6DqRirCDmGJSYfIt4PCBKGi43N6w20u1dmFo8Iyrxnx6V9I7GnMdrYjAtzO8Ooep_hoHT5bTrUitQ9Wk2AFm8vJih1_IBCxivds2GsVjupYXTKc3QcURVtm2rGGnRGpExwe9F8tsdXKJfC-wzzhWp9GnGySTXP43whzShjOl0L-TBL8_SpJKWtJi6_2e99-as9r0r_OmjiFzD9Oem4BG", "token_type": "Bearer", "expires_in": 3600, "scope": "user-library-read user-read-private playlist-read-private playlist-read-collaborative user-read-email", "expires_at": 1753595655, "refresh_token": "AQDmfQkPCGObfJeTUIbW1hAAwhSqkuHRA3Qh2dqVYMRh0eCkFMQgPNJDDzF8y-BiaVbj80zePkK_XSfYH1aJutMtNbnsqRKWuxP31BTrMc7pdUdbE7Fma4oH8wpDUKdG3MM"} \ No newline at end of file diff --git a/logs/app.log b/logs/app.log index 650eda27..b113b62e 100644 --- a/logs/app.log +++ b/logs/app.log @@ -79484,3 +79484,1467 @@ 2025-07-26 20:23:24 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} 2025-07-26 20:23:24 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 2025-07-26 20:23:24 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: [{"username":"bofhxyto","directories":[{"directory":"Music\\Taylor Swift\\Fearless (platinum edition)","fileCount":2,"files":[{"id":"382f6def-f6d8-4541-b34e-6b73f19b2861","username":"bofhxyto","direction":"Download","filename":"Music\\Taylor Swift\\Fearless (platinum edition)\\04 Taylor Swift - Come In With the Rain.flac","size":28313612,"startOffset":0,"state":"Completed, Errored","stateDescription":"Completed, Errored","requestedAt":"2025-07-27T03:18:10.8431696","endedAt":"2025-07-27T03:18:27.... +2025-07-26 21:54:10 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-26 21:54:10 - newmusic.main - INFO - main:211 - Starting NewMusic application +2025-07-26 21:54:10 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-26 21:54:10 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-26 21:54:10 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-26 21:54:11 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-26 21:54:11 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-26 21:54:11 - newmusic.main - INFO - change_page:163 - Changed to page: dashboard +2025-07-26 21:54:11 - newmusic.main - INFO - setup_media_player_connections:150 - Media player connections established between sidebar and downloads page +2025-07-26 21:54:11 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-26 21:54:11 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-26 21:54:12 - newmusic.main - INFO - change_page:163 - Changed to page: artists +2025-07-26 21:54:16 - newmusic.spotify_client - INFO - get_artist_albums:452 - Retrieved 30 albums for artist 06HL4z0CvFAxyc27GXpf02 +2025-07-26 21:54:17 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-26 21:54:17 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-26 21:54:17 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='THE TORTURED POETS DEPARTMENT: THE ANTHOLOGY', artist='taylor swift' +2025-07-26 21:54:17 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='the tortured poets department the anthology', artist='taylor swift' +2025-07-26 21:54:17 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='the tortured poets department the anthology', artist='' +2025-07-26 21:54:17 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='THE TORTURED POETS DEPARTMENT', artist='taylor swift' +2025-07-26 21:54:17 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='1989 (Taylor's Version) [Deluxe]', artist='taylor swift' +2025-07-26 21:54:17 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='1989 (Taylor's Version) [Deluxe]', artist='' +2025-07-26 21:54:17 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='1989', artist='taylor swift' +2025-07-26 21:54:18 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='1989 (Taylor's Version)', artist='taylor swift' +2025-07-26 21:54:18 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='1989', artist='taylor swift' +2025-07-26 21:54:18 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Speak Now (Taylor's Version)', artist='taylor swift' +2025-07-26 21:54:18 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='speak now', artist='taylor swift' +2025-07-26 21:54:18 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Midnights (The Til Dawn Edition)', artist='taylor swift' +2025-07-26 21:54:18 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='midnights the til dawn edition', artist='taylor swift' +2025-07-26 21:54:18 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='midnights the til dawn edition', artist='' +2025-07-26 21:54:18 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Midnights (3am Edition)', artist='taylor swift' +2025-07-26 21:54:18 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='midnights 3am edition', artist='taylor swift' +2025-07-26 21:54:18 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='midnights 3am edition', artist='' +2025-07-26 21:54:19 - newmusic.plex_client - DEBUG - search_albums:526 - Found 3 albums matching query: album='Midnights', artist='taylor swift' +2025-07-26 21:54:19 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Red (Taylor's Version)', artist='taylor swift' +2025-07-26 21:54:19 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='red', artist='taylor swift' +2025-07-26 21:54:19 - newmusic.plex_client - DEBUG - search_albums:526 - Found 3 albums matching query: album='Fearless (Taylor's Version)', artist='taylor swift' +2025-07-26 21:54:19 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='fearless', artist='taylor swift' +2025-07-26 21:54:19 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='evermore (deluxe version)', artist='taylor swift' +2025-07-26 21:54:20 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='evermore', artist='taylor swift' +2025-07-26 21:54:20 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='evermore', artist='taylor swift' +2025-07-26 21:54:20 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='folklore: the long pond studio sessions (from the Disney+ special) [deluxe edition]', artist='taylor swift' +2025-07-26 21:54:20 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='folklore: the long pond studio sessions (from the Disney+ special) [deluxe edition]', artist='' +2025-07-26 21:54:20 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='folklore the long pond studio sessions from the disney special deluxe edition', artist='taylor swift' +2025-07-26 21:54:20 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='folklore the long pond studio sessions from the disney special deluxe edition', artist='' +2025-07-26 21:54:20 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='folklore (deluxe version)', artist='taylor swift' +2025-07-26 21:54:20 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='folklore', artist='taylor swift' +2025-07-26 21:54:20 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='folklore', artist='taylor swift' +2025-07-26 21:54:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='Lover', artist='taylor swift' +2025-07-26 21:54:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Taylor Swift Karaoke: reputation', artist='taylor swift' +2025-07-26 21:54:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='taylor swift karaoke reputation', artist='taylor swift' +2025-07-26 21:54:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='taylor swift karaoke reputation', artist='' +2025-07-26 21:54:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 4 albums matching query: album='reputation', artist='taylor swift' +2025-07-26 21:54:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='reputation Stadium Tour Surprise Song Playlist', artist='taylor swift' +2025-07-26 21:54:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='1989 (Deluxe Edition)', artist='taylor swift' +2025-07-26 21:54:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='1989', artist='taylor swift' +2025-07-26 21:54:22 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='1989', artist='taylor swift' +2025-07-26 21:54:22 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Red (Deluxe Edition)', artist='taylor swift' +2025-07-26 21:54:22 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='red', artist='taylor swift' +2025-07-26 21:54:22 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='Red', artist='taylor swift' +2025-07-26 21:54:22 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Speak Now World Tour Live', artist='taylor swift' +2025-07-26 21:54:22 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Speak Now (Deluxe Edition)', artist='taylor swift' +2025-07-26 21:54:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='speak now', artist='taylor swift' +2025-07-26 21:54:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='Speak Now', artist='taylor swift' +2025-07-26 21:54:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Fearless Platinum Edition', artist='taylor swift' +2025-07-26 21:54:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Fearless Platinum Edition', artist='' +2025-07-26 21:54:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='Fearless', artist='taylor swift' +2025-07-26 21:54:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Live From Clear Channel Stripped 2008', artist='taylor swift' +2025-07-26 21:54:24 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='Taylor Swift', artist='taylor swift' +2025-07-26 21:57:33 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-26 21:57:33 - newmusic.main - INFO - main:211 - Starting NewMusic application +2025-07-26 21:57:33 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-26 21:57:33 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-26 21:57:33 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-26 21:57:34 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-26 21:57:34 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-26 21:57:34 - newmusic.main - INFO - change_page:163 - Changed to page: dashboard +2025-07-26 21:57:34 - newmusic.main - INFO - setup_media_player_connections:150 - Media player connections established between sidebar and downloads page +2025-07-26 21:57:34 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-26 21:57:34 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-26 21:57:46 - newmusic.main - INFO - change_page:163 - Changed to page: artists +2025-07-26 21:57:50 - newmusic.spotify_client - INFO - get_artist_albums:452 - Retrieved 30 albums for artist 06HL4z0CvFAxyc27GXpf02 +2025-07-26 21:57:50 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-26 21:57:50 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-26 21:57:50 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='THE TORTURED POETS DEPARTMENT: THE ANTHOLOGY', artist='taylor swift' +2025-07-26 21:57:50 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='the tortured poets department the anthology', artist='taylor swift' +2025-07-26 21:57:50 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='the tortured poets department the anthology', artist='' +2025-07-26 21:57:51 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='THE TORTURED POETS DEPARTMENT', artist='taylor swift' +2025-07-26 21:57:51 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='1989 (Taylor's Version) [Deluxe]', artist='taylor swift' +2025-07-26 21:57:51 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='1989 (Taylor's Version) [Deluxe]', artist='' +2025-07-26 21:57:51 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='1989', artist='taylor swift' +2025-07-26 21:57:51 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='1989 (Taylor's Version)', artist='taylor swift' +2025-07-26 21:57:51 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='1989', artist='taylor swift' +2025-07-26 21:57:51 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Speak Now (Taylor's Version)', artist='taylor swift' +2025-07-26 21:57:52 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='speak now', artist='taylor swift' +2025-07-26 21:57:52 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Midnights (The Til Dawn Edition)', artist='taylor swift' +2025-07-26 21:57:52 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='midnights the til dawn edition', artist='taylor swift' +2025-07-26 21:57:52 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='midnights the til dawn edition', artist='' +2025-07-26 21:57:52 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Midnights (3am Edition)', artist='taylor swift' +2025-07-26 21:57:52 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='midnights 3am edition', artist='taylor swift' +2025-07-26 21:57:52 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='midnights 3am edition', artist='' +2025-07-26 21:57:52 - newmusic.plex_client - DEBUG - search_albums:526 - Found 3 albums matching query: album='Midnights', artist='taylor swift' +2025-07-26 21:57:52 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Red (Taylor's Version)', artist='taylor swift' +2025-07-26 21:57:53 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='red', artist='taylor swift' +2025-07-26 21:57:53 - newmusic.plex_client - DEBUG - search_albums:526 - Found 3 albums matching query: album='Fearless (Taylor's Version)', artist='taylor swift' +2025-07-26 21:57:53 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='fearless', artist='taylor swift' +2025-07-26 21:57:53 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='evermore (deluxe version)', artist='taylor swift' +2025-07-26 21:57:53 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='evermore', artist='taylor swift' +2025-07-26 21:57:53 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='evermore', artist='taylor swift' +2025-07-26 21:57:54 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='folklore: the long pond studio sessions (from the Disney+ special) [deluxe edition]', artist='taylor swift' +2025-07-26 21:57:54 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='folklore: the long pond studio sessions (from the Disney+ special) [deluxe edition]', artist='' +2025-07-26 21:57:54 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='folklore the long pond studio sessions from the disney special deluxe edition', artist='taylor swift' +2025-07-26 21:57:54 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='folklore the long pond studio sessions from the disney special deluxe edition', artist='' +2025-07-26 21:57:54 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='folklore (deluxe version)', artist='taylor swift' +2025-07-26 21:57:54 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='folklore', artist='taylor swift' +2025-07-26 21:57:54 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='folklore', artist='taylor swift' +2025-07-26 21:57:54 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='Lover', artist='taylor swift' +2025-07-26 21:57:54 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Taylor Swift Karaoke: reputation', artist='taylor swift' +2025-07-26 21:57:54 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='taylor swift karaoke reputation', artist='taylor swift' +2025-07-26 21:57:54 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='taylor swift karaoke reputation', artist='' +2025-07-26 21:57:55 - newmusic.plex_client - DEBUG - search_albums:526 - Found 4 albums matching query: album='reputation', artist='taylor swift' +2025-07-26 21:57:55 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='reputation Stadium Tour Surprise Song Playlist', artist='taylor swift' +2025-07-26 21:57:55 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='1989 (Deluxe Edition)', artist='taylor swift' +2025-07-26 21:57:55 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='1989', artist='taylor swift' +2025-07-26 21:57:55 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='1989', artist='taylor swift' +2025-07-26 21:57:55 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Red (Deluxe Edition)', artist='taylor swift' +2025-07-26 21:57:56 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='red', artist='taylor swift' +2025-07-26 21:57:56 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='Red', artist='taylor swift' +2025-07-26 21:57:56 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Speak Now World Tour Live', artist='taylor swift' +2025-07-26 21:57:56 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Speak Now (Deluxe Edition)', artist='taylor swift' +2025-07-26 21:57:56 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='speak now', artist='taylor swift' +2025-07-26 21:57:57 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='Speak Now', artist='taylor swift' +2025-07-26 21:57:57 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Fearless Platinum Edition', artist='taylor swift' +2025-07-26 21:57:57 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Fearless Platinum Edition', artist='' +2025-07-26 21:57:57 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='Fearless', artist='taylor swift' +2025-07-26 21:57:57 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Live From Clear Channel Stripped 2008', artist='taylor swift' +2025-07-26 21:57:57 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='Taylor Swift', artist='taylor swift' +2025-07-26 22:00:07 - newmusic.main - INFO - closeEvent:176 - Closing application... +2025-07-26 22:00:07 - newmusic.main - INFO - closeEvent:181 - Cleaning up Downloads page threads... +2025-07-26 22:00:07 - newmusic.main - INFO - closeEvent:186 - Stopping status monitoring thread... +2025-07-26 22:00:08 - newmusic.main - INFO - closeEvent:191 - Closing Soulseek client... +2025-07-26 22:00:08 - newmusic.main - INFO - closeEvent:197 - Application closed successfully +2025-07-26 22:00:10 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-26 22:00:10 - newmusic.main - INFO - main:211 - Starting NewMusic application +2025-07-26 22:00:10 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-26 22:00:10 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-26 22:00:10 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-26 22:00:11 - newmusic.spotify_client - INFO - _setup_client:179 - Spotify client initialized (user info will be fetched when needed) +2025-07-26 22:00:11 - newmusic.soulseek_client - INFO - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-26 22:00:11 - newmusic.main - INFO - change_page:163 - Changed to page: dashboard +2025-07-26 22:00:11 - newmusic.main - INFO - setup_media_player_connections:150 - Media player connections established between sidebar and downloads page +2025-07-26 22:00:11 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-26 22:00:11 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-26 22:00:17 - newmusic.main - INFO - change_page:163 - Changed to page: artists +2025-07-26 22:00:21 - newmusic.spotify_client - INFO - get_artist_albums:452 - Retrieved 30 albums for artist 06HL4z0CvFAxyc27GXpf02 +2025-07-26 22:00:21 - newmusic.plex_client - INFO - _find_music_library:127 - Found music library: Music +2025-07-26 22:00:21 - newmusic.plex_client - INFO - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-26 22:00:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='THE TORTURED POETS DEPARTMENT: THE ANTHOLOGY', artist='taylor swift' +2025-07-26 22:00:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='the tortured poets department the anthology', artist='taylor swift' +2025-07-26 22:00:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='the tortured poets department the anthology', artist='' +2025-07-26 22:00:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='THE TORTURED POETS DEPARTMENT', artist='taylor swift' +2025-07-26 22:00:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='1989 (Taylor's Version) [Deluxe]', artist='taylor swift' +2025-07-26 22:00:21 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='1989 (Taylor's Version) [Deluxe]', artist='' +2025-07-26 22:00:22 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='1989', artist='taylor swift' +2025-07-26 22:00:22 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='1989 (Taylor's Version)', artist='taylor swift' +2025-07-26 22:00:22 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='1989', artist='taylor swift' +2025-07-26 22:00:22 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Speak Now (Taylor's Version)', artist='taylor swift' +2025-07-26 22:00:22 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='speak now', artist='taylor swift' +2025-07-26 22:00:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Midnights (The Til Dawn Edition)', artist='taylor swift' +2025-07-26 22:00:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='midnights the til dawn edition', artist='taylor swift' +2025-07-26 22:00:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='midnights the til dawn edition', artist='' +2025-07-26 22:00:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Midnights (3am Edition)', artist='taylor swift' +2025-07-26 22:00:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='midnights 3am edition', artist='taylor swift' +2025-07-26 22:00:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='midnights 3am edition', artist='' +2025-07-26 22:00:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 3 albums matching query: album='Midnights', artist='taylor swift' +2025-07-26 22:00:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Red (Taylor's Version)', artist='taylor swift' +2025-07-26 22:00:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='red', artist='taylor swift' +2025-07-26 22:00:23 - newmusic.plex_client - DEBUG - search_albums:526 - Found 3 albums matching query: album='Fearless (Taylor's Version)', artist='taylor swift' +2025-07-26 22:00:24 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='fearless', artist='taylor swift' +2025-07-26 22:00:24 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='evermore (deluxe version)', artist='taylor swift' +2025-07-26 22:00:24 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='evermore', artist='taylor swift' +2025-07-26 22:00:24 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='evermore', artist='taylor swift' +2025-07-26 22:00:24 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='folklore: the long pond studio sessions (from the Disney+ special) [deluxe edition]', artist='taylor swift' +2025-07-26 22:00:24 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='folklore: the long pond studio sessions (from the Disney+ special) [deluxe edition]', artist='' +2025-07-26 22:00:24 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='folklore the long pond studio sessions from the disney special deluxe edition', artist='taylor swift' +2025-07-26 22:00:24 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='folklore the long pond studio sessions from the disney special deluxe edition', artist='' +2025-07-26 22:00:24 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='folklore (deluxe version)', artist='taylor swift' +2025-07-26 22:00:25 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='folklore', artist='taylor swift' +2025-07-26 22:00:25 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='folklore', artist='taylor swift' +2025-07-26 22:00:25 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='Lover', artist='taylor swift' +2025-07-26 22:00:25 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Taylor Swift Karaoke: reputation', artist='taylor swift' +2025-07-26 22:00:25 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='taylor swift karaoke reputation', artist='taylor swift' +2025-07-26 22:00:25 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='taylor swift karaoke reputation', artist='' +2025-07-26 22:00:25 - newmusic.plex_client - DEBUG - search_albums:526 - Found 4 albums matching query: album='reputation', artist='taylor swift' +2025-07-26 22:00:25 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='reputation Stadium Tour Surprise Song Playlist', artist='taylor swift' +2025-07-26 22:00:26 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='1989 (Deluxe Edition)', artist='taylor swift' +2025-07-26 22:00:26 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='1989', artist='taylor swift' +2025-07-26 22:00:26 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='1989', artist='taylor swift' +2025-07-26 22:00:26 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Red (Deluxe Edition)', artist='taylor swift' +2025-07-26 22:00:26 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='red', artist='taylor swift' +2025-07-26 22:00:27 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='Red', artist='taylor swift' +2025-07-26 22:00:27 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Speak Now World Tour Live', artist='taylor swift' +2025-07-26 22:00:27 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Speak Now (Deluxe Edition)', artist='taylor swift' +2025-07-26 22:00:27 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='speak now', artist='taylor swift' +2025-07-26 22:00:27 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='Speak Now', artist='taylor swift' +2025-07-26 22:00:27 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Fearless Platinum Edition', artist='taylor swift' +2025-07-26 22:00:27 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Fearless Platinum Edition', artist='' +2025-07-26 22:00:28 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='Fearless', artist='taylor swift' +2025-07-26 22:00:28 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Live From Clear Channel Stripped 2008', artist='taylor swift' +2025-07-26 22:00:28 - newmusic.plex_client - DEBUG - search_albums:526 - Found 5 albums matching query: album='Taylor Swift', artist='taylor swift' +2025-07-26 22:00:35 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:36 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 3 candidates. +2025-07-26 22:00:36 - newmusic.plex_client - INFO - search_tracks:344 - Found 3 candidates in Stage 1. Exiting early. +2025-07-26 22:00:37 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Jump Then Fall' (ratingKey: 384806) +2025-07-26 22:00:37 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Jump Then Fall (Taylors Version)' (ratingKey: 385031) +2025-07-26 22:00:37 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Jump Then Fall' (ratingKey: 384778) +2025-07-26 22:00:37 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:38 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 3 candidates. +2025-07-26 22:00:38 - newmusic.plex_client - INFO - search_tracks:344 - Found 3 candidates in Stage 1. Exiting early. +2025-07-26 22:00:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Untouchable' (ratingKey: 384807) +2025-07-26 22:00:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Untouchable (Taylors Version)' (ratingKey: 385032) +2025-07-26 22:00:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Untouchable (Live From Clear Channel Stripped 2008)' (ratingKey: 384996) +2025-07-26 22:00:38 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:39 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:00:39 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift Forever & Always - Piano Version' +2025-07-26 22:00:40 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'Forever & Always - Piano Version' +2025-07-26 22:00:40 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:41 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 10 candidates. +2025-07-26 22:00:41 - newmusic.plex_client - INFO - search_tracks:344 - Found 10 candidates in Stage 1. Exiting early. +2025-07-26 22:00:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always (Commentary)' (ratingKey: 384514) +2025-07-26 22:00:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always' (ratingKey: 384515) +2025-07-26 22:00:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always (Piano Version)' (ratingKey: 384808) +2025-07-26 22:00:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always' (ratingKey: 384822) +2025-07-26 22:00:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always (Taylors Version)' (ratingKey: 385028) +2025-07-26 22:00:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always (Piano Version) (Taylors Version)' (ratingKey: 385033) +2025-07-26 22:00:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always (Taylors Version)' (ratingKey: 384553) +2025-07-26 22:00:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always (Taylors Version)' (ratingKey: 384457) +2025-07-26 22:00:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always' (ratingKey: 384836) +2025-07-26 22:00:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always' (ratingKey: 384782) +2025-07-26 22:00:42 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:43 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:00:43 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift forever always' +2025-07-26 22:00:43 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'forever always' +2025-07-26 22:00:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever And Always (VIP)' (ratingKey: 260287) +2025-07-26 22:00:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever And Always' (ratingKey: 260288) +2025-07-26 22:00:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always (Commentary)' (ratingKey: 384514) +2025-07-26 22:00:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always' (ratingKey: 384515) +2025-07-26 22:00:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always (Piano Version)' (ratingKey: 384808) +2025-07-26 22:00:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always' (ratingKey: 384822) +2025-07-26 22:00:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always (Taylors Version)' (ratingKey: 385028) +2025-07-26 22:00:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always (Piano Version) (Taylors Version)' (ratingKey: 385033) +2025-07-26 22:00:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always (Taylors Version)' (ratingKey: 384553) +2025-07-26 22:00:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always (Taylors Version)' (ratingKey: 384457) +2025-07-26 22:00:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always' (ratingKey: 384836) +2025-07-26 22:00:45 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always' (ratingKey: 384782) +2025-07-26 22:00:45 - newmusic.plex_client - INFO - search_tracks:390 - Found 12 total potential matches for 'forever always' by 'Taylor Swift' after all stages. +2025-07-26 22:00:45 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:46 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 3 candidates. +2025-07-26 22:00:46 - newmusic.plex_client - INFO - search_tracks:344 - Found 3 candidates in Stage 1. Exiting early. +2025-07-26 22:00:46 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Come In With The Rain' (ratingKey: 384809) +2025-07-26 22:00:46 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Come In With The Rain (Taylors Version)' (ratingKey: 385034) +2025-07-26 22:00:46 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Come In With The Rain (Taylors Version)' (ratingKey: 384308) +2025-07-26 22:00:46 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:47 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 3 candidates. +2025-07-26 22:00:47 - newmusic.plex_client - INFO - search_tracks:344 - Found 3 candidates in Stage 1. Exiting early. +2025-07-26 22:00:47 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'SuperStar' (ratingKey: 384810) +2025-07-26 22:00:47 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Superstar (Taylors Version)' (ratingKey: 385035) +2025-07-26 22:00:47 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Superstar (Taylors Version)' (ratingKey: 384307) +2025-07-26 22:00:47 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:48 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 3 candidates. +2025-07-26 22:00:48 - newmusic.plex_client - INFO - search_tracks:344 - Found 3 candidates in Stage 1. Exiting early. +2025-07-26 22:00:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Other Side Of The Door' (ratingKey: 384811) +2025-07-26 22:00:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Other Side Of The Door (Taylors Version)' (ratingKey: 385036) +2025-07-26 22:00:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Other Side Of The Door (Taylors Version)' (ratingKey: 384557) +2025-07-26 22:00:48 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:49 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 9 candidates. +2025-07-26 22:00:49 - newmusic.plex_client - INFO - search_tracks:344 - Found 9 candidates in Stage 1. Exiting early. +2025-07-26 22:00:49 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fearless (Commentary)' (ratingKey: 384494) +2025-07-26 22:00:49 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fearless' (ratingKey: 384495) +2025-07-26 22:00:49 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fearless' (ratingKey: 384812) +2025-07-26 22:00:49 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fearless (Taylors Version)' (ratingKey: 385018) +2025-07-26 22:00:49 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fearless (Taylors Version)' (ratingKey: 384455) +2025-07-26 22:00:49 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fearless' (ratingKey: 384826) +2025-07-26 22:00:49 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fearless (Live From Clear Channel Stripped 2008)' (ratingKey: 384994) +2025-07-26 22:00:49 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fearless (Taylors Version)' (ratingKey: 384620) +2025-07-26 22:00:49 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fearless' (ratingKey: 384766) +2025-07-26 22:00:49 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:50 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 7 candidates. +2025-07-26 22:00:50 - newmusic.plex_client - INFO - search_tracks:344 - Found 7 candidates in Stage 1. Exiting early. +2025-07-26 22:00:51 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fifteen (Commentary)' (ratingKey: 384496) +2025-07-26 22:00:51 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fifteen' (ratingKey: 384497) +2025-07-26 22:00:51 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fifteen' (ratingKey: 384813) +2025-07-26 22:00:51 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fifteen (Taylors Version)' (ratingKey: 385019) +2025-07-26 22:00:51 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fifteen (Taylors Version)' (ratingKey: 384306) +2025-07-26 22:00:51 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fifteen' (ratingKey: 384827) +2025-07-26 22:00:51 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Fifteen' (ratingKey: 384757) +2025-07-26 22:00:51 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:52 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 8 candidates. +2025-07-26 22:00:52 - newmusic.plex_client - INFO - search_tracks:344 - Found 8 candidates in Stage 1. Exiting early. +2025-07-26 22:00:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Love Story (Commentary)' (ratingKey: 384498) +2025-07-26 22:00:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Love Story' (ratingKey: 384499) +2025-07-26 22:00:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Love Story' (ratingKey: 384814) +2025-07-26 22:00:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Love Story (Taylors Version)' (ratingKey: 385020) +2025-07-26 22:00:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Love Story (Taylors Version)' (ratingKey: 384456) +2025-07-26 22:00:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Love Story' (ratingKey: 384828) +2025-07-26 22:00:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Love Story (Live From Clear Channel Stripped 2008)' (ratingKey: 384993) +2025-07-26 22:00:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Love Story (Taylors Version)' (ratingKey: 384621) +2025-07-26 22:00:52 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:53 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 7 candidates. +2025-07-26 22:00:53 - newmusic.plex_client - INFO - search_tracks:344 - Found 7 candidates in Stage 1. Exiting early. +2025-07-26 22:00:53 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Hey Stephen (Commentary)' (ratingKey: 384500) +2025-07-26 22:00:53 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Hey Stephen' (ratingKey: 384501) +2025-07-26 22:00:53 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Hey Stephen' (ratingKey: 384815) +2025-07-26 22:00:53 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Hey Stephen (Taylors Version)' (ratingKey: 385021) +2025-07-26 22:00:53 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Hey Stephen (Taylors Version)' (ratingKey: 384304) +2025-07-26 22:00:53 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Hey Stephen' (ratingKey: 384829) +2025-07-26 22:00:53 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Hey Stephen' (ratingKey: 384783) +2025-07-26 22:00:53 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:54 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 8 candidates. +2025-07-26 22:00:54 - newmusic.plex_client - INFO - search_tracks:344 - Found 8 candidates in Stage 1. Exiting early. +2025-07-26 22:00:54 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'White Horse (Commentary)' (ratingKey: 384502) +2025-07-26 22:00:54 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'White Horse' (ratingKey: 384503) +2025-07-26 22:00:54 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'White Horse' (ratingKey: 384816) +2025-07-26 22:00:54 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'White Horse (Taylors Version)' (ratingKey: 385022) +2025-07-26 22:00:54 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'White Horse (Taylors Version)' (ratingKey: 384554) +2025-07-26 22:00:54 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'White Horse' (ratingKey: 384830) +2025-07-26 22:00:54 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'White Horse (Taylors Version)' (ratingKey: 384622) +2025-07-26 22:00:54 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'White Horse' (ratingKey: 384786) +2025-07-26 22:00:54 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:55 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 7 candidates. +2025-07-26 22:00:55 - newmusic.plex_client - INFO - search_tracks:344 - Found 7 candidates in Stage 1. Exiting early. +2025-07-26 22:00:56 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'You Belong With Me (Commentary)' (ratingKey: 384504) +2025-07-26 22:00:56 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'You Belong With Me' (ratingKey: 384505) +2025-07-26 22:00:56 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'You Belong With Me' (ratingKey: 384817) +2025-07-26 22:00:56 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'You Belong With Me (Taylors Version)' (ratingKey: 385023) +2025-07-26 22:00:56 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'You Belong With Me (Taylors Version)' (ratingKey: 384453) +2025-07-26 22:00:56 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'You Belong With Me' (ratingKey: 384831) +2025-07-26 22:00:56 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'You Belong With Me (Taylors Version)' (ratingKey: 384623) +2025-07-26 22:00:56 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:57 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 7 candidates. +2025-07-26 22:00:57 - newmusic.plex_client - INFO - search_tracks:344 - Found 7 candidates in Stage 1. Exiting early. +2025-07-26 22:00:57 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Breathe (Commentary)' (ratingKey: 384506) +2025-07-26 22:00:57 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Breathe' (ratingKey: 384507) +2025-07-26 22:00:57 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Breathe' (ratingKey: 384818) +2025-07-26 22:00:57 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Breathe (Taylors Version)' (ratingKey: 385024) +2025-07-26 22:00:57 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Breathe (Taylors Version)' (ratingKey: 384556) +2025-07-26 22:00:57 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Breathe' (ratingKey: 384832) +2025-07-26 22:00:57 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Breathe' (ratingKey: 384776) +2025-07-26 22:00:57 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:58 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:00:58 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:00:58 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Tell Me Why (Commentary)' (ratingKey: 384508) +2025-07-26 22:00:58 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Tell Me Why' (ratingKey: 384509) +2025-07-26 22:00:58 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Tell Me Why' (ratingKey: 384819) +2025-07-26 22:00:58 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Tell Me Why (Taylors Version)' (ratingKey: 385025) +2025-07-26 22:00:58 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Tell Me Why (Taylors Version)' (ratingKey: 384454) +2025-07-26 22:00:58 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Tell Me Why' (ratingKey: 384833) +2025-07-26 22:00:58 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:00:59 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 5 candidates. +2025-07-26 22:00:59 - newmusic.plex_client - INFO - search_tracks:344 - Found 5 candidates in Stage 1. Exiting early. +2025-07-26 22:00:59 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'You're Not Sorry (Commentary)' (ratingKey: 384510) +2025-07-26 22:00:59 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'You're Not Sorry' (ratingKey: 384511) +2025-07-26 22:00:59 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'You're Not Sorry' (ratingKey: 384820) +2025-07-26 22:00:59 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'You're Not Sorry' (ratingKey: 384834) +2025-07-26 22:00:59 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Back To December/Apologize/You're Not Sorry (Live/2011/Medley)' (ratingKey: 384711) +2025-07-26 22:00:59 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:00 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:01:00 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift youre not sorry' +2025-07-26 22:01:01 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'youre not sorry' +2025-07-26 22:01:02 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:03 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:01:03 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:01:03 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Way I Loved You (Commentary)' (ratingKey: 384512) +2025-07-26 22:01:03 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Way I Loved You' (ratingKey: 384513) +2025-07-26 22:01:03 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Way I Loved You' (ratingKey: 384821) +2025-07-26 22:01:03 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Way I Loved You (Taylors Version)' (ratingKey: 385027) +2025-07-26 22:01:03 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Way I Loved You (Taylors Version)' (ratingKey: 384303) +2025-07-26 22:01:03 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Way I Loved You' (ratingKey: 384835) +2025-07-26 22:01:03 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:04 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 10 candidates. +2025-07-26 22:01:04 - newmusic.plex_client - INFO - search_tracks:344 - Found 10 candidates in Stage 1. Exiting early. +2025-07-26 22:01:04 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always (Commentary)' (ratingKey: 384514) +2025-07-26 22:01:04 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always' (ratingKey: 384515) +2025-07-26 22:01:04 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always (Piano Version)' (ratingKey: 384808) +2025-07-26 22:01:04 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always' (ratingKey: 384822) +2025-07-26 22:01:04 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always (Taylors Version)' (ratingKey: 385028) +2025-07-26 22:01:04 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always (Piano Version) (Taylors Version)' (ratingKey: 385033) +2025-07-26 22:01:04 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always (Taylors Version)' (ratingKey: 384553) +2025-07-26 22:01:04 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always (Taylors Version)' (ratingKey: 384457) +2025-07-26 22:01:04 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always' (ratingKey: 384836) +2025-07-26 22:01:04 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Forever & Always' (ratingKey: 384782) +2025-07-26 22:01:04 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:05 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:01:05 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift forever always' +2025-07-26 22:01:06 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'forever always' +2025-07-26 22:01:07 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever And Always (VIP)' (ratingKey: 260287) +2025-07-26 22:01:07 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever And Always' (ratingKey: 260288) +2025-07-26 22:01:07 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always (Commentary)' (ratingKey: 384514) +2025-07-26 22:01:07 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always' (ratingKey: 384515) +2025-07-26 22:01:07 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always (Piano Version)' (ratingKey: 384808) +2025-07-26 22:01:07 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always' (ratingKey: 384822) +2025-07-26 22:01:07 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always (Taylors Version)' (ratingKey: 385028) +2025-07-26 22:01:07 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always (Piano Version) (Taylors Version)' (ratingKey: 385033) +2025-07-26 22:01:07 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always (Taylors Version)' (ratingKey: 384553) +2025-07-26 22:01:07 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always (Taylors Version)' (ratingKey: 384457) +2025-07-26 22:01:07 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always' (ratingKey: 384836) +2025-07-26 22:01:07 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Forever & Always' (ratingKey: 384782) +2025-07-26 22:01:07 - newmusic.plex_client - INFO - search_tracks:390 - Found 12 total potential matches for 'forever always' by 'Taylor Swift' after all stages. +2025-07-26 22:01:07 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:08 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:01:08 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:01:09 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Best Day (Commentary)' (ratingKey: 384516) +2025-07-26 22:01:09 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Best Day' (ratingKey: 384517) +2025-07-26 22:01:09 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Best Day' (ratingKey: 384823) +2025-07-26 22:01:09 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Best Day (Taylors Version)' (ratingKey: 385029) +2025-07-26 22:01:09 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Best Day' (ratingKey: 384837) +2025-07-26 22:01:09 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'The Best Day' (ratingKey: 384746) +2025-07-26 22:01:09 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 14 candidates. +2025-07-26 22:01:10 - newmusic.plex_client - INFO - search_tracks:344 - Found 14 candidates in Stage 1. Exiting early. +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Change (Commentary)' (ratingKey: 384518) +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Change' (ratingKey: 384519) +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Change' (ratingKey: 384824) +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Change (Taylors Version)' (ratingKey: 385030) +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Change (Taylors Version)' (ratingKey: 384458) +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Change' (ratingKey: 384838) +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Change (Live From Clear Channel Stripped 2008)' (ratingKey: 385000) +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Everything Has Changed' (ratingKey: 385186) +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Everything Has Changed (Commentary)' (ratingKey: 384441) +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Everything Has Changed' (ratingKey: 384442) +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Everything Has Changed' (ratingKey: 384853) +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Everything Has Changed (Taylor's Version)' (ratingKey: 385078) +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Everything Has Changed (Taylor's Version)' (ratingKey: 384583) +2025-07-26 22:01:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'Change' (ratingKey: 384768) +2025-07-26 22:01:26 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:27 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:01:27 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:01:28 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the 1' (ratingKey: 384901) +2025-07-26 22:01:28 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the 1' (ratingKey: 385045) +2025-07-26 22:01:28 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the 1 (the long pond studio sessions)' (ratingKey: 384633) +2025-07-26 22:01:28 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the 1' (ratingKey: 384650) +2025-07-26 22:01:28 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the 1' (ratingKey: 384335) +2025-07-26 22:01:28 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the 1' (ratingKey: 384327) +2025-07-26 22:01:28 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:29 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:01:29 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:01:29 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'cardigan' (ratingKey: 384902) +2025-07-26 22:01:29 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'cardigan' (ratingKey: 385046) +2025-07-26 22:01:29 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'cardigan' (ratingKey: 384569) +2025-07-26 22:01:29 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'cardigan (the long pond studio sessions)' (ratingKey: 384634) +2025-07-26 22:01:29 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'cardigan' (ratingKey: 384651) +2025-07-26 22:01:29 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'cardigan' (ratingKey: 384331) +2025-07-26 22:01:29 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:30 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:01:30 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:01:30 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the last great american dynasty' (ratingKey: 384903) +2025-07-26 22:01:30 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the last great american dynasty' (ratingKey: 385047) +2025-07-26 22:01:30 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the last great american dynasty (the long pond studio sessions)' (ratingKey: 384635) +2025-07-26 22:01:30 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the last great american dynasty' (ratingKey: 384652) +2025-07-26 22:01:30 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the last great american dynasty' (ratingKey: 384333) +2025-07-26 22:01:30 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the last great american dynasty' (ratingKey: 384329) +2025-07-26 22:01:30 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:31 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:01:31 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift exile (feat. Bon Iver)' +2025-07-26 22:01:32 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'exile (feat. Bon Iver)' +2025-07-26 22:01:32 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:33 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:01:33 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:01:33 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'exile' (ratingKey: 384904) +2025-07-26 22:01:33 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'exile' (ratingKey: 385048) +2025-07-26 22:01:33 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'exile' (ratingKey: 384571) +2025-07-26 22:01:33 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'exile (the long pond studio sessions)' (ratingKey: 384636) +2025-07-26 22:01:33 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'exile' (ratingKey: 384653) +2025-07-26 22:01:33 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'exile' (ratingKey: 384559) +2025-07-26 22:01:33 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:34 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 5 candidates. +2025-07-26 22:01:34 - newmusic.plex_client - INFO - search_tracks:344 - Found 5 candidates in Stage 1. Exiting early. +2025-07-26 22:01:35 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'my tears ricochet' (ratingKey: 384905) +2025-07-26 22:01:35 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'my tears ricochet' (ratingKey: 385049) +2025-07-26 22:01:35 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'my tears ricochet (the long pond studio sessions)' (ratingKey: 384637) +2025-07-26 22:01:35 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'my tears ricochet' (ratingKey: 384654) +2025-07-26 22:01:35 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'my tears ricochet' (ratingKey: 384561) +2025-07-26 22:01:35 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:36 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 7 candidates. +2025-07-26 22:01:36 - newmusic.plex_client - INFO - search_tracks:344 - Found 7 candidates in Stage 1. Exiting early. +2025-07-26 22:01:36 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball' (ratingKey: 384341) +2025-07-26 22:01:36 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball' (ratingKey: 384906) +2025-07-26 22:01:36 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball' (ratingKey: 385050) +2025-07-26 22:01:36 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball' (ratingKey: 384570) +2025-07-26 22:01:36 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball (the long pond studio sessions)' (ratingKey: 384638) +2025-07-26 22:01:36 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball' (ratingKey: 384655) +2025-07-26 22:01:36 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball' (ratingKey: 384328) +2025-07-26 22:01:36 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:37 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:01:37 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:01:37 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'seven' (ratingKey: 384907) +2025-07-26 22:01:37 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'seven' (ratingKey: 385051) +2025-07-26 22:01:37 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'seven' (ratingKey: 384567) +2025-07-26 22:01:37 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'seven (the long pond studio sessions)' (ratingKey: 384639) +2025-07-26 22:01:37 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'seven' (ratingKey: 384656) +2025-07-26 22:01:37 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'seven' (ratingKey: 384336) +2025-07-26 22:01:37 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:38 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:01:38 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:01:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'august' (ratingKey: 384382) +2025-07-26 22:01:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'august' (ratingKey: 384908) +2025-07-26 22:01:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'august' (ratingKey: 385052) +2025-07-26 22:01:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'august (the long pond studio sessions)' (ratingKey: 384640) +2025-07-26 22:01:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'august' (ratingKey: 384657) +2025-07-26 22:01:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'august' (ratingKey: 384334) +2025-07-26 22:01:38 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:39 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 5 candidates. +2025-07-26 22:01:39 - newmusic.plex_client - INFO - search_tracks:344 - Found 5 candidates in Stage 1. Exiting early. +2025-07-26 22:01:39 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'this is me trying' (ratingKey: 384909) +2025-07-26 22:01:39 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'this is me trying' (ratingKey: 385053) +2025-07-26 22:01:39 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'this is me trying (the long pond studio sessions)' (ratingKey: 384641) +2025-07-26 22:01:39 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'this is me trying' (ratingKey: 384658) +2025-07-26 22:01:39 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'this is me trying' (ratingKey: 384563) +2025-07-26 22:01:39 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:40 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 5 candidates. +2025-07-26 22:01:40 - newmusic.plex_client - INFO - search_tracks:344 - Found 5 candidates in Stage 1. Exiting early. +2025-07-26 22:01:41 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'illicit affairs' (ratingKey: 384910) +2025-07-26 22:01:41 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'illicit affairs' (ratingKey: 385054) +2025-07-26 22:01:41 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'illicit affairs (the long pond studio sessions)' (ratingKey: 384642) +2025-07-26 22:01:41 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'illicit affairs' (ratingKey: 384659) +2025-07-26 22:01:41 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'illicit affairs' (ratingKey: 384562) +2025-07-26 22:01:41 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:42 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:01:42 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:01:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'invisible string' (ratingKey: 384344) +2025-07-26 22:01:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'invisible string' (ratingKey: 384911) +2025-07-26 22:01:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'invisible string' (ratingKey: 385055) +2025-07-26 22:01:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'invisible string (the long pond studio sessions)' (ratingKey: 384643) +2025-07-26 22:01:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'invisible string' (ratingKey: 384660) +2025-07-26 22:01:42 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'invisible string' (ratingKey: 384330) +2025-07-26 22:01:42 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:43 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 5 candidates. +2025-07-26 22:01:43 - newmusic.plex_client - INFO - search_tracks:344 - Found 5 candidates in Stage 1. Exiting early. +2025-07-26 22:01:43 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mad woman' (ratingKey: 384912) +2025-07-26 22:01:43 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mad woman' (ratingKey: 385056) +2025-07-26 22:01:43 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mad woman (the long pond studio sessions)' (ratingKey: 384644) +2025-07-26 22:01:43 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mad woman' (ratingKey: 384661) +2025-07-26 22:01:43 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mad woman' (ratingKey: 384564) +2025-07-26 22:01:43 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:44 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 5 candidates. +2025-07-26 22:01:44 - newmusic.plex_client - INFO - search_tracks:344 - Found 5 candidates in Stage 1. Exiting early. +2025-07-26 22:01:44 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'epiphany' (ratingKey: 384913) +2025-07-26 22:01:44 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'epiphany' (ratingKey: 385057) +2025-07-26 22:01:44 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'epiphany' (ratingKey: 384568) +2025-07-26 22:01:44 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'epiphany (the long pond studio sessions)' (ratingKey: 384645) +2025-07-26 22:01:44 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'epiphany' (ratingKey: 384662) +2025-07-26 22:01:44 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:45 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 7 candidates. +2025-07-26 22:01:45 - newmusic.plex_client - INFO - search_tracks:344 - Found 7 candidates in Stage 1. Exiting early. +2025-07-26 22:01:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty' (ratingKey: 384379) +2025-07-26 22:01:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty' (ratingKey: 384914) +2025-07-26 22:01:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty' (ratingKey: 385058) +2025-07-26 22:01:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty (the long pond studio sessions)' (ratingKey: 384646) +2025-07-26 22:01:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty' (ratingKey: 384663) +2025-07-26 22:01:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty' (ratingKey: 384338) +2025-07-26 22:01:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty (Live from the 2020 Academy of Country Music Awards)' (ratingKey: 384326) +2025-07-26 22:01:45 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:46 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 5 candidates. +2025-07-26 22:01:46 - newmusic.plex_client - INFO - search_tracks:344 - Found 5 candidates in Stage 1. Exiting early. +2025-07-26 22:01:47 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'peace' (ratingKey: 384915) +2025-07-26 22:01:47 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'peace' (ratingKey: 385059) +2025-07-26 22:01:47 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'peace (the long pond studio sessions)' (ratingKey: 384647) +2025-07-26 22:01:47 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'peace' (ratingKey: 384664) +2025-07-26 22:01:47 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'peace' (ratingKey: 384337) +2025-07-26 22:01:47 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:48 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:01:48 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:01:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'hoax' (ratingKey: 384543) +2025-07-26 22:01:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'hoax' (ratingKey: 384916) +2025-07-26 22:01:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'hoax' (ratingKey: 385060) +2025-07-26 22:01:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'hoax (the long pond studio sessions)' (ratingKey: 384648) +2025-07-26 22:01:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'hoax' (ratingKey: 384665) +2025-07-26 22:01:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'hoax' (ratingKey: 384560) +2025-07-26 22:01:48 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:49 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:01:49 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift the lakes - bonus track' +2025-07-26 22:01:50 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'the lakes - bonus track' +2025-07-26 22:01:50 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:51 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 4 candidates. +2025-07-26 22:01:51 - newmusic.plex_client - INFO - search_tracks:344 - Found 4 candidates in Stage 1. Exiting early. +2025-07-26 22:01:51 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the lakes (bonus track)' (ratingKey: 385061) +2025-07-26 22:01:51 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the lakes' (ratingKey: 384566) +2025-07-26 22:01:51 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the lakes (the long pond studio sessions)' (ratingKey: 384649) +2025-07-26 22:01:51 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the lakes (bonus track)' (ratingKey: 384666) +2025-07-26 22:01:51 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:52 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:01:52 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift the 1 - the long pond studio sessions' +2025-07-26 22:01:53 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'the 1 - the long pond studio sessions' +2025-07-26 22:01:54 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:55 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:01:55 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:01:55 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the 1' (ratingKey: 384901) +2025-07-26 22:01:55 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the 1' (ratingKey: 385045) +2025-07-26 22:01:55 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the 1 (the long pond studio sessions)' (ratingKey: 384633) +2025-07-26 22:01:55 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the 1' (ratingKey: 384650) +2025-07-26 22:01:55 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the 1' (ratingKey: 384335) +2025-07-26 22:01:55 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the 1' (ratingKey: 384327) +2025-07-26 22:01:55 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:56 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:01:56 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift cardigan - the long pond studio sessions' +2025-07-26 22:01:56 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'cardigan - the long pond studio sessions' +2025-07-26 22:01:57 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:58 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:01:58 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:01:58 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'cardigan' (ratingKey: 384902) +2025-07-26 22:01:58 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'cardigan' (ratingKey: 385046) +2025-07-26 22:01:58 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'cardigan' (ratingKey: 384569) +2025-07-26 22:01:58 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'cardigan (the long pond studio sessions)' (ratingKey: 384634) +2025-07-26 22:01:58 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'cardigan' (ratingKey: 384651) +2025-07-26 22:01:58 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'cardigan' (ratingKey: 384331) +2025-07-26 22:01:58 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:01:59 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:01:59 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift the last great american dynasty - the long pond studio sessions' +2025-07-26 22:02:00 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'the last great american dynasty - the long pond studio sessions' +2025-07-26 22:02:01 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:02 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:02:02 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:02:02 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the last great american dynasty' (ratingKey: 384903) +2025-07-26 22:02:02 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the last great american dynasty' (ratingKey: 385047) +2025-07-26 22:02:02 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the last great american dynasty (the long pond studio sessions)' (ratingKey: 384635) +2025-07-26 22:02:02 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the last great american dynasty' (ratingKey: 384652) +2025-07-26 22:02:02 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the last great american dynasty' (ratingKey: 384333) +2025-07-26 22:02:02 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the last great american dynasty' (ratingKey: 384329) +2025-07-26 22:02:02 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:03 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:03 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift exile (feat. Bon Iver) - the long pond studio sessions' +2025-07-26 22:02:04 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'exile (feat. Bon Iver) - the long pond studio sessions' +2025-07-26 22:02:04 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:05 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:05 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift exile (feat. Bon Iver)' +2025-07-26 22:02:06 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'exile (feat. Bon Iver)' +2025-07-26 22:02:06 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:07 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:07 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift exile - the long pond studio sessions' +2025-07-26 22:02:08 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'exile - the long pond studio sessions' +2025-07-26 22:02:09 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:10 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:02:10 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:02:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'exile' (ratingKey: 384904) +2025-07-26 22:02:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'exile' (ratingKey: 385048) +2025-07-26 22:02:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'exile' (ratingKey: 384571) +2025-07-26 22:02:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'exile (the long pond studio sessions)' (ratingKey: 384636) +2025-07-26 22:02:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'exile' (ratingKey: 384653) +2025-07-26 22:02:10 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'exile' (ratingKey: 384559) +2025-07-26 22:02:10 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:11 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:11 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift my tears ricochet - the long pond studio sessions' +2025-07-26 22:02:12 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'my tears ricochet - the long pond studio sessions' +2025-07-26 22:02:12 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:13 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 5 candidates. +2025-07-26 22:02:13 - newmusic.plex_client - INFO - search_tracks:344 - Found 5 candidates in Stage 1. Exiting early. +2025-07-26 22:02:13 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'my tears ricochet' (ratingKey: 384905) +2025-07-26 22:02:13 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'my tears ricochet' (ratingKey: 385049) +2025-07-26 22:02:13 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'my tears ricochet (the long pond studio sessions)' (ratingKey: 384637) +2025-07-26 22:02:13 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'my tears ricochet' (ratingKey: 384654) +2025-07-26 22:02:13 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'my tears ricochet' (ratingKey: 384561) +2025-07-26 22:02:13 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:14 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:14 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift mirrorball - the long pond studio sessions' +2025-07-26 22:02:15 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'mirrorball - the long pond studio sessions' +2025-07-26 22:02:16 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:17 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 7 candidates. +2025-07-26 22:02:17 - newmusic.plex_client - INFO - search_tracks:344 - Found 7 candidates in Stage 1. Exiting early. +2025-07-26 22:02:17 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball' (ratingKey: 384341) +2025-07-26 22:02:17 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball' (ratingKey: 384906) +2025-07-26 22:02:17 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball' (ratingKey: 385050) +2025-07-26 22:02:17 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball' (ratingKey: 384570) +2025-07-26 22:02:17 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball (the long pond studio sessions)' (ratingKey: 384638) +2025-07-26 22:02:17 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball' (ratingKey: 384655) +2025-07-26 22:02:17 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mirrorball' (ratingKey: 384328) +2025-07-26 22:02:17 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:18 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:18 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift seven - the long pond studio sessions' +2025-07-26 22:02:19 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'seven - the long pond studio sessions' +2025-07-26 22:02:19 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:20 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:02:20 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:02:20 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'seven' (ratingKey: 384907) +2025-07-26 22:02:20 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'seven' (ratingKey: 385051) +2025-07-26 22:02:20 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'seven' (ratingKey: 384567) +2025-07-26 22:02:20 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'seven (the long pond studio sessions)' (ratingKey: 384639) +2025-07-26 22:02:20 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'seven' (ratingKey: 384656) +2025-07-26 22:02:20 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'seven' (ratingKey: 384336) +2025-07-26 22:02:20 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:21 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:21 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift august - the long pond studio sessions' +2025-07-26 22:02:22 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'august - the long pond studio sessions' +2025-07-26 22:02:23 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:24 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:02:24 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:02:24 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'august' (ratingKey: 384382) +2025-07-26 22:02:24 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'august' (ratingKey: 384908) +2025-07-26 22:02:24 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'august' (ratingKey: 385052) +2025-07-26 22:02:24 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'august (the long pond studio sessions)' (ratingKey: 384640) +2025-07-26 22:02:24 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'august' (ratingKey: 384657) +2025-07-26 22:02:24 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'august' (ratingKey: 384334) +2025-07-26 22:02:24 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:25 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:25 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift this is me trying - the long pond studio sessions' +2025-07-26 22:02:26 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'this is me trying - the long pond studio sessions' +2025-07-26 22:02:26 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:27 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 5 candidates. +2025-07-26 22:02:27 - newmusic.plex_client - INFO - search_tracks:344 - Found 5 candidates in Stage 1. Exiting early. +2025-07-26 22:02:27 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'this is me trying' (ratingKey: 384909) +2025-07-26 22:02:27 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'this is me trying' (ratingKey: 385053) +2025-07-26 22:02:27 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'this is me trying (the long pond studio sessions)' (ratingKey: 384641) +2025-07-26 22:02:27 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'this is me trying' (ratingKey: 384658) +2025-07-26 22:02:27 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'this is me trying' (ratingKey: 384563) +2025-07-26 22:02:27 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:28 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:28 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift illicit affairs - the long pond studio sessions' +2025-07-26 22:02:29 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'illicit affairs - the long pond studio sessions' +2025-07-26 22:02:30 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:31 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 5 candidates. +2025-07-26 22:02:31 - newmusic.plex_client - INFO - search_tracks:344 - Found 5 candidates in Stage 1. Exiting early. +2025-07-26 22:02:31 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'illicit affairs' (ratingKey: 384910) +2025-07-26 22:02:31 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'illicit affairs' (ratingKey: 385054) +2025-07-26 22:02:31 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'illicit affairs (the long pond studio sessions)' (ratingKey: 384642) +2025-07-26 22:02:31 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'illicit affairs' (ratingKey: 384659) +2025-07-26 22:02:31 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'illicit affairs' (ratingKey: 384562) +2025-07-26 22:02:31 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:32 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:32 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift invisible string - the long pond studio sessions' +2025-07-26 22:02:32 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'invisible string - the long pond studio sessions' +2025-07-26 22:02:33 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:34 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:02:34 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:02:34 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'invisible string' (ratingKey: 384344) +2025-07-26 22:02:34 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'invisible string' (ratingKey: 384911) +2025-07-26 22:02:34 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'invisible string' (ratingKey: 385055) +2025-07-26 22:02:34 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'invisible string (the long pond studio sessions)' (ratingKey: 384643) +2025-07-26 22:02:34 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'invisible string' (ratingKey: 384660) +2025-07-26 22:02:34 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'invisible string' (ratingKey: 384330) +2025-07-26 22:02:34 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:35 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:35 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift mad woman - the long pond studio sessions' +2025-07-26 22:02:36 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'mad woman - the long pond studio sessions' +2025-07-26 22:02:37 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:38 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 5 candidates. +2025-07-26 22:02:38 - newmusic.plex_client - INFO - search_tracks:344 - Found 5 candidates in Stage 1. Exiting early. +2025-07-26 22:02:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mad woman' (ratingKey: 384912) +2025-07-26 22:02:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mad woman' (ratingKey: 385056) +2025-07-26 22:02:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mad woman (the long pond studio sessions)' (ratingKey: 384644) +2025-07-26 22:02:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mad woman' (ratingKey: 384661) +2025-07-26 22:02:38 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'mad woman' (ratingKey: 384564) +2025-07-26 22:02:38 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:39 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:39 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift epiphany - the long pond studio sessions' +2025-07-26 22:02:39 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'epiphany - the long pond studio sessions' +2025-07-26 22:02:40 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:41 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 5 candidates. +2025-07-26 22:02:41 - newmusic.plex_client - INFO - search_tracks:344 - Found 5 candidates in Stage 1. Exiting early. +2025-07-26 22:02:41 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'epiphany' (ratingKey: 384913) +2025-07-26 22:02:41 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'epiphany' (ratingKey: 385057) +2025-07-26 22:02:41 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'epiphany' (ratingKey: 384568) +2025-07-26 22:02:41 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'epiphany (the long pond studio sessions)' (ratingKey: 384645) +2025-07-26 22:02:41 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'epiphany' (ratingKey: 384662) +2025-07-26 22:02:41 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:42 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:42 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift betty - the long pond studio sessions' +2025-07-26 22:02:43 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'betty - the long pond studio sessions' +2025-07-26 22:02:44 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:44 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 7 candidates. +2025-07-26 22:02:44 - newmusic.plex_client - INFO - search_tracks:344 - Found 7 candidates in Stage 1. Exiting early. +2025-07-26 22:02:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty' (ratingKey: 384379) +2025-07-26 22:02:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty' (ratingKey: 384914) +2025-07-26 22:02:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty' (ratingKey: 385058) +2025-07-26 22:02:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty (the long pond studio sessions)' (ratingKey: 384646) +2025-07-26 22:02:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty' (ratingKey: 384663) +2025-07-26 22:02:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty' (ratingKey: 384338) +2025-07-26 22:02:45 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'betty (Live from the 2020 Academy of Country Music Awards)' (ratingKey: 384326) +2025-07-26 22:02:45 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:46 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:46 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift peace - the long pond studio sessions' +2025-07-26 22:02:46 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'peace - the long pond studio sessions' +2025-07-26 22:02:47 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:48 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 5 candidates. +2025-07-26 22:02:48 - newmusic.plex_client - INFO - search_tracks:344 - Found 5 candidates in Stage 1. Exiting early. +2025-07-26 22:02:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'peace' (ratingKey: 384915) +2025-07-26 22:02:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'peace' (ratingKey: 385059) +2025-07-26 22:02:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'peace (the long pond studio sessions)' (ratingKey: 384647) +2025-07-26 22:02:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'peace' (ratingKey: 384664) +2025-07-26 22:02:48 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'peace' (ratingKey: 384337) +2025-07-26 22:02:48 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:49 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:49 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift hoax - the long pond studio sessions' +2025-07-26 22:02:50 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'hoax - the long pond studio sessions' +2025-07-26 22:02:50 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:51 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 6 candidates. +2025-07-26 22:02:51 - newmusic.plex_client - INFO - search_tracks:344 - Found 6 candidates in Stage 1. Exiting early. +2025-07-26 22:02:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'hoax' (ratingKey: 384543) +2025-07-26 22:02:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'hoax' (ratingKey: 384916) +2025-07-26 22:02:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'hoax' (ratingKey: 385060) +2025-07-26 22:02:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'hoax (the long pond studio sessions)' (ratingKey: 384648) +2025-07-26 22:02:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'hoax' (ratingKey: 384665) +2025-07-26 22:02:52 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'hoax' (ratingKey: 384560) +2025-07-26 22:02:52 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:53 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:02:53 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Taylor Swift the lakes - the long pond studio sessions' +2025-07-26 22:02:53 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'the lakes - the long pond studio sessions' +2025-07-26 22:02:54 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Taylor Swift' +2025-07-26 22:02:55 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 4 candidates. +2025-07-26 22:02:55 - newmusic.plex_client - INFO - search_tracks:344 - Found 4 candidates in Stage 1. Exiting early. +2025-07-26 22:02:55 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the lakes (bonus track)' (ratingKey: 385061) +2025-07-26 22:02:55 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the lakes' (ratingKey: 384566) +2025-07-26 22:02:55 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the lakes (the long pond studio sessions)' (ratingKey: 384649) +2025-07-26 22:02:55 - newmusic.plex_client - DEBUG - search_tracks:350 - Stored original track reference for 'the lakes (bonus track)' (ratingKey: 384666) +2025-07-26 22:03:12 - newmusic.spotify_client - INFO - get_artist_albums:452 - Retrieved 0 albums for artist 1gEHdJ4DIEL2JuyRnNfMkt +2025-07-26 22:03:13 - newmusic.spotify_client - INFO - get_artist_albums:452 - Retrieved 33 albums for artist 1gEHdJ4DIEL2JuyRnNfMkt +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Signals from Space', artist='virtual mage' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Signals from Space', artist='' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Fluxx', artist='virtual mage' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Drifting (Instrumental)', artist='virtual mage' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Drifting (Instrumental)', artist='' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='drifting instrumental', artist='virtual mage' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='drifting instrumental', artist='' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Drifting', artist='virtual mage' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Drifting', artist='' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Space Flute', artist='virtual mage' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Fading', artist='virtual mage' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Air Magic', artist='virtual mage' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Just a Dream', artist='virtual mage' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Aether (Slowed & Reverbed)', artist='virtual mage' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='aether slowed reverbed', artist='virtual mage' +2025-07-26 22:03:13 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='aether slowed reverbed', artist='' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Astral Chill (The Present Sound Remix)', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='astral chill the present sound remix', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='astral chill the present sound remix', artist='' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Astral Chill (The Present Sound Remix)', artist='the present sound' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='Astral Chill (The Present Sound Remix)', artist='' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='astral chill the present sound remix', artist='the present sound' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='astral chill the present sound remix', artist='' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Blossom', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Red Desert Heat', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Comet', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='The Hidden Cave', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Liquid Everything', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Into the Mirror', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Strange Landscape', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Wisdom Online', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Waves', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Earth Magic', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Refraction', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Geometry', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Digitized', artist='virtual mage' +2025-07-26 22:03:14 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Fire Magic', artist='virtual mage' +2025-07-26 22:03:15 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Orbit Love (Lofi Edit)', artist='virtual mage' +2025-07-26 22:03:15 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='orbit love lofi edit', artist='virtual mage' +2025-07-26 22:03:15 - newmusic.plex_client - DEBUG - search_albums:526 - Found 0 albums matching query: album='orbit love lofi edit', artist='' +2025-07-26 22:03:15 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='Orbit Love', artist='virtual mage' +2025-07-26 22:03:15 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Cube', artist='virtual mage' +2025-07-26 22:03:15 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='Astral Chill', artist='virtual mage' +2025-07-26 22:03:15 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Temple of Eternity', artist='virtual mage' +2025-07-26 22:03:15 - newmusic.plex_client - DEBUG - search_albums:526 - Found 2 albums matching query: album='Aether', artist='virtual mage' +2025-07-26 22:03:15 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Moondust', artist='virtual mage' +2025-07-26 22:03:15 - newmusic.plex_client - DEBUG - search_albums:526 - Found 4 albums matching query: album='Magic', artist='virtual mage' +2025-07-26 22:03:15 - newmusic.plex_client - DEBUG - search_albums:526 - Found 1 albums matching query: album='Breaking the Dream', artist='virtual mage' +2025-07-26 22:03:19 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Virtual Mage' +2025-07-26 22:03:19 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:03:19 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Virtual Mage Signals from Space' +2025-07-26 22:03:20 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'Signals from Space' +2025-07-26 22:03:21 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Signals from Space' +2025-07-26 22:03:21 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'Signals from Space' +2025-07-26 22:03:22 - newmusic.soulseek_client - INFO - search:551 - Starting search for: 'Virtual Mage Signals from Space' +2025-07-26 22:03:22 - newmusic.soulseek_client - DEBUG - search:561 - Search data: {'searchText': 'Virtual Mage Signals from Space', 'timeout': 35000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-26 22:03:22 - newmusic.soulseek_client - DEBUG - search:562 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-26 22:03:22 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-26 22:03:22 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:22 - newmusic.soulseek_client - DEBUG - _make_request:245 - JSON payload: {'searchText': 'Virtual Mage Signals from Space', 'timeout': 35000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-26 22:03:22 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:22 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: {"fileCount":0,"id":"8d3bbf7d-fd1e-41fc-9637-2dd4125b8791","isComplete":false,"lockedFileCount":0,"responseCount":0,"responses":[],"searchText":"Virtual Mage Signals from Space","startedAt":"2025-07-27T05:03:22.9703856Z","state":"InProgress","token":835}... +2025-07-26 22:03:22 - newmusic.soulseek_client - INFO - search:575 - Search initiated with ID: 8d3bbf7d-fd1e-41fc-9637-2dd4125b8791 +2025-07-26 22:03:22 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 1/35) - elapsed: 0.0s +2025-07-26 22:03:22 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:22 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:23 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:23 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:24 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 2/35) - elapsed: 1.0s +2025-07-26 22:03:24 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:24 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:24 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:24 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:25 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 3/35) - elapsed: 2.0s +2025-07-26 22:03:25 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:25 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:25 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:25 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:26 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 4/35) - elapsed: 3.0s +2025-07-26 22:03:26 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:26 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:27 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:27 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:28 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 5/35) - elapsed: 4.0s +2025-07-26 22:03:28 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:28 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:28 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:28 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:29 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 6/35) - elapsed: 5.0s +2025-07-26 22:03:29 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:29 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:29 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:29 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:30 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 7/35) - elapsed: 6.0s +2025-07-26 22:03:30 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:30 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:30 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:30 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:31 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 8/35) - elapsed: 7.0s +2025-07-26 22:03:31 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:31 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:32 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:32 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:33 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 9/35) - elapsed: 8.0s +2025-07-26 22:03:33 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:33 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:33 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:33 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:34 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 10/35) - elapsed: 9.0s +2025-07-26 22:03:34 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:34 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:34 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:34 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:35 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 11/35) - elapsed: 10.0s +2025-07-26 22:03:35 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:35 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:36 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:36 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:37 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 12/35) - elapsed: 11.0s +2025-07-26 22:03:37 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:37 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:37 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:37 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:38 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 13/35) - elapsed: 12.0s +2025-07-26 22:03:38 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:38 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:38 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:38 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:39 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 14/35) - elapsed: 13.0s +2025-07-26 22:03:39 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:39 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:39 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:39 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:40 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 15/35) - elapsed: 14.0s +2025-07-26 22:03:40 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:40 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:41 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:41 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:42 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 16/35) - elapsed: 15.0s +2025-07-26 22:03:42 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:42 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:42 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:42 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:43 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 17/35) - elapsed: 16.0s +2025-07-26 22:03:43 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:43 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:43 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:43 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:44 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 18/35) - elapsed: 17.0s +2025-07-26 22:03:44 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:44 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:44 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:44 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:45 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 19/35) - elapsed: 18.0s +2025-07-26 22:03:45 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:45 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:46 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:46 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:47 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 20/35) - elapsed: 19.0s +2025-07-26 22:03:47 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:47 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:47 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:47 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:48 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 21/35) - elapsed: 20.0s +2025-07-26 22:03:48 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:48 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:48 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:48 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:49 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 22/35) - elapsed: 21.0s +2025-07-26 22:03:49 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:49 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:50 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:50 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:51 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 23/35) - elapsed: 22.0s +2025-07-26 22:03:51 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:51 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:51 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:51 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:52 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 24/35) - elapsed: 23.0s +2025-07-26 22:03:52 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:52 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:52 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:52 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:53 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 25/35) - elapsed: 24.0s +2025-07-26 22:03:53 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:53 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:53 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:53 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:54 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 26/35) - elapsed: 25.0s +2025-07-26 22:03:54 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:54 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:55 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:55 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:56 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 27/35) - elapsed: 26.0s +2025-07-26 22:03:56 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:56 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:56 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:56 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:57 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 28/35) - elapsed: 27.0s +2025-07-26 22:03:57 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:57 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:57 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:57 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:58 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 29/35) - elapsed: 28.0s +2025-07-26 22:03:58 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:58 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:03:58 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:03:58 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:03:59 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 30/35) - elapsed: 29.0s +2025-07-26 22:03:59 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:03:59 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:00 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:00 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:01 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 31/35) - elapsed: 30.0s +2025-07-26 22:04:01 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:04:01 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:01 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:01 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:02 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 32/35) - elapsed: 31.0s +2025-07-26 22:04:02 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:04:02 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:02 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:02 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:03 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 33/35) - elapsed: 32.0s +2025-07-26 22:04:03 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:04:03 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:04 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:04 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:05 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 34/35) - elapsed: 33.0s +2025-07-26 22:04:05 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:04:05 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:05 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:05 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 35/35) - elapsed: 34.0s +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/8d3bbf7d-fd1e-41fc-9637-2dd4125b8791/responses +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:06 - newmusic.soulseek_client - INFO - search:632 - Search completed. Final results: 0 tracks and 0 albums for query: Virtual Mage Signals from Space +2025-07-26 22:04:06 - newmusic.soulseek_client - INFO - search:551 - Starting search for: 'Signals from Space Virtual' +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - search:561 - Search data: {'searchText': 'Signals from Space Virtual', 'timeout': 35000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - search:562 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - _make_request:245 - JSON payload: {'searchText': 'Signals from Space Virtual', 'timeout': 35000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: {"fileCount":0,"id":"866f9420-255d-4f09-a060-f042edce8406","isComplete":false,"lockedFileCount":0,"responseCount":0,"responses":[],"searchText":"Signals from Space Virtual","startedAt":"2025-07-27T05:04:06.851208Z","state":"InProgress","token":836}... +2025-07-26 22:04:06 - newmusic.soulseek_client - INFO - search:575 - Search initiated with ID: 866f9420-255d-4f09-a060-f042edce8406 +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 1/35) - elapsed: 0.0s +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:06 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:07 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:07 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:08 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 2/35) - elapsed: 1.0s +2025-07-26 22:04:08 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:08 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:08 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:08 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:09 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 3/35) - elapsed: 2.0s +2025-07-26 22:04:09 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:09 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:09 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:09 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:10 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 4/35) - elapsed: 3.0s +2025-07-26 22:04:10 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:10 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:10 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:10 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:11 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 5/35) - elapsed: 4.0s +2025-07-26 22:04:11 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:11 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:12 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:12 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:13 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 6/35) - elapsed: 5.0s +2025-07-26 22:04:13 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:13 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:13 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:13 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:14 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 7/35) - elapsed: 6.0s +2025-07-26 22:04:14 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:14 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:14 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:14 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:15 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 8/35) - elapsed: 7.0s +2025-07-26 22:04:15 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:15 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:16 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:16 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:17 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 9/35) - elapsed: 8.0s +2025-07-26 22:04:17 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:17 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:17 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:17 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:17 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Virtual Mage' +2025-07-26 22:04:17 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:04:17 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Virtual Mage Drifting - Instrumental' +2025-07-26 22:04:18 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 10/35) - elapsed: 9.0s +2025-07-26 22:04:18 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:18 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:18 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'Drifting - Instrumental' +2025-07-26 22:04:18 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:18 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:19 - newmusic.plex_client - DEBUG - search_tracks:332 - Stage 1: Searching for artist 'Virtual Mage' +2025-07-26 22:04:19 - newmusic.plex_client - DEBUG - search_tracks:340 - Stage 1 found 0 candidates. +2025-07-26 22:04:19 - newmusic.plex_client - DEBUG - search_tracks:357 - Stage 2: Performing keyword search for 'Virtual Mage Drifting' +2025-07-26 22:04:19 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 11/35) - elapsed: 10.0s +2025-07-26 22:04:19 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:19 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:19 - newmusic.plex_client - DEBUG - search_tracks:375 - Stage 3: Performing title-only search for 'Drifting' +2025-07-26 22:04:19 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:19 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:20 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 12/35) - elapsed: 11.0s +2025-07-26 22:04:20 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:20 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Drifting (Intro)' (ratingKey: 264989) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Island Drifting' (ratingKey: 198904) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'STOP DRIFTING!' (ratingKey: 323389) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'STOP DRIFTING! (Instrumental)' (ratingKey: 323402) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'STOP DRIFTING!' (ratingKey: 322907) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'STOP DRIFTING! (Instrumental)' (ratingKey: 322910) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Bubbles Drifting in the Morning Breeze' (ratingKey: 281418) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Drifting (Original Mix)' (ratingKey: 274102) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Drifting' (ratingKey: 273084) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Drifting' (ratingKey: 271735) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'Drifting (Extended Mix)' (ratingKey: 271736) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'drifting' (ratingKey: 259864) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'drifting (sped up)' (ratingKey: 259865) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'drifting (slowed + reverb)' (ratingKey: 259866) +2025-07-26 22:04:21 - newmusic.plex_client - DEBUG - search_tracks:385 - Stored original track reference for 'drifting' (ratingKey: 270651) +2025-07-26 22:04:21 - newmusic.plex_client - INFO - search_tracks:390 - Found 15 total potential matches for 'Drifting' by 'Virtual Mage' after all stages. +2025-07-26 22:04:21 - newmusic.soulseek_client - INFO - search:551 - Starting search for: 'Virtual Mage Drifting - Instrumental' +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - search:561 - Search data: {'searchText': 'Virtual Mage Drifting - Instrumental', 'timeout': 35000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - search:562 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - _make_request:245 - JSON payload: {'searchText': 'Virtual Mage Drifting - Instrumental', 'timeout': 35000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: {"fileCount":0,"id":"2444a68a-d7b0-457e-9e2f-d1d4bcae17d8","isComplete":false,"lockedFileCount":0,"responseCount":0,"responses":[],"searchText":"Virtual Mage Drifting - Instrumental","startedAt":"2025-07-27T05:04:21.3996474Z","state":"InProgress","token":837}... +2025-07-26 22:04:21 - newmusic.soulseek_client - INFO - search:575 - Search initiated with ID: 2444a68a-d7b0-457e-9e2f-d1d4bcae17d8 +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 1/35) - elapsed: 0.0s +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:21 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:22 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 13/35) - elapsed: 12.0s +2025-07-26 22:04:22 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:22 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:22 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:22 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:22 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 2/35) - elapsed: 1.0s +2025-07-26 22:04:22 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:22 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:22 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:22 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:23 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 14/35) - elapsed: 13.0s +2025-07-26 22:04:23 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:23 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:23 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:23 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:23 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 3/35) - elapsed: 2.0s +2025-07-26 22:04:23 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:23 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:24 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:24 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:24 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 15/35) - elapsed: 14.0s +2025-07-26 22:04:24 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:24 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:24 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:24 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:25 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 4/35) - elapsed: 3.0s +2025-07-26 22:04:25 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:25 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:25 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:25 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:25 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 16/35) - elapsed: 15.0s +2025-07-26 22:04:25 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:25 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:26 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:26 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:26 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 5/35) - elapsed: 4.0s +2025-07-26 22:04:26 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:26 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:26 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:26 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:27 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 17/35) - elapsed: 16.0s +2025-07-26 22:04:27 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:27 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:27 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:27 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:27 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 6/35) - elapsed: 5.0s +2025-07-26 22:04:27 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:27 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:28 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:28 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:28 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 18/35) - elapsed: 17.0s +2025-07-26 22:04:28 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:28 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:28 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:28 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:29 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 7/35) - elapsed: 6.0s +2025-07-26 22:04:29 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:29 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:29 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:29 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:29 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 19/35) - elapsed: 18.0s +2025-07-26 22:04:29 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:29 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:30 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:30 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:30 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 8/35) - elapsed: 7.0s +2025-07-26 22:04:30 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:30 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:30 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:30 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:31 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 20/35) - elapsed: 19.0s +2025-07-26 22:04:31 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:31 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:31 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:31 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:31 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 9/35) - elapsed: 8.0s +2025-07-26 22:04:31 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:31 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:31 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:31 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:32 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 21/35) - elapsed: 20.0s +2025-07-26 22:04:32 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:32 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:32 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:32 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:32 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 10/35) - elapsed: 9.0s +2025-07-26 22:04:32 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:32 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:33 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:33 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:33 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 22/35) - elapsed: 21.0s +2025-07-26 22:04:33 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:33 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:33 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:33 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:34 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 11/35) - elapsed: 10.0s +2025-07-26 22:04:34 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:34 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:34 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:34 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:34 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 23/35) - elapsed: 22.0s +2025-07-26 22:04:34 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:34 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:35 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:35 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:35 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 12/35) - elapsed: 11.0s +2025-07-26 22:04:35 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:35 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:35 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:35 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:36 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 24/35) - elapsed: 23.0s +2025-07-26 22:04:36 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:36 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:36 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:36 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:36 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 13/35) - elapsed: 12.0s +2025-07-26 22:04:36 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:36 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:36 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:36 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:37 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 25/35) - elapsed: 24.0s +2025-07-26 22:04:37 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:37 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:37 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:37 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:37 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 14/35) - elapsed: 13.0s +2025-07-26 22:04:37 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:37 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:38 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:38 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:38 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 26/35) - elapsed: 25.0s +2025-07-26 22:04:38 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:38 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:38 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:38 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:39 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 15/35) - elapsed: 14.0s +2025-07-26 22:04:39 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:39 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:39 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:39 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:39 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 27/35) - elapsed: 26.0s +2025-07-26 22:04:39 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:39 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:40 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:40 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:40 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 16/35) - elapsed: 15.0s +2025-07-26 22:04:40 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:40 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:40 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:40 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:41 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 28/35) - elapsed: 27.0s +2025-07-26 22:04:41 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:41 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:41 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:41 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:41 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 17/35) - elapsed: 16.0s +2025-07-26 22:04:41 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:41 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:42 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:42 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:42 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 29/35) - elapsed: 28.0s +2025-07-26 22:04:42 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:42 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:42 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:42 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:43 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 18/35) - elapsed: 17.0s +2025-07-26 22:04:43 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:43 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:43 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:43 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:43 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 30/35) - elapsed: 29.0s +2025-07-26 22:04:43 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:43 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:44 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:44 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:44 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 19/35) - elapsed: 18.0s +2025-07-26 22:04:44 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:44 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:44 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:44 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:45 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 31/35) - elapsed: 30.0s +2025-07-26 22:04:45 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:45 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:45 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:45 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:45 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 20/35) - elapsed: 19.0s +2025-07-26 22:04:45 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:45 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:45 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:45 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:46 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 32/35) - elapsed: 31.0s +2025-07-26 22:04:46 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:46 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:46 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:46 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:46 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 21/35) - elapsed: 20.0s +2025-07-26 22:04:46 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:46 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:47 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:47 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:47 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 33/35) - elapsed: 32.0s +2025-07-26 22:04:47 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:47 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:47 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:47 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:48 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 22/35) - elapsed: 21.0s +2025-07-26 22:04:48 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:48 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:48 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:48 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:48 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 34/35) - elapsed: 33.0s +2025-07-26 22:04:48 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:48 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:49 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:49 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:49 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 23/35) - elapsed: 22.0s +2025-07-26 22:04:49 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:49 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:49 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:49 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 35/35) - elapsed: 34.0s +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/866f9420-255d-4f09-a060-f042edce8406/responses +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:50 - newmusic.soulseek_client - INFO - search:632 - Search completed. Final results: 0 tracks and 0 albums for query: Signals from Space Virtual +2025-07-26 22:04:50 - newmusic.soulseek_client - INFO - search:551 - Starting search for: 'Signals from Space' +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - search:561 - Search data: {'searchText': 'Signals from Space', 'timeout': 35000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - search:562 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:245 - JSON payload: {'searchText': 'Signals from Space', 'timeout': 35000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 24/35) - elapsed: 23.0s +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: {"fileCount":0,"id":"c6bc7428-65ec-4f0f-905f-1acb26e6896b","isComplete":false,"lockedFileCount":0,"responseCount":0,"responses":[],"searchText":"Signals from Space","startedAt":"2025-07-27T05:04:50.7028256Z","state":"InProgress","token":838}... +2025-07-26 22:04:50 - newmusic.soulseek_client - INFO - search:575 - Search initiated with ID: c6bc7428-65ec-4f0f-905f-1acb26e6896b +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 1/35) - elapsed: 0.0s +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/c6bc7428-65ec-4f0f-905f-1acb26e6896b/responses +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:50 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:51 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 25/35) - elapsed: 24.0s +2025-07-26 22:04:51 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:51 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:51 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 2/35) - elapsed: 1.0s +2025-07-26 22:04:51 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/c6bc7428-65ec-4f0f-905f-1acb26e6896b/responses +2025-07-26 22:04:51 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:52 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:52 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:52 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:52 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:53 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 26/35) - elapsed: 25.0s +2025-07-26 22:04:53 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:53 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:53 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 3/35) - elapsed: 2.0s +2025-07-26 22:04:53 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/c6bc7428-65ec-4f0f-905f-1acb26e6896b/responses +2025-07-26 22:04:53 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:53 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:53 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:53 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:53 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:54 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 27/35) - elapsed: 26.0s +2025-07-26 22:04:54 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:54 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:54 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 4/35) - elapsed: 3.0s +2025-07-26 22:04:54 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/c6bc7428-65ec-4f0f-905f-1acb26e6896b/responses +2025-07-26 22:04:54 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:54 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:54 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:54 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:54 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:55 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 28/35) - elapsed: 27.0s +2025-07-26 22:04:55 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:55 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:55 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 5/35) - elapsed: 4.0s +2025-07-26 22:04:55 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/c6bc7428-65ec-4f0f-905f-1acb26e6896b/responses +2025-07-26 22:04:55 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:56 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:56 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:56 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:56 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:57 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 29/35) - elapsed: 28.0s +2025-07-26 22:04:57 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:57 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:57 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 6/35) - elapsed: 5.0s +2025-07-26 22:04:57 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/c6bc7428-65ec-4f0f-905f-1acb26e6896b/responses +2025-07-26 22:04:57 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:57 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:57 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:57 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:57 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:58 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 30/35) - elapsed: 29.0s +2025-07-26 22:04:58 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/2444a68a-d7b0-457e-9e2f-d1d4bcae17d8/responses +2025-07-26 22:04:58 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:58 - newmusic.soulseek_client - DEBUG - search:585 - Polling for results (attempt 7/35) - elapsed: 6.0s +2025-07-26 22:04:58 - newmusic.soulseek_client - DEBUG - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches/c6bc7428-65ec-4f0f-905f-1acb26e6896b/responses +2025-07-26 22:04:58 - newmusic.soulseek_client - DEBUG - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-26 22:04:58 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:58 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... +2025-07-26 22:04:58 - newmusic.soulseek_client - DEBUG - _make_request:254 - Response status: 200 +2025-07-26 22:04:58 - newmusic.soulseek_client - DEBUG - _make_request:255 - Response text: []... diff --git a/ui/pages/__pycache__/artists.cpython-312.pyc b/ui/pages/__pycache__/artists.cpython-312.pyc index dcc2771d038ed1a182de9853cfe65e72320676a2..f6f194db121276468320a1a63a60df574f2b192e 100644 GIT binary patch delta 58601 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�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 g7k;hxm{mtFy%l_AZf2rX1f69N1ApigX diff --git a/ui/pages/artists.py b/ui/pages/artists.py index 8aee8386..20960496 100644 --- a/ui/pages/artists.py +++ b/ui/pages/artists.py @@ -1,13 +1,15 @@ from PyQt6.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLabel, QFrame, QPushButton, QLineEdit, QScrollArea, QGridLayout, QSizePolicy, QSpacerItem, QApplication, - QDialog, QDialogButtonBox, QProgressBar, QMessageBox) + QDialog, QDialogButtonBox, QProgressBar, QMessageBox, + QTableWidget, QTableWidgetItem, QHeaderView, QAbstractItemView) from PyQt6.QtCore import Qt, QTimer, pyqtSignal, QThread, QObject, QRunnable, QThreadPool, QPropertyAnimation, QEasingCurve, QRect from PyQt6.QtGui import QFont, QPixmap, QPainter, QPen, QColor import functools import os import threading import requests +import re from typing import List, Optional from dataclasses import dataclass @@ -1247,6 +1249,927 @@ class AlbumCard(QFrame): self.download_requested.emit(self.album) super().mousePressEvent(event) +class DownloadMissingAlbumTracksModal(QDialog): + """Enhanced modal for downloading missing album tracks with live progress tracking""" + process_finished = pyqtSignal() + + def __init__(self, album, album_card, parent_page, downloads_page, plex_client): + super().__init__(parent_page) + self.album = album + self.album_card = album_card + self.parent_page = parent_page + self.downloads_page = downloads_page + self.plex_client = plex_client + self.matching_engine = MusicMatchingEngine() + + # State tracking + self.total_tracks = len(album.tracks) + self.matched_tracks_count = 0 + self.tracks_to_download_count = 0 + self.downloaded_tracks_count = 0 + self.analysis_complete = False + + # Initialize attributes to prevent crash on close + self.download_in_progress = False + self.cancel_requested = False + self.permanently_failed_tracks = [] + + print(f"📊 Total album tracks: {self.total_tracks}") + + # Track analysis results + self.analysis_results = [] + self.missing_tracks = [] + + # Worker tracking + self.active_workers = [] + self.fallback_pools = [] + + # Status Polling + self.download_status_pool = QThreadPool() + self.download_status_pool.setMaxThreadCount(1) + self._is_status_update_running = False + + self.download_status_timer = QTimer(self) + self.download_status_timer.timeout.connect(self.poll_all_download_statuses) + self.download_status_timer.start(2000) + + self.active_downloads = [] + + print("🎨 Setting up album modal UI...") + self.setup_ui() + print("✅ Album modal initialization complete") + + def generate_smart_search_queries(self, artist_name, track_name): + """Generate multiple search query variations for better matching""" + queries = [] + + # Step 1: Use the original, full track name + if artist_name: + # Attempt 1: Full Artist + Full Track Name + queries.append(f"{artist_name} {track_name}".strip()) + + # Attempt 2: Full Track Name + First Word of Artist + artist_words = artist_name.split() + if artist_words: + first_word = artist_words[0] + if first_word.lower() == 'the' and len(artist_words) > 1: + first_word = artist_words[1] + + if len(first_word) > 1: + queries.append(f"{track_name} {first_word}".strip()) + + # Attempt 3: Full Track Name only + queries.append(track_name.strip()) + + # Step 2: Clean the track name for the final fallback + cleaned_name = re.sub(r'\s*\([^)]*\)', '', track_name).strip() + cleaned_name = re.sub(r'\s*\[[^\]]*\]', '', cleaned_name).strip() + + # Attempt 4: Cleaned Track Name only (if different from original) + if cleaned_name and cleaned_name.lower() != track_name.lower(): + queries.append(cleaned_name.strip()) + + # Remove duplicates while preserving order + unique_queries = [] + for query in queries: + if query and query not in unique_queries: + unique_queries.append(query) + + print(f"🧠 Generated {len(unique_queries)} smart queries for '{track_name}'. Sequence: {unique_queries}") + return unique_queries + + def setup_ui(self): + """Set up the enhanced modal UI""" + self.setWindowTitle(f"Download Missing Tracks - {self.album.name}") + self.resize(1200, 900) + self.setWindowFlags(Qt.WindowType.Window) + + self.setStyleSheet(""" + QDialog { background-color: #1e1e1e; color: #ffffff; } + QLabel { color: #ffffff; } + QPushButton { + background-color: #1db954; color: #000000; border: none; + border-radius: 6px; font-size: 13px; font-weight: bold; + padding: 10px 20px; min-width: 100px; + } + QPushButton:hover { background-color: #1ed760; } + QPushButton:disabled { background-color: #404040; color: #888888; } + """) + + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(25, 25, 25, 25) + main_layout.setSpacing(15) + + top_section = self.create_compact_top_section() + main_layout.addWidget(top_section) + + progress_section = self.create_progress_section() + main_layout.addWidget(progress_section) + + table_section = self.create_track_table() + main_layout.addWidget(table_section, stretch=1) + + button_section = self.create_buttons() + main_layout.addWidget(button_section) + + def create_compact_top_section(self): + """Create compact top section with header and dashboard combined""" + top_frame = QFrame() + top_frame.setStyleSheet(""" + QFrame { + background-color: #2d2d2d; border: 1px solid #444444; + border-radius: 8px; padding: 15px; + } + """) + + layout = QVBoxLayout(top_frame) + layout.setSpacing(15) + + header_layout = QHBoxLayout() + title_section = QVBoxLayout() + title_section.setSpacing(2) + + title = QLabel("Download Missing Album Tracks") + title.setFont(QFont("Arial", 16, QFont.Weight.Bold)) + title.setStyleSheet("color: #1db954;") + + subtitle = QLabel(f"Album: {self.album.name} by {', '.join(self.album.artists)}") + subtitle.setFont(QFont("Arial", 11)) + subtitle.setStyleSheet("color: #aaaaaa;") + + title_section.addWidget(title) + title_section.addWidget(subtitle) + + dashboard_layout = QHBoxLayout() + dashboard_layout.setSpacing(20) + + self.total_card = self.create_compact_counter_card("📀 Total", str(self.total_tracks), "#1db954") + self.matched_card = self.create_compact_counter_card("✅ Found", "0", "#4CAF50") + self.download_card = self.create_compact_counter_card("⬇️ Missing", "0", "#ff6b6b") + self.downloaded_card = self.create_compact_counter_card("✅ Downloaded", "0", "#4CAF50") + + dashboard_layout.addWidget(self.total_card) + dashboard_layout.addWidget(self.matched_card) + dashboard_layout.addWidget(self.download_card) + dashboard_layout.addWidget(self.downloaded_card) + dashboard_layout.addStretch() + + header_layout.addLayout(title_section) + header_layout.addStretch() + header_layout.addLayout(dashboard_layout) + + layout.addLayout(header_layout) + return top_frame + + def create_compact_counter_card(self, title, count, color): + """Create a compact counter card widget""" + card = QFrame() + card.setStyleSheet(f""" + QFrame {{ + background-color: #3a3a3a; border: 2px solid {color}; + border-radius: 6px; padding: 8px 12px; min-width: 80px; + }} + """) + + layout = QVBoxLayout(card) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(2) + + count_label = QLabel(count) + count_label.setFont(QFont("Arial", 16, QFont.Weight.Bold)) + count_label.setStyleSheet(f"color: {color}; background: transparent;") + count_label.setAlignment(Qt.AlignmentFlag.AlignCenter) + + title_label = QLabel(title) + title_label.setFont(QFont("Arial", 9)) + title_label.setStyleSheet("color: #cccccc; background: transparent;") + title_label.setAlignment(Qt.AlignmentFlag.AlignCenter) + + layout.addWidget(count_label) + layout.addWidget(title_label) + + if "Total" in title: self.total_count_label = count_label + elif "Found" in title: self.matched_count_label = count_label + elif "Missing" in title: self.download_count_label = count_label + elif "Downloaded" in title: self.downloaded_count_label = count_label + + return card + + def create_progress_section(self): + """Create compact dual progress bar section""" + progress_frame = QFrame() + progress_frame.setStyleSheet(""" + QFrame { + background-color: #2d2d2d; border: 1px solid #444444; + border-radius: 8px; padding: 12px; + } + """) + + layout = QVBoxLayout(progress_frame) + layout.setSpacing(8) + + analysis_container = QVBoxLayout() + analysis_container.setSpacing(4) + + analysis_label = QLabel("🔍 Plex Analysis") + analysis_label.setFont(QFont("Arial", 11, QFont.Weight.Bold)) + analysis_label.setStyleSheet("color: #cccccc;") + + self.analysis_progress = QProgressBar() + self.analysis_progress.setFixedHeight(20) + self.analysis_progress.setStyleSheet(""" + QProgressBar { + border: 1px solid #555555; border-radius: 10px; text-align: center; + background-color: #444444; color: #ffffff; font-size: 11px; font-weight: bold; + } + QProgressBar::chunk { background-color: #1db954; border-radius: 9px; } + """) + self.analysis_progress.setVisible(False) + + analysis_container.addWidget(analysis_label) + analysis_container.addWidget(self.analysis_progress) + + download_container = QVBoxLayout() + download_container.setSpacing(4) + + download_label = QLabel("⬇️ Download Progress") + download_label.setFont(QFont("Arial", 11, QFont.Weight.Bold)) + download_label.setStyleSheet("color: #cccccc;") + + self.download_progress = QProgressBar() + self.download_progress.setFixedHeight(20) + self.download_progress.setStyleSheet(""" + QProgressBar { + border: 1px solid #555555; border-radius: 10px; text-align: center; + background-color: #444444; color: #ffffff; font-size: 11px; font-weight: bold; + } + QProgressBar::chunk { background-color: #ff6b6b; border-radius: 9px; } + """) + self.download_progress.setVisible(False) + + download_container.addWidget(download_label) + download_container.addWidget(self.download_progress) + + layout.addLayout(analysis_container) + layout.addLayout(download_container) + + return progress_frame + + def create_track_table(self): + """Create enhanced track table""" + table_frame = QFrame() + table_frame.setStyleSheet(""" + QFrame { + background-color: #2d2d2d; border: 1px solid #444444; + border-radius: 8px; padding: 0px; + } + """) + + layout = QVBoxLayout(table_frame) + layout.setContentsMargins(15, 15, 15, 15) + layout.setSpacing(10) + + header_label = QLabel("📋 Album Track Analysis") + header_label.setFont(QFont("Arial", 13, QFont.Weight.Bold)) + header_label.setStyleSheet("color: #ffffff; padding: 5px;") + + self.track_table = QTableWidget() + self.track_table.setColumnCount(5) + self.track_table.setHorizontalHeaderLabels(["Track", "Artist", "Duration", "Matched", "Status"]) + self.track_table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch) + self.track_table.horizontalHeader().setSectionResizeMode(2, QHeaderView.ResizeMode.Interactive) + self.track_table.horizontalHeader().setSectionResizeMode(3, QHeaderView.ResizeMode.Interactive) + self.track_table.setColumnWidth(2, 90) + self.track_table.setColumnWidth(3, 140) + + self.track_table.setStyleSheet(""" + QTableWidget { + background-color: #3a3a3a; alternate-background-color: #424242; + selection-background-color: #1db954; selection-color: #000000; + gridline-color: #555555; color: #ffffff; border: 1px solid #555555; + font-size: 12px; + } + QHeaderView::section { + background-color: #1db954; color: #000000; font-weight: bold; + font-size: 13px; padding: 12px 8px; border: none; + } + QTableWidget::item { padding: 12px 8px; border-bottom: 1px solid #4a4a4a; } + """) + + self.track_table.setAlternatingRowColors(True) + self.track_table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows) + self.track_table.verticalHeader().setDefaultSectionSize(35) + self.track_table.verticalHeader().setVisible(False) + + self.populate_track_table() + + layout.addWidget(header_label) + layout.addWidget(self.track_table) + + return table_frame + + def populate_track_table(self): + """Populate track table with album tracks""" + self.track_table.setRowCount(len(self.album.tracks)) + for i, track in enumerate(self.album.tracks): + self.track_table.setItem(i, 0, QTableWidgetItem(track.name)) + artist_name = track.artists[0] if track.artists else "Unknown" + self.track_table.setItem(i, 1, QTableWidgetItem(artist_name)) + duration = self.format_duration(track.duration_ms) + duration_item = QTableWidgetItem(duration) + duration_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.track_table.setItem(i, 2, duration_item) + matched_item = QTableWidgetItem("⏳ Pending") + matched_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.track_table.setItem(i, 3, matched_item) + status_item = QTableWidgetItem("—") + status_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.track_table.setItem(i, 4, status_item) + for col in range(5): + self.track_table.item(i, col).setFlags(self.track_table.item(i, col).flags() & ~Qt.ItemFlag.ItemIsEditable) + + def format_duration(self, duration_ms): + """Convert milliseconds to MM:SS format""" + seconds = duration_ms // 1000 + return f"{seconds // 60}:{seconds % 60:02d}" + + def create_buttons(self): + """Create improved button section""" + button_frame = QFrame(styleSheet="background-color: transparent; padding: 10px;") + layout = QHBoxLayout(button_frame) + layout.setSpacing(15) + layout.setContentsMargins(0, 10, 0, 0) + + self.correct_failed_btn = QPushButton("🔧 Correct Failed Matches") + self.correct_failed_btn.setFixedWidth(220) + self.correct_failed_btn.setStyleSheet(""" + QPushButton { background-color: #ffc107; color: #000000; border-radius: 20px; font-weight: bold; } + QPushButton:hover { background-color: #ffca28; } + """) + self.correct_failed_btn.clicked.connect(self.on_correct_failed_matches_clicked) + self.correct_failed_btn.hide() + + self.begin_search_btn = QPushButton("Begin Search") + self.begin_search_btn.setFixedSize(160, 40) + self.begin_search_btn.setStyleSheet(""" + QPushButton { + background-color: #1db954; color: #000000; border: none; + border-radius: 20px; font-size: 14px; font-weight: bold; + } + QPushButton:hover { background-color: #1ed760; } + """) + self.begin_search_btn.clicked.connect(self.on_begin_search_clicked) + + self.cancel_btn = QPushButton("Cancel") + self.cancel_btn.setFixedSize(110, 40) + self.cancel_btn.setStyleSheet(""" + QPushButton { background-color: #d32f2f; color: #ffffff; border-radius: 20px;} + QPushButton:hover { background-color: #f44336; } + """) + self.cancel_btn.clicked.connect(self.on_cancel_clicked) + self.cancel_btn.hide() + + self.close_btn = QPushButton("Close") + self.close_btn.setFixedSize(110, 40) + self.close_btn.setStyleSheet(""" + QPushButton { background-color: #616161; color: #ffffff; border-radius: 20px;} + QPushButton:hover { background-color: #757575; } + """) + self.close_btn.clicked.connect(self.on_close_clicked) + + layout.addStretch() + layout.addWidget(self.begin_search_btn) + layout.addWidget(self.cancel_btn) + layout.addWidget(self.correct_failed_btn) + layout.addWidget(self.close_btn) + + return button_frame + + def on_begin_search_clicked(self): + """Handle Begin Search button click - starts Plex analysis""" + # Trigger UI updates on album card + if self.album_card: + self.album_card.set_download_in_progress() + + self.begin_search_btn.hide() + self.cancel_btn.show() + self.analysis_progress.setVisible(True) + self.analysis_progress.setMaximum(self.total_tracks) + self.analysis_progress.setValue(0) + self.download_in_progress = True + self.start_plex_analysis() + + def start_plex_analysis(self): + """Start Plex analysis for album tracks""" + from ui.pages.sync import PlaylistTrackAnalysisWorker + worker = PlaylistTrackAnalysisWorker(self.album.tracks, self.plex_client) + worker.signals.analysis_started.connect(self.on_analysis_started) + worker.signals.track_analyzed.connect(self.on_track_analyzed) + worker.signals.analysis_completed.connect(self.on_analysis_completed) + worker.signals.analysis_failed.connect(self.on_analysis_failed) + self.active_workers.append(worker) + QThreadPool.globalInstance().start(worker) + + def on_analysis_started(self, total_tracks): + print(f"🔍 Album analysis started for {total_tracks} tracks") + + def on_track_analyzed(self, track_index, result): + """Handle individual track analysis completion with live UI updates""" + self.analysis_progress.setValue(track_index) + if result.exists_in_plex: + matched_text = f"✅ Found ({result.confidence:.1f})" + self.matched_tracks_count += 1 + self.matched_count_label.setText(str(self.matched_tracks_count)) + else: + matched_text = "❌ Missing" + self.tracks_to_download_count += 1 + self.download_count_label.setText(str(self.tracks_to_download_count)) + self.track_table.setItem(track_index - 1, 3, QTableWidgetItem(matched_text)) + + def on_analysis_completed(self, results): + """Handle analysis completion""" + self.analysis_complete = True + self.analysis_results = results + self.missing_tracks = [r for r in results if not r.exists_in_plex] + print(f"✅ Album analysis complete: {len(self.missing_tracks)} to download") + if self.missing_tracks: + self.start_download_progress() + else: + self.download_in_progress = False + self.cancel_btn.hide() + self.process_finished.emit() + QMessageBox.information(self, "Analysis Complete", "All album tracks already exist in Plex! No downloads needed.") + + def on_analysis_failed(self, error_message): + print(f"❌ Album analysis failed: {error_message}") + QMessageBox.critical(self, "Analysis Failed", f"Failed to analyze album tracks: {error_message}") + self.cancel_btn.hide() + self.begin_search_btn.show() + + def start_download_progress(self): + """Start actual download progress tracking""" + self.download_progress.setVisible(True) + self.download_progress.setMaximum(len(self.missing_tracks)) + self.download_progress.setValue(0) + self.start_parallel_downloads() + + def start_parallel_downloads(self): + """Start multiple track downloads in parallel for better performance""" + self.active_parallel_downloads = 0 + self.download_queue_index = 0 + self.failed_downloads = 0 + self.completed_downloads = 0 + self.successful_downloads = 0 + self.start_next_batch_of_downloads() + + def start_next_batch_of_downloads(self, max_concurrent=3): + """Start the next batch of downloads up to the concurrent limit""" + while (self.active_parallel_downloads < max_concurrent and + self.download_queue_index < len(self.missing_tracks)): + track_result = self.missing_tracks[self.download_queue_index] + track = track_result.spotify_track + track_index = self.find_track_index_in_album(track) + self.track_table.setItem(track_index, 4, QTableWidgetItem("🔍 Searching...")) + self.search_and_download_track_parallel(track, self.download_queue_index, track_index) + self.active_parallel_downloads += 1 + self.download_queue_index += 1 + + if (self.download_queue_index >= len(self.missing_tracks) and self.active_parallel_downloads == 0): + self.on_all_downloads_complete() + + def search_and_download_track_parallel(self, spotify_track, download_index, track_index): + """Search for track and download via infrastructure path - PARALLEL VERSION""" + artist_name = spotify_track.artists[0] if spotify_track.artists else "" + search_queries = self.generate_smart_search_queries(artist_name, spotify_track.name) + self.start_track_search_with_queries_parallel(spotify_track, search_queries, track_index, track_index, download_index) + + def start_track_search_with_queries_parallel(self, spotify_track, search_queries, track_index, table_index, download_index): + """Start track search with parallel completion handling""" + if not hasattr(self, 'parallel_search_tracking'): + self.parallel_search_tracking = {} + + self.parallel_search_tracking[download_index] = { + 'spotify_track': spotify_track, 'track_index': track_index, + 'table_index': table_index, 'download_index': download_index, + 'completed': False, 'used_sources': set(), 'candidates': [], 'retry_count': 0 + } + self.start_search_worker_parallel(search_queries, spotify_track, track_index, table_index, 0, download_index) + + def start_search_worker_parallel(self, queries, spotify_track, track_index, table_index, query_index, download_index): + """Start search worker with parallel completion handling.""" + if query_index >= len(queries): + self.on_parallel_track_failed(download_index, "All search strategies failed") + return + + query = queries[query_index] + worker = self.ParallelSearchWorker(self.parent_page.soulseek_client, query) + + worker.signals.search_completed.connect( + lambda r, q: self.on_search_query_completed_parallel(r, queries, spotify_track, track_index, table_index, query_index, q, download_index) + ) + worker.signals.search_failed.connect( + lambda q, e: self.on_search_query_completed_parallel([], queries, spotify_track, track_index, table_index, query_index, q, download_index) + ) + QThreadPool.globalInstance().start(worker) + + def on_search_query_completed_parallel(self, results, queries, spotify_track, track_index, table_index, query_index, query, download_index): + """Handle completion of a parallel search query. If it fails, trigger the next query.""" + if hasattr(self, 'cancel_requested') and self.cancel_requested: return + + valid_candidates = self.get_valid_candidates(results, spotify_track, query) + + if valid_candidates: + # Cache the candidates for future retries + self.parallel_search_tracking[download_index]['candidates'] = valid_candidates + best_match = valid_candidates[0] + self.start_validated_download_parallel(best_match, spotify_track, track_index, table_index, download_index) + return + + next_query_index = query_index + 1 + if next_query_index < len(queries): + self.start_search_worker_parallel(queries, spotify_track, track_index, table_index, next_query_index, download_index) + else: + self.on_parallel_track_failed(download_index, f"No valid results after trying all {len(queries)} queries.") + + def start_validated_download_parallel(self, slskd_result, spotify_metadata, track_index, table_index, download_index): + """Start download with validated metadata""" + track_info = self.parallel_search_tracking[download_index] + + # Reset state if this track was previously marked as completed (for retries) + if track_info.get('completed', False): + print(f"🔄 Resetting state for manually retried track (index: {download_index}).") + track_info['completed'] = False + + if self.failed_downloads > 0: + self.failed_downloads -= 1 + + self.active_parallel_downloads += 1 + + if self.completed_downloads > 0: + self.completed_downloads -= 1 + + # Add the new download source to used sources to prevent retrying with same user/file + source_key = f"{getattr(slskd_result, 'username', 'unknown')}_{slskd_result.filename}" + track_info['used_sources'].add(source_key) + + # Update UI to show the new download has been queued + spotify_based_result = self.create_spotify_based_search_result_from_validation(slskd_result, spotify_metadata) + self.track_table.setItem(table_index, 4, QTableWidgetItem("... Queued")) + + # Start the actual download process + self.start_matched_download_via_infrastructure_parallel(spotify_based_result, track_index, table_index, download_index) + + def start_matched_download_via_infrastructure_parallel(self, spotify_based_result, track_index, table_index, download_index): + """Start infrastructure download with parallel completion tracking""" + try: + artist = type('Artist', (), {'name': spotify_based_result.artist})() + download_item = self.downloads_page._start_download_with_artist(spotify_based_result, artist) + + if download_item: + self.active_downloads.append({ + 'download_index': download_index, 'track_index': track_index, + 'table_index': table_index, 'download_id': download_item.download_id, + 'slskd_result': spotify_based_result, 'candidates': self.parallel_search_tracking[download_index]['candidates'] + }) + else: + self.on_parallel_track_failed(download_index, "Failed to start download") + except Exception as e: + self.on_parallel_track_failed(download_index, str(e)) + + def poll_all_download_statuses(self): + """Poll download statuses for active downloads""" + if self._is_status_update_running or not self.active_downloads: + return + self._is_status_update_running = True + + # Create a snapshot of data needed by the worker thread + items_to_check = [] + for d in self.active_downloads: + if d.get('slskd_result') and hasattr(d['slskd_result'], 'filename'): + items_to_check.append({ + 'widget_id': d['download_index'], + 'download_id': d.get('download_id'), + 'file_path': d['slskd_result'].filename, + 'api_missing_count': d.get('api_missing_count', 0) + }) + + if not items_to_check: + self._is_status_update_running = False + return + + # Import the worker from sync.py + from ui.pages.sync import SyncStatusProcessingWorker + worker = SyncStatusProcessingWorker( + self.parent_page.soulseek_client, + items_to_check + ) + + worker.signals.completed.connect(self._handle_processed_status_updates) + worker.signals.error.connect(lambda e: print(f"Album Status Worker Error: {e}")) + self.download_status_pool.start(worker) + + def _handle_processed_status_updates(self, results): + """Handle status updates from the background worker and trigger retry logic""" + import time + + # Create a lookup for faster access to active download items + active_downloads_map = {d['download_index']: d for d in self.active_downloads} + + for result in results: + download_index = result['widget_id'] + new_status = result['status'] + + download_info = active_downloads_map.get(download_index) + if not download_info: + continue + + # Update the main download_info object with the latest missing count + if 'api_missing_count' in result: + download_info['api_missing_count'] = result['api_missing_count'] + + # Update the download_id if the worker found a match by filename + if result.get('transfer_id') and download_info.get('download_id') != result['transfer_id']: + print(f"ℹ️ Corrected download ID for '{download_info['slskd_result'].filename}'") + download_info['download_id'] = result['transfer_id'] + + # Handle terminal states (completed, failed, cancelled) + if new_status in ['failed', 'cancelled']: + if download_info in self.active_downloads: + self.active_downloads.remove(download_info) + self.retry_parallel_download_with_fallback(download_info) + + elif new_status == 'completed': + if download_info in self.active_downloads: + self.active_downloads.remove(download_info) + self.on_parallel_track_completed(download_index, success=True) + + # Handle transient states (downloading, queued) + elif new_status == 'downloading': + progress = result.get('progress', 0) + self.track_table.setItem(download_info['table_index'], 4, QTableWidgetItem(f"⏬ Downloading ({progress}%)")) + + # Reset queue timer if it exists + if 'queued_start_time' in download_info: + del download_info['queued_start_time'] + + # Add timeout for downloads stuck at 0% + if progress < 1: + if 'downloading_start_time' not in download_info: + download_info['downloading_start_time'] = time.time() + # 90-second timeout for being stuck at 0% + elif time.time() - download_info['downloading_start_time'] > 90: + print(f"⚠️ Download for '{download_info['slskd_result'].filename}' is stuck at 0%. Retrying.") + if download_info in self.active_downloads: + self.active_downloads.remove(download_info) + self.retry_parallel_download_with_fallback(download_info) + else: + # Progress is being made, reset the timer + if 'downloading_start_time' in download_info: + del download_info['downloading_start_time'] + + elif new_status == 'queued': + self.track_table.setItem(download_info['table_index'], 4, QTableWidgetItem("... Queued")) + # Start a timer to detect if it's stuck in queue + if 'queued_start_time' not in download_info: + download_info['queued_start_time'] = time.time() + elif time.time() - download_info['queued_start_time'] > 90: # 90-second timeout + print(f"⚠️ Download for '{download_info['slskd_result'].filename}' is stuck in queue. Retrying.") + if download_info in self.active_downloads: + self.active_downloads.remove(download_info) + self.retry_parallel_download_with_fallback(download_info) + + self._is_status_update_running = False + + def retry_parallel_download_with_fallback(self, failed_download_info): + """Retries a failed download by selecting the next-best cached candidate""" + download_index = failed_download_info['download_index'] + track_info = self.parallel_search_tracking[download_index] + + track_info['retry_count'] += 1 + if track_info['retry_count'] > 2: # Max 3 attempts total (1 initial + 2 retries) + self.on_parallel_track_failed(download_index, "All retries failed.") + return + + candidates = failed_download_info.get('candidates', []) + used_sources = track_info.get('used_sources', set()) + + next_candidate = None + for candidate in candidates: + source_key = f"{getattr(candidate, 'username', 'unknown')}_{candidate.filename}" + if source_key not in used_sources: + next_candidate = candidate + break + + if not next_candidate: + self.on_parallel_track_failed(download_index, "No alternative sources in cache") + return + + print(f"🔄 Retrying album download {download_index + 1} with next candidate: {next_candidate.filename}") + self.track_table.setItem(failed_download_info['table_index'], 4, QTableWidgetItem(f"🔄 Retrying ({track_info['retry_count']})...")) + + self.start_validated_download_parallel( + next_candidate, track_info['spotify_track'], track_info['track_index'], + track_info['table_index'], download_index + ) + + def on_parallel_track_completed(self, download_index, success): + """Handle completion of a parallel track download""" + track_info = self.parallel_search_tracking.get(download_index) + if not track_info or track_info.get('completed', False): return + + track_info['completed'] = True + if success: + self.track_table.setItem(track_info['table_index'], 4, QTableWidgetItem("✅ Downloaded")) + self.downloaded_tracks_count += 1 + self.downloaded_count_label.setText(str(self.downloaded_tracks_count)) + self.successful_downloads += 1 + else: + self.track_table.setItem(track_info['table_index'], 4, QTableWidgetItem("❌ Failed")) + self.failed_downloads += 1 + if track_info not in self.permanently_failed_tracks: + self.permanently_failed_tracks.append(track_info) + self.update_failed_matches_button() + + self.completed_downloads += 1 + self.active_parallel_downloads -= 1 + self.download_progress.setValue(self.completed_downloads) + self.start_next_batch_of_downloads() + + def on_parallel_track_failed(self, download_index, reason): + """Handle failure of a parallel track download""" + print(f"❌ Album parallel download {download_index + 1} failed: {reason}") + self.on_parallel_track_completed(download_index, False) + + def update_failed_matches_button(self): + """Shows, hides, and updates the counter on the 'Correct Failed Matches' button""" + count = len(self.permanently_failed_tracks) + if count > 0: + self.correct_failed_btn.setText(f"🔧 Correct {count} Failed Match{'es' if count > 1 else ''}") + self.correct_failed_btn.show() + else: + self.correct_failed_btn.hide() + + def find_track_index_in_album(self, spotify_track): + """Find the table row index for a given Spotify track""" + for i, album_track in enumerate(self.album.tracks): + if album_track.id == spotify_track.id: + return i + return None + + def on_all_downloads_complete(self): + """Handle completion of all downloads""" + self.download_in_progress = False + print("🎉 All album downloads completed!") + self.cancel_btn.hide() + + # Emit process_finished signal to unlock UI + self.process_finished.emit() + + # Determine the final message based on success or failure + if self.permanently_failed_tracks: + final_message = f"Completed downloading {self.successful_downloads}/{len(self.missing_tracks)} missing album tracks!\n\nYou can now manually correct any failed downloads or close this window." + + # If there are failures, ensure the modal is visible and bring it to the front + if self.isHidden(): + self.show() + self.activateWindow() + self.raise_() + else: + final_message = f"Completed downloading {self.successful_downloads}/{len(self.missing_tracks)} missing album tracks!\n\nAll tracks were downloaded successfully!" + + QMessageBox.information(self, "Downloads Complete", final_message) + + def get_valid_candidates(self, results, spotify_track, query): + """Score and filter search results, then perform strict artist verification""" + if not results: + return [] + + # Get initial confident matches based on title, bitrate, etc. + initial_candidates = self.matching_engine.find_best_slskd_matches(spotify_track, results) + + if not initial_candidates: + print(f"⚠️ No initial candidates found for '{spotify_track.name}' from query '{query}'.") + return [] + + print(f"✅ Found {len(initial_candidates)} initial candidates for '{spotify_track.name}'. Now verifying artist...") + + # Perform strict artist verification on the initial candidates + verified_candidates = [] + spotify_artist_name = spotify_track.artists[0] if spotify_track.artists else "" + + # Robust normalization for both artist name and file path + normalized_spotify_artist = re.sub(r'[^a-zA-Z0-9]', '', spotify_artist_name).lower() + + for candidate in initial_candidates: + # The 'filename' from Soulseek includes the full folder path + slskd_full_path = candidate.filename + + # Apply the same robust normalization to the Soulseek path + normalized_slskd_path = re.sub(r'[^a-zA-Z0-9]', '', slskd_full_path).lower() + + # Check if the cleaned artist's name is in the cleaned folder path + if normalized_spotify_artist in normalized_slskd_path: + print(f"✔️ Artist '{spotify_artist_name}' VERIFIED in path: '{slskd_full_path}'") + verified_candidates.append(candidate) + else: + print(f"❌ Artist '{spotify_artist_name}' NOT found in path: '{slskd_full_path}'. Discarding candidate.") + + if verified_candidates: + best_confidence = verified_candidates[0].confidence + print(f"✅ Found {len(verified_candidates)} VERIFIED matches for '{spotify_track.name}'. Best score: {best_confidence:.2f}") + else: + print(f"⚠️ No verified matches found for '{spotify_track.name}' after checking file paths.") + + return verified_candidates + + def create_spotify_based_search_result_from_validation(self, slskd_result, spotify_metadata): + """Create SpotifyBasedSearchResult from validation results""" + class SpotifyBasedSearchResult: + def __init__(self): + self.filename = getattr(slskd_result, 'filename', f"{spotify_metadata.name}.flac") + self.username = getattr(slskd_result, 'username', 'unknown') + self.size = getattr(slskd_result, 'size', 0) + self.quality = getattr(slskd_result, 'quality', 'flac') + self.artist = spotify_metadata.artists[0] if spotify_metadata.artists else "Unknown" + self.title = spotify_metadata.name + self.album = spotify_metadata.album + return SpotifyBasedSearchResult() + + # Inner class for the search worker + class ParallelSearchWorker(QRunnable): + def __init__(self, soulseek_client, query): + super().__init__() + self.soulseek_client = soulseek_client + self.query = query + self.signals = self.create_signals() + + def create_signals(self): + class Signals(QObject): + search_completed = pyqtSignal(list, str) + search_failed = pyqtSignal(str, str) + return Signals() + + def run(self): + loop = None + try: + import asyncio + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + search_result = loop.run_until_complete(self.soulseek_client.search(self.query)) + results_list = search_result[0] if isinstance(search_result, tuple) and search_result else [] + self.signals.search_completed.emit(results_list, self.query) + except Exception as e: + self.signals.search_failed.emit(self.query, str(e)) + finally: + if loop: loop.close() + + def on_cancel_clicked(self): + """Handle Cancel button""" + self.cancel_operations() + self.process_finished.emit() + self.reject() + + def on_close_clicked(self): + """Handle Close button""" + if self.cancel_requested or not self.download_in_progress: + self.cancel_operations() + self.process_finished.emit() + self.reject() + + def cancel_operations(self): + """Cancel any ongoing operations""" + print("🛑 Cancelling album download operations...") + self.cancel_requested = True + + # Stop workers + for worker in self.active_workers: + if hasattr(worker, 'cancel'): + worker.cancel() + self.active_workers.clear() + + # Stop polling + self.download_status_timer.stop() + print("🛑 Album modal operations cancelled successfully.") + + def on_correct_failed_matches_clicked(self): + """Handle failed matches correction using ManualMatchModal from sync.py""" + if not self.permanently_failed_tracks: + return + + # Import the ManualMatchModal from sync.py + from ui.pages.sync import ManualMatchModal + + manual_modal = ManualMatchModal(self) + manual_modal.track_resolved.connect(self.on_manual_match_resolved) + manual_modal.exec() + + def on_manual_match_resolved(self, resolved_track_info): + """Handle a track being successfully resolved by the ManualMatchModal""" + original_failed_track = next((t for t in self.permanently_failed_tracks if t['download_index'] == resolved_track_info['download_index']), None) + if original_failed_track: + self.permanently_failed_tracks.remove(original_failed_track) + self.update_failed_matches_button() + class ArtistsPage(QWidget): def __init__(self, downloads_page=None, parent=None): super().__init__(parent) @@ -1829,62 +2752,152 @@ class ArtistsPage(QWidget): self.albums_status.setText(f"Failed to load albums: {error}") def on_album_download_requested(self, album: Album): - """Handle album download request from an AlbumCard.""" - print(f"Download requested for album: {album.name} by {', '.join(album.artists)}") + """Handle album download request from an AlbumCard using new modal system.""" + print(f"🎵 Download requested for album: {album.name} by {', '.join(album.artists)}") - # Store the album object that needs to be downloaded - self.album_to_download = album - - # Open the album search dialog to find a source on Soulseek - dialog = AlbumSearchDialog(album, self) - dialog.album_selected.connect(self.on_album_selected_for_download) - dialog.exec() - - def on_album_selected_for_download(self, album_result: AlbumResult): - """ - Handles album selection from the search dialog and delegates the - matched album download process to the main DownloadsPage. - """ - print(f"Selected album for download: {album_result.album_title} by {album_result.artist}") - - if self.downloads_page: - # Start tracking this album download - album_id = f"{self.album_to_download.id}" - self.start_album_download_tracking(album_id, album_result, self.album_to_download) - - # Delegate to the DownloadsPage to handle the matched download - # This will open the Spotify matching modal and add to the central queue - print("🚀 Delegating to DownloadsPage to start matched album download...") - self.downloads_page.start_matched_album_download(album_result) - else: - QMessageBox.critical(self, "Error", "Downloads page is not connected. Cannot start download.") - - def start_album_download_tracking(self, album_id: str, album_result: AlbumResult, spotify_album: Album): - """Start tracking downloads for an album""" - # Find the album card for this album + # Find the album card for this album to pass to modal album_card = None for i in range(self.albums_grid_layout.count()): item = self.albums_grid_layout.itemAt(i) if item and item.widget(): card = item.widget() - if hasattr(card, 'album') and card.album.id == spotify_album.id: + if hasattr(card, 'album') and card.album.id == album.id: album_card = card break - if album_card: - # Initialize tracking for this album - self.album_downloads[album_id] = { - 'total_tracks': album_result.track_count, - 'completed_tracks': 0, - 'active_downloads': [], - 'album_card': album_card, - 'album_result': album_result, - 'spotify_album': spotify_album - } + if not album_card: + QMessageBox.critical(self, "Error", "Could not find album card for tracking.") + return - # Update album card to show download in progress - album_card.set_download_in_progress() - print(f"📊 Started tracking album: {spotify_album.name} ({album_result.track_count} tracks)") + # Check if we have necessary clients + if not self.downloads_page: + QMessageBox.critical(self, "Error", "Downloads page is not connected. Cannot start download.") + return + + if not self.plex_client: + QMessageBox.critical(self, "Error", "Plex client is not available. Cannot verify existing tracks.") + return + + print("🚀 Fetching album tracks and creating DownloadMissingAlbumTracksModal...") + + # First, we need to fetch the tracks for this album + try: + # Get the full album data with tracks from Spotify + album_data = self.spotify_client.get_album(album.id) + if not album_data or not album_data.get('tracks'): + QMessageBox.critical(self, "Error", f"Could not fetch tracks for album '{album.name}'. Please try again.") + return + + # Import Track class for track creation + from core.spotify_client import Track + + # Convert track data to Track objects + tracks = [] + track_items = album_data['tracks']['items'] + + for track_data in track_items: + # Add missing fields that are required by Track.from_spotify_track() + track_data['album'] = { + 'name': album_data['name'], + 'id': album_data['id'] + } + # Album tracks don't have popularity field, so set it to 0 + if 'popularity' not in track_data: + track_data['popularity'] = 0 + + track = Track.from_spotify_track(track_data) + tracks.append(track) + + print(f"✅ Fetched {len(tracks)} tracks for album '{album.name}'") + + # Create a copy of the album with tracks added + album_with_tracks = album + album_with_tracks.tracks = tracks # Add tracks attribute dynamically + + # Create and show the new sophisticated modal + modal = DownloadMissingAlbumTracksModal( + album=album_with_tracks, # Use the album with tracks + album_card=album_card, + parent_page=self, + downloads_page=self.downloads_page, + plex_client=self.plex_client + ) + + # Connect the process finished signal to handle cleanup + modal.process_finished.connect(lambda: self.on_album_download_process_finished(album.id, album_card)) + + # Show the modal + modal.exec() + + except Exception as e: + print(f"❌ Error fetching album tracks: {e}") + QMessageBox.critical(self, "Error", f"Failed to fetch album tracks: {str(e)}\n\nPlease check your Spotify connection and try again.") + + def on_album_download_process_finished(self, album_id: str, album_card): + """Handle cleanup when album download process is finished""" + print(f"🏁 Album download process finished for album: {album_id}") + + # Reset the album card state if needed + if album_card and hasattr(album_card, 'set_download_completed'): + album_card.set_download_completed() + + print("✅ Album download process cleanup completed") + + # === LEGACY METHODS - NO LONGER USED WITH NEW MODAL SYSTEM === + # These methods were part of the old manual album download flow + # Keeping them commented for reference but they are replaced by DownloadMissingAlbumTracksModal + + # def on_album_selected_for_download(self, album_result: AlbumResult): + # """ + # [DEPRECATED] Handles album selection from the search dialog and delegates the + # matched album download process to the main DownloadsPage. + # REPLACED BY: DownloadMissingAlbumTracksModal which handles everything internally + # """ + # print(f"Selected album for download: {album_result.album_title} by {album_result.artist}") + # + # if self.downloads_page: + # # Start tracking this album download + # album_id = f"{self.album_to_download.id}" + # self.start_album_download_tracking(album_id, album_result, self.album_to_download) + # + # # Delegate to the DownloadsPage to handle the matched download + # # This will open the Spotify matching modal and add to the central queue + # print("🚀 Delegating to DownloadsPage to start matched album download...") + # self.downloads_page.start_matched_album_download(album_result) + # else: + # QMessageBox.critical(self, "Error", "Downloads page is not connected. Cannot start download.") + + # def start_album_download_tracking(self, album_id: str, album_result: AlbumResult, spotify_album: Album): + # """ + # [DEPRECATED] Start tracking downloads for an album + # REPLACED BY: DownloadMissingAlbumTracksModal handles its own tracking + # """ + # # Find the album card for this album + # album_card = None + # for i in range(self.albums_grid_layout.count()): + # item = self.albums_grid_layout.itemAt(i) + # if item and item.widget(): + # card = item.widget() + # if hasattr(card, 'album') and card.album.id == spotify_album.id: + # album_card = card + # break + # + # if album_card: + # # Initialize tracking for this album + # self.album_downloads[album_id] = { + # 'total_tracks': album_result.track_count, + # 'completed_tracks': 0, + # 'active_downloads': [], + # 'album_card': album_card, + # 'album_result': album_result, + # 'spotify_album': spotify_album + # } + # + # # Update album card to show download in progress + # album_card.set_download_in_progress() + # print(f"📊 Started tracking album: {spotify_album.name} ({album_result.track_count} tracks)") + + # === END LEGACY METHODS === def poll_album_download_statuses(self): """Poll download statuses for tracked albums"""