From 7b6a94f3e6d5518e9c8e8980863646665a406420 Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Thu, 10 Jul 2025 09:11:12 -0700 Subject: [PATCH] fix --- .spotify_cache | 2 +- logs/app.log | 112 ++++++++++++++++++ .../__pycache__/downloads.cpython-312.pyc | Bin 107399 -> 107402 bytes ui/pages/downloads.py | 55 ++++++--- 4 files changed, 151 insertions(+), 18 deletions(-) diff --git a/.spotify_cache b/.spotify_cache index 25bdac14..a2512cc5 100644 --- a/.spotify_cache +++ b/.spotify_cache @@ -1 +1 @@ -{"access_token": "BQBptSDFOmuCrdFhAT3o2Rd85vMSh-8wxQyZoJf5dhDjTkGaEapSscCO81D_9wW5tsFONfbZaRFPDEmwgLxU5mlPGf5BO19Ngeu7qfwjeSvIsPDgyXTZqpFSTmCcmIQ9nW75V6ixzC48Soc4JG-YZXAZLQN2OCgkSje-L2gHHwuHtJmAnD-3_Lq0CBUJPzP3QR01XFyxXaRWqTg6o3EuqBYOCmNBhKmFGVWTD59-RWOKhsLhcYy3siXcAAYYJtzb", "token_type": "Bearer", "expires_in": 3600, "scope": "user-library-read user-read-private playlist-read-private playlist-read-collaborative user-read-email", "expires_at": 1752163323, "refresh_token": "AQDmfQkPCGObfJeTUIbW1hAAwhSqkuHRA3Qh2dqVYMRh0eCkFMQgPNJDDzF8y-BiaVbj80zePkK_XSfYH1aJutMtNbnsqRKWuxP31BTrMc7pdUdbE7Fma4oH8wpDUKdG3MM"} \ No newline at end of file +{"access_token": "BQBe_MJ7AUBigKGLrL5cDrQcNOcfu9QBWJfHn1YlwGrK7MHkoUaG0q_W6LGKB1qLKTLfqfLvZxBkiU57KA-PfRNM_TLmNOVrje3qqBsy3ILWlO85wNVqK2QEFVEOPdXK9nVyq_UlE9Olo0HiCYRmDShhJwghY7qCAHliDqO8ag2D0f8hZtvf_cf4pDNEq9BRtnGmlOsIMEefpexFt-d86t89Y8qtRQXM_70TsMiQMQEW1XULWWp9ppWAGcmzTYuX", "token_type": "Bearer", "expires_in": 3600, "scope": "user-library-read user-read-private playlist-read-private playlist-read-collaborative user-read-email", "expires_at": 1752167413, "refresh_token": "AQDmfQkPCGObfJeTUIbW1hAAwhSqkuHRA3Qh2dqVYMRh0eCkFMQgPNJDDzF8y-BiaVbj80zePkK_XSfYH1aJutMtNbnsqRKWuxP31BTrMc7pdUdbE7Fma4oH8wpDUKdG3MM"} \ No newline at end of file diff --git a/logs/app.log b/logs/app.log index ed0e9ea5..295e72ea 100644 --- a/logs/app.log +++ b/logs/app.log @@ -5913,3 +5913,115 @@ 2025-07-10 08:58:28 - newmusic.soulseek_client - INFO - search:288 - Found 408 new results (total: 408) at 16.5s 2025-07-10 08:58:28 - newmusic.soulseek_client - INFO - search:298 - Early termination: Found 408 results, stopping search 2025-07-10 08:58:28 - newmusic.soulseek_client - INFO - search:309 - Search completed. Found 408 total results for query: virtual mage +2025-07-10 09:10:08 - newmusic.main - INFO - closeEvent:152 - Closing application... +2025-07-10 09:10:08 - newmusic.main - INFO - closeEvent:157 - Cleaning up Downloads page threads... +2025-07-10 09:10:08 - newmusic.main - INFO - closeEvent:162 - Stopping status monitoring thread... +2025-07-10 09:10:10 - newmusic.main - INFO - closeEvent:167 - Closing Soulseek client... +2025-07-10 09:10:10 - newmusic.main - INFO - closeEvent:173 - Application closed successfully +2025-07-10 09:10:13 - newmusic - INFO - setup_logging:57 - Logging initialized with level: DEBUG +2025-07-10 09:10:13 - newmusic.main - INFO - main:187 - Starting NewMusic application +2025-07-10 09:10:14 - newmusic.spotify_client - INFO - _setup_client:84 - Successfully authenticated with Spotify as broquethomas +2025-07-10 09:10:14 - newmusic.plex_client - INFO - _find_music_library:98 - Found music library: Music +2025-07-10 09:10:14 - newmusic.plex_client - INFO - _setup_client:84 - Successfully connected to Plex server: PLEX-MACHINE +2025-07-10 09:10:14 - newmusic.soulseek_client - INFO - _setup_client:87 - Soulseek client configured with slskd at http://localhost:5030 +2025-07-10 09:10:15 - newmusic.main - INFO - change_page:139 - Changed to page: dashboard +2025-07-10 09:10:15 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Aether +2025-07-10 09:10:15 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Favorite Artists +2025-07-10 09:10:17 - newmusic.main - INFO - change_page:139 - Changed to page: downloads +2025-07-10 09:10:18 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Brittnea +2025-07-10 09:10:19 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Baleigh +2025-07-10 09:10:20 - newmusic.soulseek_client - INFO - search:243 - Starting search for: 'virtual mage' +2025-07-10 09:10:20 - newmusic.soulseek_client - DEBUG - search:253 - Search data: {'searchText': 'virtual mage', 'timeout': 30000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-10 09:10:20 - newmusic.soulseek_client - DEBUG - search:254 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-10 09:10:20 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making POST request to: http://localhost:5030/api/v0/searches +2025-07-10 09:10:20 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-10 09:10:20 - newmusic.soulseek_client - DEBUG - _make_request:112 - JSON payload: {'searchText': 'virtual mage', 'timeout': 30000, 'filterResponses': True, 'minimumResponseFileCount': 1, 'minimumPeerUploadSpeed': 0} +2025-07-10 09:10:21 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-10 09:10:21 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: {"fileCount":0,"id":"f3e90029-4840-40f9-9187-df5ada8b213e","isComplete":false,"lockedFileCount":0,"responseCount":0,"responses":[],"searchText":"virtual mage","startedAt":"2025-07-10T16:10:21.0269644Z","state":"InProgress","token":139}... +2025-07-10 09:10:21 - newmusic.soulseek_client - INFO - search:267 - Search initiated with ID: f3e90029-4840-40f9-9187-df5ada8b213e +2025-07-10 09:10:21 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 1/20) - elapsed: 0.0s +2025-07-10 09:10:21 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/f3e90029-4840-40f9-9187-df5ada8b213e/responses +2025-07-10 09:10:21 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-10 09:10:21 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-10 09:10:21 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-10 09:10:21 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Extra Music +2025-07-10 09:10:22 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Maggi Main +2025-07-10 09:10:22 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 2/20) - elapsed: 1.5s +2025-07-10 09:10:22 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/f3e90029-4840-40f9-9187-df5ada8b213e/responses +2025-07-10 09:10:22 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-10 09:10:23 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-10 09:10:23 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-10 09:10:24 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 3/20) - elapsed: 3.0s +2025-07-10 09:10:24 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/f3e90029-4840-40f9-9187-df5ada8b213e/responses +2025-07-10 09:10:24 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-10 09:10:25 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-10 09:10:25 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-10 09:10:26 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 4/20) - elapsed: 4.5s +2025-07-10 09:10:26 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/f3e90029-4840-40f9-9187-df5ada8b213e/responses +2025-07-10 09:10:26 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-10 09:10:27 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-10 09:10:27 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-10 09:10:28 - newmusic.spotify_client - INFO - get_user_playlists:106 - Fetching tracks for playlist: Broque Main +2025-07-10 09:10:28 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 5/20) - elapsed: 6.0s +2025-07-10 09:10:28 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/f3e90029-4840-40f9-9187-df5ada8b213e/responses +2025-07-10 09:10:28 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-10 09:10:28 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-10 09:10:28 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-10 09:10:30 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 6/20) - elapsed: 7.5s +2025-07-10 09:10:30 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/f3e90029-4840-40f9-9187-df5ada8b213e/responses +2025-07-10 09:10:30 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-10 09:10:30 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-10 09:10:30 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-10 09:10:32 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 7/20) - elapsed: 9.0s +2025-07-10 09:10:32 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/f3e90029-4840-40f9-9187-df5ada8b213e/responses +2025-07-10 09:10:32 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-10 09:10:32 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-10 09:10:32 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-10 09:10:34 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 8/20) - elapsed: 10.5s +2025-07-10 09:10:34 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/f3e90029-4840-40f9-9187-df5ada8b213e/responses +2025-07-10 09:10:34 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-10 09:10:34 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-10 09:10:34 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-10 09:10:36 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 9/20) - elapsed: 12.0s +2025-07-10 09:10:36 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/f3e90029-4840-40f9-9187-df5ada8b213e/responses +2025-07-10 09:10:36 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-10 09:10:36 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-10 09:10:36 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-10 09:10:36 - newmusic.spotify_client - INFO - get_user_playlists:113 - Retrieved 7 playlists +2025-07-10 09:10:37 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 10/20) - elapsed: 13.5s +2025-07-10 09:10:37 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/f3e90029-4840-40f9-9187-df5ada8b213e/responses +2025-07-10 09:10:37 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-10 09:10:38 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-10 09:10:38 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: []... +2025-07-10 09:10:39 - newmusic.soulseek_client - DEBUG - search:275 - Polling for results (attempt 11/20) - elapsed: 15.0s +2025-07-10 09:10:39 - newmusic.soulseek_client - DEBUG - _make_request:109 - Making GET request to: http://localhost:5030/api/v0/searches/f3e90029-4840-40f9-9187-df5ada8b213e/responses +2025-07-10 09:10:39 - newmusic.soulseek_client - DEBUG - _make_request:110 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'} +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _make_request:121 - Response status: 200 +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _make_request:122 - Response text: [{"fileCount":9,"files":[{"code":1,"extension":"","filename":"FLACs\\by genre\\synthwave\\Virtual Mage\\Virtual Mage - Aether WEB (2020)\\00 Virtual Mage - Aether Folder.auCDtect.txt","size":1168,"isLocked":false},{"code":1,"extension":"","filename":"FLACs\\by genre\\synthwave\\Virtual Mage\\Virtual Mage - Aether WEB (2020)\\00 Virtual Mage - Aether.jpg","size":55497,"isLocked":false},{"bitDepth":16,"code":1,"extension":"","filename":"FLACs\\by genre\\synthwave\\Virtual Mage\\Virtual Mage - Aeth... +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:208 - Processing 23 user responses +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Ultravod has 9 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User RuuqoHoosk has 346 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User HomotopicCensorship has 3 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User KindaRatchet has 1 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User belthane has 3 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User buk4 has 1 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User exsanguinidraculae has 2 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Letham has 3 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User leonardoclk has 3 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Dax_VR has 10 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Satani-Vitales has 3 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User soulshookt has 3 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User FixxAlish has 1 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User ruszok has 1 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User thinkibettergo has 1 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User wonko1987 has 2 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User koalabeer has 3 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User raspberry2 has 10 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User zeroscan has 2 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User nightmare_dronemk12 has 3 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User ofoijacussa has 0 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Shooby has 6 files +2025-07-10 09:10:40 - newmusic.soulseek_client - DEBUG - _process_search_responses:213 - User Kaya-Sem has 1 files +2025-07-10 09:10:40 - newmusic.soulseek_client - INFO - search:288 - Found 417 new results (total: 417) at 15.0s +2025-07-10 09:10:40 - newmusic.soulseek_client - INFO - search:298 - Early termination: Found 417 results, stopping search +2025-07-10 09:10:40 - newmusic.soulseek_client - INFO - search:309 - Search completed. Found 417 total results for query: virtual mage diff --git a/ui/pages/__pycache__/downloads.cpython-312.pyc b/ui/pages/__pycache__/downloads.cpython-312.pyc index 912efd495341fc736b2ce1a6a35291a73d59cddd..c3c18fc54905cc1aca413f2259a10d69f307c003 100644 GIT binary patch delta 6737 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 diff --git a/ui/pages/downloads.py b/ui/pages/downloads.py index 225ee0ee..6064ec35 100644 --- a/ui/pages/downloads.py +++ b/ui/pages/downloads.py @@ -362,9 +362,10 @@ class SearchResultItem(QFrame): self.title_label.setFont(QFont("Arial", 11, QFont.Weight.Bold)) # Reduced from 13px to 11px self.title_label.setStyleSheet("color: #ffffff;") self.title_label.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) - # Ensure text doesn't overflow the label + # Ensure text doesn't overflow the label and allow click-through self.title_label.setWordWrap(False) - self.title_label.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) + # Remove text selection to allow clicks to propagate to parent widget + self.title_label.setTextInteractionFlags(Qt.TextInteractionFlag.NoTextInteraction) # Expand indicator self.expand_indicator = QLabel("⏵") @@ -386,7 +387,7 @@ class SearchResultItem(QFrame): self.expanded_content = QWidget() expanded_layout = QVBoxLayout(self.expanded_content) expanded_layout.setContentsMargins(0, 0, 0, 0) - expanded_layout.setSpacing(2) # Very tight spacing for dense layout + expanded_layout.setSpacing(1) # Ultra-tight spacing for more compact layout # Artist info self.artist_info = QLabel(primary_info['artist']) @@ -412,28 +413,18 @@ class SearchResultItem(QFrame): bottom_row.setContentsMargins(0, 0, 0, 0) bottom_row.setSpacing(8) - self.user_info = QLabel(f"👤 {self.search_result.username}") + # Apply intelligent path truncation to username/file location + truncated_path = self._truncate_file_path(self.search_result.username, self.search_result.filename) + self.user_info = QLabel(f"👤 {truncated_path}") self.user_info.setFont(QFont("Arial", 9, QFont.Weight.Medium)) # Smaller font self.user_info.setStyleSheet("color: rgba(29, 185, 84, 0.8);") self.speed_indicator = self._create_compact_speed_indicator() - self.quality_score = QLabel(f"★{self.search_result.quality_score:.1f}") - self.quality_score.setAlignment(Qt.AlignmentFlag.AlignCenter) - self.quality_score.setFont(QFont("Arial", 8, QFont.Weight.Bold)) # Smaller font - self.quality_score.setFixedSize(32, 16) # Smaller size - - if self.search_result.quality_score >= 0.9: - self.quality_score.setStyleSheet("color: #1db954; background: rgba(29, 185, 84, 0.15); border-radius: 8px;") - elif self.search_result.quality_score >= 0.7: - self.quality_score.setStyleSheet("color: #ffa500; background: rgba(255, 165, 0, 0.15); border-radius: 8px;") - else: - self.quality_score.setStyleSheet("color: #e22134; background: rgba(226, 33, 52, 0.15); border-radius: 8px;") - + # Add widgets to bottom row (removed misleading star rating) bottom_row.addWidget(self.user_info) bottom_row.addWidget(self.speed_indicator) bottom_row.addStretch() - bottom_row.addWidget(self.quality_score) # Add all expanded content expanded_layout.addWidget(self.artist_info) @@ -536,6 +527,36 @@ class SearchResultItem(QFrame): else: return self.size().expandedTo(self.minimumSize()).boundedTo(self.maximumSize()) + def _truncate_file_path(self, username, filename): + """Truncate file path to show max 3 levels: file + parent + grandparent folder""" + import os + + # If username looks like a simple username (no path separators), return as-is + if '/' not in username and '\\' not in username: + return username + + # Get filename without extension for comparison + file_base = os.path.splitext(os.path.basename(filename))[0] + + # Split path using both Windows and Unix separators + path_parts = username.replace('\\', '/').split('/') + + # Remove empty parts + path_parts = [part for part in path_parts if part.strip()] + + # If path is already short, return as-is + if len(path_parts) <= 3: + return '/'.join(path_parts) + + # Take last 3 components (file + parent + grandparent) + truncated_parts = path_parts[-3:] + + # If we truncated, add ellipsis at the beginning + if len(path_parts) > 3: + return '.../' + '/'.join(truncated_parts) + else: + return '/'.join(truncated_parts) + def _extract_song_info(self): """Extract song title and artist from filename""" filename = self.search_result.filename