good
This commit is contained in:
parent
2fbbcdc954
commit
5265391ae4
6 changed files with 852 additions and 9 deletions
|
|
@ -1 +1 @@
|
|||
{"access_token": "BQDOhKfFATvb-8-rw278Xzc-T-QgPJ5_7mWFHT4yw83y2c5yvmDDQ8qdkKuiFc-Hfc8V7L6o_8w9d5Vl9TPuek9pxE-PNeNPwxsRn9CVScttd2_XEuxnR-ag53yqrMP4rSaUZnXT5pd1tqizay2aOpmdfV89BTg7-Vj3SARGgofrhBbJqO4hNZY5EqVGpWpDyzJCUeG4W7jvLC62eO8qFVpnbrqNdRKGMeZ6FfCdiVZfjrxlPv9a-LaUYeazk3aR", "token_type": "Bearer", "expires_in": 3600, "scope": "user-library-read user-read-private playlist-read-private playlist-read-collaborative user-read-email", "expires_at": 1753742887, "refresh_token": "AQDmfQkPCGObfJeTUIbW1hAAwhSqkuHRA3Qh2dqVYMRh0eCkFMQgPNJDDzF8y-BiaVbj80zePkK_XSfYH1aJutMtNbnsqRKWuxP31BTrMc7pdUdbE7Fma4oH8wpDUKdG3MM"}
|
||||
{"access_token": "BQCAxqYls1GZziWWT_RK2oephXS0gdOA6aCR_ylemRRdjvZ3ZAvgzQDiZcOvP6DdENbfoZK2d5m-a61GUp1syw9sMS6U3qjvjhGGgACvl4jytuArO-ht2crjJmeVdl_88YIrBMrlZsBnOAmOyPH8xA7X1i9hy5H5_nO32iiM1t96sm9rT9zIAe6gCQpDt36SbLafT2GZz_7dH3k6QVZRkuESnyr9xXznIsshhemd2UFnRnTGzg8ptWp7eCVAiL5d", "token_type": "Bearer", "expires_in": 3600, "scope": "user-library-read user-read-private playlist-read-private playlist-read-collaborative user-read-email", "expires_at": 1753746945, "refresh_token": "AQDmfQkPCGObfJeTUIbW1hAAwhSqkuHRA3Qh2dqVYMRh0eCkFMQgPNJDDzF8y-BiaVbj80zePkK_XSfYH1aJutMtNbnsqRKWuxP31BTrMc7pdUdbE7Fma4oH8wpDUKdG3MM"}
|
||||
Binary file not shown.
|
|
@ -414,6 +414,59 @@ class PlexClient:
|
|||
logger.error(f"Error getting library stats: {e}")
|
||||
return {}
|
||||
|
||||
def get_all_artists(self) -> List[PlexArtist]:
|
||||
"""Get all artists from the music library"""
|
||||
if not self.ensure_connection() or not self.music_library:
|
||||
logger.error("Not connected to Plex server or no music library")
|
||||
return []
|
||||
|
||||
try:
|
||||
artists = self.music_library.searchArtists()
|
||||
logger.info(f"Found {len(artists)} artists in Plex library")
|
||||
return artists
|
||||
except Exception as e:
|
||||
logger.error(f"Error getting all artists: {e}")
|
||||
return []
|
||||
|
||||
def update_artist_genres(self, artist: PlexArtist, genres: List[str]):
|
||||
"""Update artist genres"""
|
||||
try:
|
||||
# Clear existing genres first
|
||||
for genre in artist.genres:
|
||||
artist.removeGenre(genre)
|
||||
|
||||
# Add new genres
|
||||
for genre in genres:
|
||||
artist.addGenre(genre)
|
||||
|
||||
logger.info(f"Updated genres for {artist.title}: {genres}")
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"Error updating genres for {artist.title}: {e}")
|
||||
return False
|
||||
|
||||
def update_artist_poster(self, artist: PlexArtist, image_data: bytes):
|
||||
"""Update artist poster image"""
|
||||
try:
|
||||
# Upload poster using Plex API
|
||||
upload_url = f"{self.server._baseurl}/library/metadata/{artist.ratingKey}/posters"
|
||||
headers = {
|
||||
'X-Plex-Token': self.server._token,
|
||||
'Content-Type': 'image/jpeg'
|
||||
}
|
||||
|
||||
response = requests.post(upload_url, data=image_data, headers=headers)
|
||||
response.raise_for_status()
|
||||
|
||||
# Refresh artist to see changes
|
||||
artist.refresh()
|
||||
logger.info(f"Updated poster for {artist.title}")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error updating poster for {artist.title}: {e}")
|
||||
return False
|
||||
|
||||
def update_track_metadata(self, track_id: str, metadata: Dict[str, Any]) -> bool:
|
||||
if not self.ensure_connection():
|
||||
return False
|
||||
|
|
|
|||
416
logs/app.log
416
logs/app.log
|
|
@ -213641,3 +213641,419 @@
|
|||
2025-07-28 15:30:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:30:37 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:30:37 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:32:36 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 15:32:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 15:32:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:32:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 15:32:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:32:37 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:32:37 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:33:00 - newmusic.main - [92mINFO[0m - change_page:278 - Changed to page: downloads
|
||||
2025-07-28 15:33:02 - newmusic.soulseek_client - [94mDEBUG[0m - clear_all_completed_downloads:925 - Clearing all completed downloads with endpoint: transfers/downloads/all/completed
|
||||
2025-07-28 15:33:02 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making DELETE request to: http://localhost:5030/api/v0/transfers/downloads/all/completed
|
||||
2025-07-28 15:33:02 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:33:03 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 204
|
||||
2025-07-28 15:33:03 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: ...
|
||||
2025-07-28 15:33:03 - newmusic.soulseek_client - [92mINFO[0m - clear_all_completed_downloads:930 - Successfully cleared all completed downloads from slskd
|
||||
2025-07-28 15:33:04 - newmusic.main - [92mINFO[0m - change_page:278 - Changed to page: dashboard
|
||||
2025-07-28 15:34:36 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 15:34:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 15:34:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:34:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 15:34:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:34:37 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:34:37 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:36:36 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 15:36:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 15:36:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:36:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 15:36:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:36:37 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:36:37 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:38:36 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 15:38:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 15:38:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:38:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 15:38:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:38:37 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:38:37 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:40:36 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 15:40:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 15:40:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:40:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 15:40:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:40:37 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:40:37 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:42:36 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 15:42:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 15:42:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:42:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 15:42:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:42:37 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:42:37 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:44:36 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 15:44:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 15:44:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:44:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 15:44:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:44:37 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:44:37 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:46:36 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 15:46:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 15:46:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:46:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 15:46:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:46:37 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:46:37 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:48:36 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 15:48:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 15:48:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:48:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 15:48:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:48:37 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:48:37 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:50:36 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 15:50:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 15:50:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:50:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 15:50:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:50:37 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:50:37 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:52:36 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 15:52:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 15:52:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:52:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 15:52:37 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:52:37 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:52:37 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:53:23 - newmusic.main - [92mINFO[0m - closeEvent:295 - Closing application...
|
||||
2025-07-28 15:53:23 - newmusic.main - [92mINFO[0m - closeEvent:300 - Cleaning up Downloads page threads...
|
||||
2025-07-28 15:53:23 - newmusic.main - [92mINFO[0m - closeEvent:305 - Stopping status monitoring thread...
|
||||
2025-07-28 15:53:25 - newmusic.main - [92mINFO[0m - closeEvent:310 - Stopping search maintenance timer...
|
||||
2025-07-28 15:53:25 - newmusic.main - [92mINFO[0m - closeEvent:315 - Closing Soulseek client...
|
||||
2025-07-28 15:53:25 - newmusic.main - [91mERROR[0m - closeEvent:319 - Error closing Soulseek client: Event loop is closed
|
||||
2025-07-28 15:53:25 - newmusic.main - [92mINFO[0m - closeEvent:321 - Application closed successfully
|
||||
2025-07-28 15:53:30 - newmusic - [92mINFO[0m - setup_logging:57 - Logging initialized with level: DEBUG
|
||||
2025-07-28 15:53:30 - newmusic.main - [92mINFO[0m - main:335 - Starting NewMusic application
|
||||
2025-07-28 15:53:30 - newmusic.spotify_client - [92mINFO[0m - _setup_client:179 - Spotify client initialized (user info will be fetched when needed)
|
||||
2025-07-28 15:53:30 - newmusic.soulseek_client - [92mINFO[0m - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030
|
||||
2025-07-28 15:53:30 - newmusic.spotify_client - [92mINFO[0m - _setup_client:179 - Spotify client initialized (user info will be fetched when needed)
|
||||
2025-07-28 15:53:31 - newmusic.spotify_client - [92mINFO[0m - _setup_client:179 - Spotify client initialized (user info will be fetched when needed)
|
||||
2025-07-28 15:53:31 - newmusic.soulseek_client - [92mINFO[0m - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030
|
||||
2025-07-28 15:53:31 - newmusic.main - [92mINFO[0m - change_page:278 - Changed to page: dashboard
|
||||
2025-07-28 15:53:31 - newmusic.main - [92mINFO[0m - setup_media_player_connections:230 - Media player connections established between sidebar and downloads page
|
||||
2025-07-28 15:53:31 - newmusic.main - [92mINFO[0m - setup_settings_connections:235 - Settings change connections established
|
||||
2025-07-28 15:53:31 - newmusic.main - [92mINFO[0m - setup_search_maintenance:91 - Search maintenance timer started (every 2 minutes, keeps 200 most recent searches)
|
||||
2025-07-28 15:53:31 - newmusic.plex_client - [92mINFO[0m - _find_music_library:127 - Found music library: Music
|
||||
2025-07-28 15:53:31 - newmusic.plex_client - [92mINFO[0m - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE
|
||||
2025-07-28 15:55:05 - newmusic.main - [92mINFO[0m - closeEvent:295 - Closing application...
|
||||
2025-07-28 15:55:05 - newmusic.main - [92mINFO[0m - closeEvent:300 - Cleaning up Downloads page threads...
|
||||
2025-07-28 15:55:05 - newmusic.main - [92mINFO[0m - closeEvent:305 - Stopping status monitoring thread...
|
||||
2025-07-28 15:55:07 - newmusic.main - [92mINFO[0m - closeEvent:310 - Stopping search maintenance timer...
|
||||
2025-07-28 15:55:07 - newmusic.main - [92mINFO[0m - closeEvent:315 - Closing Soulseek client...
|
||||
2025-07-28 15:55:07 - newmusic.main - [92mINFO[0m - closeEvent:321 - Application closed successfully
|
||||
2025-07-28 15:55:37 - newmusic - [92mINFO[0m - setup_logging:57 - Logging initialized with level: DEBUG
|
||||
2025-07-28 15:55:37 - newmusic.main - [92mINFO[0m - main:335 - Starting NewMusic application
|
||||
2025-07-28 15:55:37 - newmusic.spotify_client - [92mINFO[0m - _setup_client:179 - Spotify client initialized (user info will be fetched when needed)
|
||||
2025-07-28 15:55:37 - newmusic.soulseek_client - [92mINFO[0m - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030
|
||||
2025-07-28 15:55:38 - newmusic.spotify_client - [92mINFO[0m - _setup_client:179 - Spotify client initialized (user info will be fetched when needed)
|
||||
2025-07-28 15:55:38 - newmusic.spotify_client - [92mINFO[0m - _setup_client:179 - Spotify client initialized (user info will be fetched when needed)
|
||||
2025-07-28 15:55:38 - newmusic.soulseek_client - [92mINFO[0m - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030
|
||||
2025-07-28 15:55:38 - newmusic.main - [92mINFO[0m - change_page:278 - Changed to page: dashboard
|
||||
2025-07-28 15:55:38 - newmusic.main - [92mINFO[0m - setup_media_player_connections:230 - Media player connections established between sidebar and downloads page
|
||||
2025-07-28 15:55:38 - newmusic.main - [92mINFO[0m - setup_settings_connections:235 - Settings change connections established
|
||||
2025-07-28 15:55:38 - newmusic.main - [92mINFO[0m - setup_search_maintenance:91 - Search maintenance timer started (every 2 minutes, keeps 200 most recent searches)
|
||||
2025-07-28 15:55:38 - newmusic.plex_client - [92mINFO[0m - _find_music_library:127 - Found music library: Music
|
||||
2025-07-28 15:55:38 - newmusic.plex_client - [92mINFO[0m - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE
|
||||
2025-07-28 15:55:43 - newmusic.plex_client - [92mINFO[0m - get_all_artists:425 - Found 3795 artists in Plex library
|
||||
2025-07-28 15:55:46 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for _tillus: ['lo-fi house', 'Rap/Hip Hop']
|
||||
2025-07-28 15:55:47 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for !Nxght: ['Electro', 'brazilian phonk']
|
||||
2025-07-28 15:55:49 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for $ebu: ['Electro', 'phonk', 'Dance', 'drift phonk', 'Rap/Hip Hop']
|
||||
2025-07-28 15:55:50 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for $uicideboy$: ['emo rap', 'horrorcore', 'Rap', 'trap metal', 'underground hip hop', 'cloud rap', 'Rap/Hip Hop']
|
||||
2025-07-28 15:55:51 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for $uicideboy$: ['emo rap', 'horrorcore', 'trap metal', 'underground hip hop', 'cloud rap']
|
||||
2025-07-28 15:55:52 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for $YANIC: ['Electro', 'phonk', 'brazilian phonk', 'Dance', 'Soul & Funk', 'Rap/Hip Hop']
|
||||
2025-07-28 15:55:54 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Ødyssee: ['Electro', 'lo-fi beats', 'lo-fi hip hop', 'lo-fi', 'jazz beats', 'Chill Out/Trip hop/Lounge', 'Rap/Hip Hop']
|
||||
2025-07-28 15:55:55 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Ødyzon: ['Electro', 'Alternative', 'Pop', 'Dance', 'ambient', 'dark ambient']
|
||||
2025-07-28 15:55:56 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Øneheart: ['Electro', 'Pop', 'ambient', 'Rap/Hip Hop', 'Indie Pop', 'Alternative', 'Dance', 'dark ambient']
|
||||
2025-07-28 15:55:58 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Øutgrown: ['lo-fi', 'Electro', 'Alternative', 'dark ambient']
|
||||
2025-07-28 15:56:00 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for The 2 Bears: ['Electro', 'Dance', 'Pop/Rock', 'Electronic', 'Techno/House']
|
||||
2025-07-28 15:56:02 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 2.brkn: ['Indie Pop', 'Alternative', 'Rap/Hip Hop']
|
||||
2025-07-28 15:56:06 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 2Pac: ['hip hop', 'gangster rap', 'Rap', 'Pop/Rock', 'east coast hip hop', 'old school hip hop']
|
||||
2025-07-28 15:56:07 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 2Rare: ['jersey club', 'philly club', 'Rap/Hip Hop']
|
||||
2025-07-28 15:56:10 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 3d Blast: ['vaporwave']
|
||||
2025-07-28 15:56:11 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 3LAU: ['edm', 'Electronic', 'progressive house', 'dubstep']
|
||||
2025-07-28 15:56:12 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 3TEETH: ['noise rock', 'industrial', 'witch house']
|
||||
2025-07-28 15:56:13 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 3x3cute: ['techno']
|
||||
2025-07-28 15:56:15 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 4batz: ['alternative r&b']
|
||||
2025-07-28 15:56:17 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 4Scythe: ['Alternative', 'horrorcore', 'Indie Rock', 'trap metal', 'Rap/Hip Hop']
|
||||
2025-07-28 15:56:20 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 5AM: ['Electro', 'glitch', 'bass music']
|
||||
2025-07-28 15:56:22 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 5MIINUST: ['Rap/Hip Hop']
|
||||
2025-07-28 15:56:23 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 6YNTHMANE: ['Electro', 'phonk', 'brazilian phonk']
|
||||
2025-07-28 15:56:24 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 7-Pm: ['lo-fi', 'lo-fi beats', 'Rap/Hip Hop']
|
||||
2025-07-28 15:56:29 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 7vvch: ['drift phonk', 'phonk', 'Dance']
|
||||
2025-07-28 15:56:31 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 9Lives: ['Rap/Hip Hop', 'nightcore', 'hyperpop']
|
||||
2025-07-28 15:56:34 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 18FEARS: ['Electro', 'ambient', 'Alternative', 'dark ambient']
|
||||
2025-07-28 15:56:40 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 50 Cent: ['hip hop', 'Rap', 'Pop/Rock', 'Rap/Hip Hop', 'rap']
|
||||
2025-07-28 15:56:43 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 81an: ['Electro', 'phonk', 'Dance']
|
||||
2025-07-28 15:56:44 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 88rising: ['Rap', 'Pop/Rock', 'Stage & Screen', 'R&B']
|
||||
2025-07-28 15:56:52 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 1788-L: ['Electronic', 'dubstep', 'Dance']
|
||||
2025-07-28 15:56:55 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 121569: ['Electro', 'Chill Out/Trip hop/Lounge']
|
||||
2025-07-28 15:56:58 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for a-ha: ['Pop/Rock', 'new wave', 'synthpop']
|
||||
2025-07-28 15:56:59 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A-Trak: ['Electronic', 'downtempo', 'french house', 'french indie pop']
|
||||
2025-07-28 15:57:00 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A. G. Cook: ['Pop/Rock', 'Electronic', 'hyperpop']
|
||||
2025-07-28 15:57:01 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A.e.r.o.: ['space music', 'Electro', 'Chill Out/Trip hop/Lounge', 'ambient']
|
||||
2025-07-28 15:57:04 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A.L.I.S.O.N: ['Electro', 'synthwave', 'vaporwave', 'Dance', 'chillwave']
|
||||
2025-07-28 15:57:07 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A$AP Ferg: ['Rap', 'Rap/Hip Hop', 'rap']
|
||||
2025-07-28 15:57:08 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A$AP Rocky: ['Rap', 'rap']
|
||||
2025-07-28 15:57:22 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Abakus: ['Electro', 'Dance', 'Electronic', 'downtempo', 'Chill Out/Trip hop/Lounge', 'Rap/Hip Hop']
|
||||
2025-07-28 15:57:24 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Abe M Beats: ['Rap/Hip Hop']
|
||||
2025-07-28 15:57:25 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Abigail Washburn: ['newgrass', 'Country', 'bluegrass', 'Folk', 'americana', 'folk']
|
||||
2025-07-28 15:57:27 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Above & Beyond: ['progressive trance', 'trance', 'progressive house']
|
||||
2025-07-28 15:57:28 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Abra Cadabra: ['drill', 'grime', 'Rap', 'R&B', 'uk drill', 'Rap/Hip Hop', 'afroswing', 'uk grime']
|
||||
2025-07-28 15:57:30 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Absolute Valentine: ['synthwave', 'vaporwave']
|
||||
2025-07-28 15:57:31 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for AC/DC: ['Stage & Screen', 'Pop/Rock', 'rock', 'classic rock']
|
||||
2025-07-28 15:57:33 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Accomplice: ['dubstep', 'Rap/Hip Hop']
|
||||
2025-07-28 15:57:36 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Acedox: ['merengue', 'Rap/Hip Hop']
|
||||
2025-07-28 15:57:38 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 15:57:38 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 15:57:38 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:57:38 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Acey: ['Electro', 'Alternative', 'Pop', 'R&B', 'African Music', 'Indie Pop', 'Rap/Hip Hop']
|
||||
2025-07-28 15:57:38 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 15:57:38 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:57:38 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:57:38 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:57:39 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for achorda: ['Electro', 'ambient', 'Alternative', 'dark ambient']
|
||||
2025-07-28 15:57:41 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for acidcrvsh: ['Electro', 'breakcore', 'jungle', 'Dance']
|
||||
2025-07-28 15:57:45 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adam Beyer: ['Electro', 'Dance']
|
||||
2025-07-28 15:57:49 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adam Ford: ['Electro', 'synthwave', 'vaporwave', 'Alternative', 'chillwave', 'Indie Rock']
|
||||
2025-07-28 15:57:54 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adeki: ['afro r&b', 'afro soul', 'Electro', 'Pop', 'afrobeats', 'afrobeat', 'afropop', 'afropiano', 'Humor', 'alté']
|
||||
2025-07-28 15:57:55 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adekunle Gold: ['afropop', 'R&B', 'African Music', 'afrobeats', 'afrobeat', 'afropiano']
|
||||
2025-07-28 15:57:57 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adele: ['soft pop', 'Pop/Rock']
|
||||
2025-07-28 15:58:01 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adieu Aru: ['Electro', 'synthwave', 'vaporwave', 'Dance', 'chillwave']
|
||||
2025-07-28 15:58:02 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for ADIV CULTURE: ['brazilian trap', 'Rap/Hip Hop']
|
||||
2025-07-28 15:58:03 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Admo: ['Electro', 'synthwave', 'vaporwave', 'Dance', 'chillwave', 'Techno/House']
|
||||
2025-07-28 15:58:04 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Admo: ['Electro', 'synthwave', 'vaporwave', 'chillwave', 'Alternativo', 'Techno/House']
|
||||
2025-07-28 15:58:06 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adrian Quesada: ['Latin', 'R&B', 'retro soul']
|
||||
2025-07-28 15:58:08 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adrian Underhill: ['Indie Pop', 'Alternative', 'Pop', 'R&B']
|
||||
2025-07-28 15:58:14 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for aespa: ['International', 'Pop/Rock', 'k-pop']
|
||||
2025-07-28 15:58:21 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Aexion: ['Electro', 'vaporwave', 'Dance']
|
||||
2025-07-28 15:58:23 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Affectwave: ['witch house']
|
||||
2025-07-28 15:58:26 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Afrojack: ['edm', 'Electronic', 'Dance']
|
||||
2025-07-28 15:58:27 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for after noon: ['lo-fi', 'lo-fi beats', 'Rap/Hip Hop']
|
||||
2025-07-28 15:58:38 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Air: ['downtempo', 'trip hop']
|
||||
2025-07-28 15:58:39 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Air: ['Comedy/Spoken', 'Pop/Rock', 'Electronic', 'downtempo', 'trip hop']
|
||||
2025-07-28 15:58:42 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Aisha Badru: ['Electro', 'Alternative', 'Folk', 'Pop/Rock', 'Singer & Songwriter']
|
||||
2025-07-28 15:58:44 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for AiYo: ['Pop', 'R&B', 'Rap/Hip Hop']
|
||||
2025-07-28 15:58:45 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for AJ Suede: ['underground hip hop']
|
||||
2025-07-28 15:58:47 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for AK420: ['lo-fi beats', 'jazz rap', 'Rap/Hip Hop', 'jazz beats', 'boom bap']
|
||||
2025-07-28 15:58:49 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for AkaHendy: ['Dubstep', 'Electro', 'chillstep', 'Dance', 'Chill Out/Trip hop/Lounge']
|
||||
2025-07-28 15:58:50 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Akal Dub: ['Electro', 'Chill Out/Trip-Hop/Lounge', 'Techno/House']
|
||||
2025-07-28 15:58:51 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Akhmedov: ['Electro', 'phonk', 'brazilian phonk', 'Dance']
|
||||
2025-07-28 15:58:58 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Akira The Don: ['Rock', 'spoken word', 'Electro', 'Pop', 'Rap/Hip Hop']
|
||||
2025-07-28 15:58:59 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for akitakita: ['Electro', 'breakcore', 'jungle', 'Alternative', 'Dance', 'Indie Pop']
|
||||
2025-07-28 15:59:04 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Al'Tarba: ['Electro', 'Chill Out/Trip-Hop/Lounge', 'Dance', 'Rap/Hip Hop']
|
||||
2025-07-28 15:59:06 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alan: ['Electro', 'Dance']
|
||||
2025-07-28 15:59:07 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alan Walker: ['edm', 'Electronic']
|
||||
2025-07-28 15:59:09 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alanis Morissette: ['Pop/Rock', 'Stage & Screen', 'Pop', 'New Age']
|
||||
2025-07-28 15:59:13 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Albee Al: ['Rap/Hip Hop']
|
||||
2025-07-28 15:59:14 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Albert Collins: ['blues rock', 'classic blues', 'blues']
|
||||
2025-07-28 15:59:15 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alberta Cross: ['Indie Pop', 'Alternative']
|
||||
2025-07-28 15:59:16 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alberto Droguett: ['lo-fi beats', 'lo-fi hip hop', 'lo-fi', 'jazz beats', 'Rap/Hip Hop']
|
||||
2025-07-28 15:59:19 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for alcinous: ['Electro', 'lo-fi beats', 'Alternative', 'Pop', 'lo-fi', 'Rap/Hip Hop', 'dark ambient']
|
||||
2025-07-28 15:59:24 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alecs Delarge: ['lo-fi beats', 'jazz beats', 'Rap/Hip Hop']
|
||||
2025-07-28 15:59:25 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alejandro Sanz: ['Pop internacional', 'italo dance', 'Pop']
|
||||
2025-07-28 15:59:29 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alesso: ['Pop/Rock', 'Electronic']
|
||||
2025-07-28 15:59:31 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Aletta Vilkier: ['Electro', 'vaporwave', 'Alternative', 'Pop', 'Dance', 'Latin Music']
|
||||
2025-07-28 15:59:35 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alex Boychuk: ['chillwave', 'synthwave', 'vaporwave']
|
||||
2025-07-28 15:59:38 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 15:59:38 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 15:59:38 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 15:59:38 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 15:59:38 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 15:59:38 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 15:59:38 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 15:59:47 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alex Sensation: ['Rap', 'reggaeton']
|
||||
2025-07-28 15:59:48 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alex Somers: ['Electro', 'Electronic', 'ambient', 'Pop/Rock', 'Alternativo', 'post-rock']
|
||||
2025-07-28 15:59:49 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alex The Flipper: ['Electro', 'Pop', 'Rap/Hip Hop']
|
||||
2025-07-28 15:59:56 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alfie-Jay Winters: ['Alternative']
|
||||
2025-07-28 16:00:01 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Algiers: ['Pop/Rock', 'Alternativo', 'post-punk']
|
||||
2025-07-28 16:00:02 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Ali Gatie: ['Pop/Rock', 'Pop', 'R&B', 'Rap/Hip Hop']
|
||||
2025-07-28 16:00:03 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Ali Whales: ['german hip hop', 'Rap/Hip Hop']
|
||||
2025-07-28 16:00:06 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alien Cake Music: ['Pop', 'grunge', 'lo-fi', 'Film Scores', 'Alternative', 'pop punk', 'Films/Games', 'Rap/Hip Hop']
|
||||
2025-07-28 16:00:08 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Alina Baraz: ['Electro', 'Electronic', 'Dance']
|
||||
2025-07-28 16:00:13 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for alixe.: ['Electro', 'ambient', 'Alternative', 'dark ambient']
|
||||
2025-07-28 16:00:15 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for All But 6: ['cloud rap', 'emo rap', 'horrorcore', 'underground hip hop', 'trap metal', 'Rap/Hip Hop']
|
||||
2025-07-28 16:00:20 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for The All-American Rejects: ['Pop/Rock', 'emo', 'pop punk']
|
||||
2025-07-28 16:00:21 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Allan Rayman: ['Rock', 'Alternative', 'R&B', 'Rap', 'Pop/Rock', 'Indie Rock']
|
||||
2025-07-28 16:00:25 - newmusic.main - [92mINFO[0m - closeEvent:295 - Closing application...
|
||||
2025-07-28 16:00:25 - newmusic.main - [92mINFO[0m - closeEvent:300 - Cleaning up Downloads page threads...
|
||||
2025-07-28 16:00:25 - newmusic.main - [92mINFO[0m - closeEvent:305 - Stopping status monitoring thread...
|
||||
2025-07-28 16:00:27 - newmusic.main - [92mINFO[0m - closeEvent:310 - Stopping search maintenance timer...
|
||||
2025-07-28 16:00:27 - newmusic.main - [92mINFO[0m - closeEvent:315 - Closing Soulseek client...
|
||||
2025-07-28 16:00:27 - newmusic.main - [92mINFO[0m - closeEvent:321 - Application closed successfully
|
||||
2025-07-28 16:00:31 - newmusic - [92mINFO[0m - setup_logging:57 - Logging initialized with level: DEBUG
|
||||
2025-07-28 16:00:31 - newmusic.main - [92mINFO[0m - main:335 - Starting NewMusic application
|
||||
2025-07-28 16:00:31 - newmusic.spotify_client - [92mINFO[0m - _setup_client:179 - Spotify client initialized (user info will be fetched when needed)
|
||||
2025-07-28 16:00:31 - newmusic.soulseek_client - [92mINFO[0m - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030
|
||||
2025-07-28 16:00:36 - newmusic.spotify_client - [92mINFO[0m - _setup_client:179 - Spotify client initialized (user info will be fetched when needed)
|
||||
2025-07-28 16:00:36 - newmusic.spotify_client - [92mINFO[0m - _setup_client:179 - Spotify client initialized (user info will be fetched when needed)
|
||||
2025-07-28 16:00:36 - newmusic.soulseek_client - [92mINFO[0m - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030
|
||||
2025-07-28 16:00:36 - newmusic.main - [92mINFO[0m - change_page:278 - Changed to page: dashboard
|
||||
2025-07-28 16:00:36 - newmusic.main - [92mINFO[0m - setup_media_player_connections:230 - Media player connections established between sidebar and downloads page
|
||||
2025-07-28 16:00:36 - newmusic.main - [92mINFO[0m - setup_settings_connections:235 - Settings change connections established
|
||||
2025-07-28 16:00:36 - newmusic.main - [92mINFO[0m - setup_search_maintenance:91 - Search maintenance timer started (every 2 minutes, keeps 200 most recent searches)
|
||||
2025-07-28 16:00:36 - newmusic.plex_client - [92mINFO[0m - _find_music_library:127 - Found music library: Music
|
||||
2025-07-28 16:00:36 - newmusic.plex_client - [92mINFO[0m - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE
|
||||
2025-07-28 16:01:42 - newmusic.plex_client - [92mINFO[0m - get_all_artists:425 - Found 3795 artists in Plex library
|
||||
2025-07-28 16:01:44 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for _tillus: ['lo-fi house', 'Rap/Hip Hop']
|
||||
2025-07-28 16:01:45 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for !Nxght: ['Electro', 'brazilian phonk']
|
||||
2025-07-28 16:01:47 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for $ebu: ['Electro', 'drift phonk', 'phonk', 'Dance', 'Rap/Hip Hop']
|
||||
2025-07-28 16:01:48 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for $uicideboy$: ['cloud rap', 'emo rap', 'trap metal', 'horrorcore', 'Rap', 'underground hip hop', 'Rap/Hip Hop']
|
||||
2025-07-28 16:01:49 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for $uicideboy$: ['cloud rap', 'emo rap', 'trap metal', 'horrorcore', 'underground hip hop']
|
||||
2025-07-28 16:01:50 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for $YANIC: ['Electro', 'phonk', 'brazilian phonk', 'Dance', 'Rap/Hip Hop', 'Soul & Funk']
|
||||
2025-07-28 16:01:52 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Ødyssee: ['Electro', 'lo-fi', 'lo-fi hip hop', 'Chill Out/Trip hop/Lounge', 'lo-fi beats', 'Rap/Hip Hop', 'jazz beats']
|
||||
2025-07-28 16:01:53 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Ødyzon: ['Electro', 'dark ambient', 'Alternative', 'ambient', 'Dance', 'Pop']
|
||||
2025-07-28 16:01:55 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Øneheart: ['Electro', 'Indie Pop', 'dark ambient', 'Alternative', 'ambient', 'Dance', 'Pop', 'Rap/Hip Hop']
|
||||
2025-07-28 16:01:56 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Øutgrown: ['Electro', 'lo-fi', 'Alternative', 'dark ambient']
|
||||
2025-07-28 16:01:58 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for The 2 Bears: ['Electro', 'Electronic', 'Dance', 'Techno/House', 'Pop/Rock']
|
||||
2025-07-28 16:02:00 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 2.brkn: ['Rap/Hip Hop', 'Indie Pop', 'Alternative']
|
||||
2025-07-28 16:02:04 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 2Pac: ['old school hip hop', 'gangster rap', 'Rap', 'hip hop', 'Pop/Rock', 'east coast hip hop']
|
||||
2025-07-28 16:02:05 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 2Rare: ['Rap/Hip Hop', 'jersey club', 'philly club']
|
||||
2025-07-28 16:02:07 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 3d Blast: ['vaporwave']
|
||||
2025-07-28 16:02:09 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 3LAU: ['edm', 'Electronic', 'dubstep', 'progressive house']
|
||||
2025-07-28 16:02:10 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 3TEETH: ['industrial', 'noise rock', 'witch house']
|
||||
2025-07-28 16:02:11 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 3x3cute: ['techno']
|
||||
2025-07-28 16:02:13 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 4batz: ['alternative r&b']
|
||||
2025-07-28 16:02:15 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 4Scythe: ['Alternative', 'Indie Rock', 'trap metal', 'horrorcore', 'Rap/Hip Hop']
|
||||
2025-07-28 16:02:17 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 5AM: ['Electro', 'glitch', 'bass music']
|
||||
2025-07-28 16:02:19 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 5MIINUST: ['Rap/Hip Hop']
|
||||
2025-07-28 16:02:20 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 6YNTHMANE: ['Electro', 'phonk', 'brazilian phonk']
|
||||
2025-07-28 16:02:21 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 7-Pm: ['Rap/Hip Hop', 'lo-fi', 'lo-fi beats']
|
||||
2025-07-28 16:02:25 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 7vvch: ['phonk', 'Dance', 'drift phonk']
|
||||
2025-07-28 16:02:28 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 9Lives: ['Rap/Hip Hop', 'hyperpop', 'nightcore']
|
||||
2025-07-28 16:02:31 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 18FEARS: ['Electro', 'dark ambient', 'ambient', 'Alternative']
|
||||
2025-07-28 16:02:36 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 16:02:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 16:02:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 16:02:36 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 50 Cent: ['rap', 'Rap', 'hip hop', 'Pop/Rock', 'Rap/Hip Hop']
|
||||
2025-07-28 16:02:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 16:02:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 16:02:36 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 16:02:36 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 16:02:39 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 81an: ['Electro', 'phonk', 'Dance']
|
||||
2025-07-28 16:02:40 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 88rising: ['Pop/Rock', 'R&B', 'Rap', 'Stage & Screen']
|
||||
2025-07-28 16:02:47 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 1788-L: ['Electronic', 'dubstep', 'Dance']
|
||||
2025-07-28 16:02:53 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for a-ha: ['Pop/Rock', 'new wave', 'synthpop']
|
||||
2025-07-28 16:02:54 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A-Trak: ['downtempo', 'Electronic', 'french house', 'french indie pop']
|
||||
2025-07-28 16:02:55 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A. G. Cook: ['Pop/Rock', 'hyperpop', 'Electronic']
|
||||
2025-07-28 16:02:56 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A.e.r.o.: ['Electro', 'Chill Out/Trip hop/Lounge', 'ambient', 'space music']
|
||||
2025-07-28 16:02:59 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A.L.I.S.O.N: ['Electro', 'chillwave', 'Dance', 'synthwave', 'vaporwave']
|
||||
2025-07-28 16:03:01 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A$AP Ferg: ['Rap/Hip Hop', 'rap', 'Rap']
|
||||
2025-07-28 16:03:02 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A$AP Rocky: ['rap', 'Rap']
|
||||
2025-07-28 16:03:15 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Abakus: ['Electro', 'Electronic', 'Chill Out/Trip hop/Lounge', 'Dance', 'downtempo', 'Rap/Hip Hop']
|
||||
2025-07-28 16:03:17 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Abe M Beats: ['Rap/Hip Hop']
|
||||
2025-07-28 16:03:18 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Abigail Washburn: ['Folk', 'newgrass', 'folk', 'americana', 'bluegrass', 'Country']
|
||||
2025-07-28 16:03:20 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Above & Beyond: ['trance', 'progressive house', 'progressive trance']
|
||||
2025-07-28 16:03:22 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Abra Cadabra: ['drill', 'R&B', 'afroswing', 'grime', 'uk grime', 'Rap', 'Rap/Hip Hop', 'uk drill']
|
||||
2025-07-28 16:03:23 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Absolute Valentine: ['synthwave', 'vaporwave']
|
||||
2025-07-28 16:03:25 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for AC/DC: ['Pop/Rock', 'classic rock', 'Stage & Screen', 'rock']
|
||||
2025-07-28 16:03:26 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Accomplice: ['Rap/Hip Hop', 'dubstep']
|
||||
2025-07-28 16:03:29 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Acedox: ['Rap/Hip Hop', 'merengue']
|
||||
2025-07-28 16:03:31 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Acey: ['Electro', 'Indie Pop', 'R&B', 'Alternative', 'Pop', 'African Music', 'Rap/Hip Hop']
|
||||
2025-07-28 16:03:32 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for achorda: ['Electro', 'dark ambient', 'ambient', 'Alternative']
|
||||
2025-07-28 16:03:33 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for acidcrvsh: ['Electro', 'breakcore', 'Dance', 'jungle']
|
||||
2025-07-28 16:03:37 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adam Beyer: ['Electro', 'Dance']
|
||||
2025-07-28 16:03:41 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adam Ford: ['Electro', 'Alternative', 'chillwave', 'Indie Rock', 'synthwave', 'vaporwave']
|
||||
2025-07-28 16:03:46 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adeki: ['alté', 'afrobeats', 'afro soul', 'Electro', 'afropiano', 'afroswing', 'afropop', 'Películas/Juegos', 'Pop', 'afrobeat']
|
||||
2025-07-28 16:03:47 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adekunle Gold: ['afrobeats', 'R&B', 'afropiano', 'afropop', 'afrobeat', 'African Music']
|
||||
2025-07-28 16:03:49 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adele: ['Pop/Rock', 'soft pop']
|
||||
2025-07-28 16:03:52 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adieu Aru: ['Electro', 'chillwave', 'Dance', 'synthwave', 'vaporwave']
|
||||
2025-07-28 16:03:53 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for ADIV CULTURE: ['Rap/Hip Hop', 'brazilian trap']
|
||||
2025-07-28 16:03:55 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Admo: ['Electro', 'chillwave', 'Dance', 'synthwave', 'Techno/House', 'vaporwave']
|
||||
2025-07-28 16:03:56 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Admo: ['Electro', 'chillwave', 'Alternativo', 'synthwave', 'Techno/House', 'vaporwave']
|
||||
2025-07-28 16:03:57 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adrian Quesada: ['retro soul', 'Latin', 'R&B']
|
||||
2025-07-28 16:03:59 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Adrian Underhill: ['Indie Pop', 'R&B', 'Alternative', 'Pop']
|
||||
2025-07-28 16:04:05 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for aespa: ['Pop/Rock', 'k-pop', 'International']
|
||||
2025-07-28 16:04:11 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Aexion: ['Electro', 'Dance', 'vaporwave']
|
||||
2025-07-28 16:04:13 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Affectwave: ['witch house']
|
||||
2025-07-28 16:04:17 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Afrojack: ['edm', 'Electronic', 'Dance']
|
||||
2025-07-28 16:04:18 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for after noon: ['Rap/Hip Hop', 'lo-fi', 'lo-fi beats']
|
||||
2025-07-28 16:04:28 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Air: ['trip hop', 'downtempo']
|
||||
2025-07-28 16:04:29 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Air: ['trip hop', 'Electronic', 'Comedy/Spoken', 'downtempo', 'Pop/Rock']
|
||||
2025-07-28 16:04:32 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Aisha Badru: ['Electro', 'Folk', 'Singer & Songwriter', 'Alternative', 'Pop/Rock']
|
||||
2025-07-28 16:04:34 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for AiYo: ['Rap/Hip Hop', 'R&B', 'Pop']
|
||||
2025-07-28 16:04:35 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for AJ Suede: ['underground hip hop']
|
||||
2025-07-28 16:04:36 - newmusic.soulseek_client - [94mDEBUG[0m - get_all_searches:952 - Getting all searches with endpoint: searches
|
||||
2025-07-28 16:04:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:242 - Making GET request to: http://localhost:5030/api/v0/searches
|
||||
2025-07-28 16:04:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:243 - Headers: {'Content-Type': 'application/json', 'X-API-Key': '1234567891234567'}
|
||||
2025-07-28 16:04:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:254 - Response status: 200
|
||||
2025-07-28 16:04:36 - newmusic.soulseek_client - [94mDEBUG[0m - _make_request:255 - Response text: [{"endedAt":"2025-07-27T21:28:19.7264233Z","fileCount":13,"id":"41b335b7-58a3-4201-8506-22e0954564eb","isComplete":true,"lockedFileCount":0,"responseCount":12,"responses":[],"searchText":"Tommy Cash Baba Yaga","startedAt":"2025-07-27T21:28:02.1709869Z","state":"Completed, TimedOut","token":80},{"endedAt":"2025-07-27T21:28:20.4645342Z","fileCount":5,"id":"7e66f9a9-00ac-451b-a199-5f6a7f18930c","isComplete":true,"lockedFileCount":0,"responseCount":5,"responses":[],"searchText":"Tommy Cash SugaSuga"...
|
||||
2025-07-28 16:04:36 - newmusic.soulseek_client - [92mINFO[0m - get_all_searches:957 - Retrieved 106 searches from slskd
|
||||
2025-07-28 16:04:36 - newmusic.soulseek_client - [94mDEBUG[0m - maintain_search_history:1058 - Search count (106) within limit (200), no maintenance needed
|
||||
2025-07-28 16:04:37 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for AK420: ['jazz rap', 'boom bap', 'lo-fi beats', 'Rap/Hip Hop', 'jazz beats']
|
||||
2025-07-28 16:04:39 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for AkaHendy: ['Electro', 'Chill Out/Trip hop/Lounge', 'Dance', 'chillstep', 'Dubstep']
|
||||
2025-07-28 16:04:40 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Akal Dub: ['Electro', 'Chill Out/Trip-Hop/Lounge', 'Techno/House']
|
||||
2025-07-28 16:04:41 - newmusic.main - [92mINFO[0m - closeEvent:295 - Closing application...
|
||||
2025-07-28 16:04:41 - newmusic.main - [92mINFO[0m - closeEvent:300 - Cleaning up Downloads page threads...
|
||||
2025-07-28 16:04:41 - newmusic.main - [92mINFO[0m - closeEvent:305 - Stopping status monitoring thread...
|
||||
2025-07-28 16:04:43 - newmusic.main - [92mINFO[0m - closeEvent:310 - Stopping search maintenance timer...
|
||||
2025-07-28 16:04:43 - newmusic.main - [92mINFO[0m - closeEvent:315 - Closing Soulseek client...
|
||||
2025-07-28 16:04:43 - newmusic.main - [92mINFO[0m - closeEvent:321 - Application closed successfully
|
||||
2025-07-28 16:04:51 - newmusic - [92mINFO[0m - setup_logging:57 - Logging initialized with level: DEBUG
|
||||
2025-07-28 16:04:51 - newmusic.main - [92mINFO[0m - main:335 - Starting NewMusic application
|
||||
2025-07-28 16:04:51 - newmusic.spotify_client - [92mINFO[0m - _setup_client:179 - Spotify client initialized (user info will be fetched when needed)
|
||||
2025-07-28 16:04:51 - newmusic.soulseek_client - [92mINFO[0m - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030
|
||||
2025-07-28 16:04:51 - newmusic.spotify_client - [92mINFO[0m - _setup_client:179 - Spotify client initialized (user info will be fetched when needed)
|
||||
2025-07-28 16:04:51 - newmusic.spotify_client - [92mINFO[0m - _setup_client:179 - Spotify client initialized (user info will be fetched when needed)
|
||||
2025-07-28 16:04:51 - newmusic.soulseek_client - [92mINFO[0m - _setup_client:220 - Soulseek client configured with slskd at http://localhost:5030
|
||||
2025-07-28 16:04:51 - newmusic.main - [92mINFO[0m - change_page:278 - Changed to page: dashboard
|
||||
2025-07-28 16:04:51 - newmusic.main - [92mINFO[0m - setup_media_player_connections:230 - Media player connections established between sidebar and downloads page
|
||||
2025-07-28 16:04:51 - newmusic.main - [92mINFO[0m - setup_settings_connections:235 - Settings change connections established
|
||||
2025-07-28 16:04:51 - newmusic.main - [92mINFO[0m - setup_search_maintenance:91 - Search maintenance timer started (every 2 minutes, keeps 200 most recent searches)
|
||||
2025-07-28 16:04:51 - newmusic.plex_client - [92mINFO[0m - _find_music_library:127 - Found music library: Music
|
||||
2025-07-28 16:04:51 - newmusic.plex_client - [92mINFO[0m - _setup_client:113 - Successfully connected to Plex server: PLEX-MACHINE
|
||||
2025-07-28 16:04:57 - newmusic.plex_client - [92mINFO[0m - get_all_artists:425 - Found 3795 artists in Plex library
|
||||
2025-07-28 16:04:59 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for _tillus: ['Rap/Hip Hop', 'lo-fi house']
|
||||
2025-07-28 16:05:00 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for !Nxght: ['brazilian phonk', 'Electro']
|
||||
2025-07-28 16:05:02 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for $ebu: ['phonk', 'drift phonk', 'Electro', 'Dance', 'Rap/Hip Hop']
|
||||
2025-07-28 16:05:03 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for $uicideboy$: ['horrorcore', 'emo rap', 'Rap', 'cloud rap', 'Rap/Hip Hop', 'underground hip hop', 'trap metal']
|
||||
2025-07-28 16:05:04 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for $uicideboy$: ['horrorcore', 'emo rap', 'cloud rap', 'underground hip hop', 'trap metal']
|
||||
2025-07-28 16:05:05 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for $YANIC: ['phonk', 'Electro', 'Rap/Hip Hop', 'Dance', 'brazilian phonk', 'Soul & Funk']
|
||||
2025-07-28 16:05:07 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Ødyssee: ['lo-fi', 'Chill Out/Trip hop/Lounge', 'jazz beats', 'lo-fi beats', 'Electro', 'lo-fi hip hop', 'Rap/Hip Hop']
|
||||
2025-07-28 16:05:08 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Ødyzon: ['Electro', 'ambient', 'Alternative', 'Dance', 'Pop', 'dark ambient']
|
||||
2025-07-28 16:05:09 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Øneheart: ['Indie Pop', 'Electro', 'ambient', 'Alternative', 'Dance', 'Pop', 'Rap/Hip Hop', 'dark ambient']
|
||||
2025-07-28 16:05:10 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for Øutgrown: ['lo-fi', 'Alternative', 'dark ambient', 'Electro']
|
||||
2025-07-28 16:05:13 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for The 2 Bears: ['Electronic', 'Electro', 'Dance', 'Pop/Rock', 'Techno/House']
|
||||
2025-07-28 16:05:15 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 2.brkn: ['Rap/Hip Hop', 'Alternative', 'Indie Pop']
|
||||
2025-07-28 16:05:18 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 2Pac: ['hip hop', 'gangster rap', 'Rap', 'east coast hip hop', 'Pop/Rock', 'old school hip hop']
|
||||
2025-07-28 16:05:20 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 2Rare: ['philly club', 'Rap/Hip Hop', 'jersey club']
|
||||
2025-07-28 16:05:22 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 3d Blast: ['vaporwave']
|
||||
2025-07-28 16:05:23 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 3LAU: ['dubstep', 'Electronic', 'progressive house', 'edm']
|
||||
2025-07-28 16:05:24 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 3TEETH: ['witch house', 'industrial', 'noise rock']
|
||||
2025-07-28 16:05:25 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 3x3cute: ['techno']
|
||||
2025-07-28 16:05:27 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 4batz: ['alternative r&b']
|
||||
2025-07-28 16:05:29 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 4Scythe: ['horrorcore', 'Indie Rock', 'Alternative', 'Rap/Hip Hop', 'trap metal']
|
||||
2025-07-28 16:05:31 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 5AM: ['glitch', 'bass music', 'Electro']
|
||||
2025-07-28 16:05:33 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 5MIINUST: ['Rap/Hip Hop']
|
||||
2025-07-28 16:05:34 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 6YNTHMANE: ['brazilian phonk', 'phonk', 'Electro']
|
||||
2025-07-28 16:05:35 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 7-Pm: ['lo-fi beats', 'lo-fi', 'Rap/Hip Hop']
|
||||
2025-07-28 16:05:40 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 7vvch: ['phonk', 'Dance', 'drift phonk']
|
||||
2025-07-28 16:05:42 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 9Lives: ['nightcore', 'Rap/Hip Hop', 'hyperpop']
|
||||
2025-07-28 16:05:46 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 18FEARS: ['Alternative', 'dark ambient', 'Electro', 'ambient']
|
||||
2025-07-28 16:05:52 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 50 Cent: ['rap', 'hip hop', 'Rap', 'Rap/Hip Hop', 'Pop/Rock']
|
||||
2025-07-28 16:05:55 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 81an: ['phonk', 'Dance', 'Electro']
|
||||
2025-07-28 16:05:56 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 88rising: ['R&B', 'Pop/Rock', 'Stage & Screen', 'Rap']
|
||||
2025-07-28 16:06:03 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for 1788-L: ['dubstep', 'Electronic', 'Dance']
|
||||
2025-07-28 16:06:09 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for a-ha: ['new wave', 'Pop/Rock', 'synthpop']
|
||||
2025-07-28 16:06:10 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A-Trak: ['french house', 'Electronic', 'downtempo', 'french indie pop']
|
||||
2025-07-28 16:06:11 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A. G. Cook: ['Pop/Rock', 'Electronic', 'hyperpop']
|
||||
2025-07-28 16:06:12 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A.e.r.o.: ['space music', 'Chill Out/Trip hop/Lounge', 'Electro', 'ambient']
|
||||
2025-07-28 16:06:15 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A.L.I.S.O.N: ['Electro', 'synthwave', 'Dance', 'chillwave', 'vaporwave']
|
||||
2025-07-28 16:06:17 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A$AP Ferg: ['Rap/Hip Hop', 'rap', 'Rap']
|
||||
2025-07-28 16:06:19 - newmusic.plex_client - [92mINFO[0m - update_artist_genres:442 - Updated genres for A$AP Rocky: ['rap', 'Rap']
|
||||
2025-07-28 16:06:48 - newmusic.main - [92mINFO[0m - closeEvent:295 - Closing application...
|
||||
2025-07-28 16:06:48 - newmusic.main - [92mINFO[0m - closeEvent:300 - Cleaning up Downloads page threads...
|
||||
2025-07-28 16:06:48 - newmusic.main - [92mINFO[0m - closeEvent:305 - Stopping status monitoring thread...
|
||||
2025-07-28 16:06:49 - newmusic.main - [92mINFO[0m - closeEvent:310 - Stopping search maintenance timer...
|
||||
2025-07-28 16:06:49 - newmusic.main - [92mINFO[0m - closeEvent:315 - Closing Soulseek client...
|
||||
2025-07-28 16:06:49 - newmusic.main - [92mINFO[0m - closeEvent:321 - Application closed successfully
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -15,6 +15,276 @@ import os
|
|||
from typing import Optional, Dict, Any
|
||||
from datetime import datetime
|
||||
from dataclasses import dataclass
|
||||
import requests
|
||||
from PIL import Image
|
||||
import io
|
||||
|
||||
class MetadataUpdateWorker(QThread):
|
||||
"""Worker thread for updating Plex artist metadata using Spotify data"""
|
||||
progress_updated = pyqtSignal(str, int, int, float) # current_artist, processed, total, percentage
|
||||
artist_updated = pyqtSignal(str, bool, str) # artist_name, success, details
|
||||
finished = pyqtSignal(int, int, int) # total_processed, successful, failed
|
||||
error = pyqtSignal(str) # error_message
|
||||
artists_loaded = pyqtSignal(int, int) # total_artists, artists_to_process
|
||||
|
||||
def __init__(self, artists, plex_client, spotify_client):
|
||||
super().__init__()
|
||||
self.artists = artists
|
||||
self.plex_client = plex_client
|
||||
self.spotify_client = spotify_client
|
||||
self.should_stop = False
|
||||
self.processed_count = 0
|
||||
self.successful_count = 0
|
||||
self.failed_count = 0
|
||||
|
||||
def stop(self):
|
||||
self.should_stop = True
|
||||
|
||||
def run(self):
|
||||
"""Process all artists one by one"""
|
||||
try:
|
||||
# Load artists in background if not provided
|
||||
if self.artists is None:
|
||||
all_artists = self.plex_client.get_all_artists()
|
||||
if not all_artists:
|
||||
self.error.emit("No artists found in Plex library")
|
||||
return
|
||||
|
||||
# Filter artists that need processing
|
||||
artists_to_process = [artist for artist in all_artists if self.artist_needs_processing(artist)]
|
||||
self.artists = artists_to_process
|
||||
|
||||
# Emit loaded signal
|
||||
self.artists_loaded.emit(len(all_artists), len(artists_to_process))
|
||||
|
||||
if not artists_to_process:
|
||||
self.finished.emit(0, 0, 0)
|
||||
return
|
||||
|
||||
total_artists = len(self.artists)
|
||||
|
||||
for i, artist in enumerate(self.artists):
|
||||
if self.should_stop:
|
||||
break
|
||||
|
||||
artist_name = getattr(artist, 'title', 'Unknown Artist')
|
||||
self.progress_updated.emit(artist_name, i, total_artists, (i / total_artists) * 100)
|
||||
|
||||
try:
|
||||
success, details = self.update_artist_metadata(artist)
|
||||
self.processed_count += 1
|
||||
|
||||
if success:
|
||||
self.successful_count += 1
|
||||
else:
|
||||
self.failed_count += 1
|
||||
|
||||
self.artist_updated.emit(artist_name, success, details)
|
||||
|
||||
except Exception as e:
|
||||
self.failed_count += 1
|
||||
self.artist_updated.emit(artist_name, False, f"Error: {str(e)}")
|
||||
|
||||
# Small delay to prevent overwhelming the APIs
|
||||
self.msleep(500)
|
||||
|
||||
self.finished.emit(self.processed_count, self.successful_count, self.failed_count)
|
||||
|
||||
except Exception as e:
|
||||
self.error.emit(f"Metadata update failed: {str(e)}")
|
||||
|
||||
def artist_needs_processing(self, artist):
|
||||
"""Check if an artist needs metadata processing using smart detection"""
|
||||
try:
|
||||
# Check if artist has a valid photo
|
||||
has_valid_photo = self.artist_has_valid_photo(artist)
|
||||
|
||||
# Check if artist has genres (more than just basic ones)
|
||||
existing_genres = set(genre.tag if hasattr(genre, 'tag') else str(genre)
|
||||
for genre in (artist.genres or []))
|
||||
has_good_genres = len(existing_genres) >= 2 # At least 2 genres indicates Spotify processing
|
||||
|
||||
# Process if missing photo OR insufficient genres
|
||||
return not has_valid_photo or not has_good_genres
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error checking artist {getattr(artist, 'title', 'Unknown')}: {e}")
|
||||
return True # Process if we can't determine status
|
||||
|
||||
def update_artist_metadata(self, artist):
|
||||
"""Update a single artist's metadata"""
|
||||
try:
|
||||
artist_name = getattr(artist, 'title', 'Unknown Artist')
|
||||
|
||||
# Search for artist on Spotify
|
||||
spotify_artists = self.spotify_client.search_artists(artist_name, limit=1)
|
||||
if not spotify_artists:
|
||||
return False, "Not found on Spotify"
|
||||
|
||||
spotify_artist = spotify_artists[0]
|
||||
changes_made = []
|
||||
|
||||
# Update photo if needed
|
||||
photo_updated = self.update_artist_photo(artist, spotify_artist)
|
||||
if photo_updated:
|
||||
changes_made.append("photo")
|
||||
|
||||
# Update genres
|
||||
genres_updated = self.update_artist_genres(artist, spotify_artist)
|
||||
if genres_updated:
|
||||
changes_made.append("genres")
|
||||
|
||||
if changes_made:
|
||||
return True, f"Updated {', '.join(changes_made)}"
|
||||
else:
|
||||
return True, "Already up to date"
|
||||
|
||||
except Exception as e:
|
||||
return False, str(e)
|
||||
|
||||
def update_artist_photo(self, artist, spotify_artist):
|
||||
"""Update artist photo from Spotify"""
|
||||
try:
|
||||
# Check if artist already has a good photo
|
||||
if self.artist_has_valid_photo(artist):
|
||||
return False
|
||||
|
||||
# Get the largest image from Spotify
|
||||
if not spotify_artist.get('images'):
|
||||
return False
|
||||
|
||||
largest_image = max(spotify_artist['images'], key=lambda x: x['width'] * x['height'])
|
||||
image_url = largest_image['url']
|
||||
|
||||
# Download and validate image
|
||||
response = requests.get(image_url, timeout=10)
|
||||
response.raise_for_status()
|
||||
|
||||
# Validate and convert image
|
||||
image_data = self.validate_and_convert_image(response.content)
|
||||
if not image_data:
|
||||
return False
|
||||
|
||||
# Upload to Plex
|
||||
return self.upload_artist_poster(artist, image_data)
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error updating photo for {getattr(artist, 'title', 'Unknown')}: {e}")
|
||||
return False
|
||||
|
||||
def update_artist_genres(self, artist, spotify_artist):
|
||||
"""Update artist genres from Spotify and albums"""
|
||||
try:
|
||||
# Get existing genres
|
||||
existing_genres = set(genre.tag if hasattr(genre, 'tag') else str(genre)
|
||||
for genre in (artist.genres or []))
|
||||
|
||||
# Get Spotify artist genres
|
||||
spotify_genres = set(spotify_artist.get('genres', []))
|
||||
|
||||
# Get genres from all albums
|
||||
album_genres = set()
|
||||
try:
|
||||
for album in artist.albums():
|
||||
if hasattr(album, 'genres') and album.genres:
|
||||
album_genres.update(genre.tag if hasattr(genre, 'tag') else str(genre)
|
||||
for genre in album.genres)
|
||||
except Exception:
|
||||
pass # Albums might not be accessible
|
||||
|
||||
# Combine all genres (prioritize Spotify genres)
|
||||
all_genres = spotify_genres.union(album_genres)
|
||||
|
||||
# Filter out empty/invalid genres
|
||||
all_genres = {g for g in all_genres if g and g.strip() and len(g.strip()) > 1}
|
||||
|
||||
print(f"[DEBUG] Artist '{artist.title}': Existing={existing_genres}, Spotify={spotify_genres}, Albums={album_genres}, Combined={all_genres}")
|
||||
|
||||
# Only update if we have new genres and they're different
|
||||
if all_genres and (not existing_genres or all_genres != existing_genres):
|
||||
# Convert to list and limit to 10 genres
|
||||
genre_list = list(all_genres)[:10]
|
||||
|
||||
print(f"[DEBUG] Updating genres for '{artist.title}' to: {genre_list}")
|
||||
|
||||
# Use Plex API to update genres
|
||||
success = self.plex_client.update_artist_genres(artist, genre_list)
|
||||
if success:
|
||||
print(f"[DEBUG] Successfully updated genres for '{artist.title}'")
|
||||
return True
|
||||
else:
|
||||
print(f"[DEBUG] Failed to update genres for '{artist.title}'")
|
||||
return False
|
||||
else:
|
||||
print(f"[DEBUG] No genre update needed for '{artist.title}' - already has good genres")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error updating genres for {getattr(artist, 'title', 'Unknown')}: {e}")
|
||||
return False
|
||||
|
||||
def artist_has_valid_photo(self, artist):
|
||||
"""Check if artist has a valid photo"""
|
||||
try:
|
||||
if not hasattr(artist, 'thumb') or not artist.thumb:
|
||||
return False
|
||||
|
||||
thumb_url = str(artist.thumb)
|
||||
if 'default' in thumb_url.lower() or len(thumb_url) < 50:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def validate_and_convert_image(self, image_data):
|
||||
"""Validate and convert image for Plex compatibility"""
|
||||
try:
|
||||
# Open and validate image
|
||||
image = Image.open(io.BytesIO(image_data))
|
||||
|
||||
# Check minimum dimensions
|
||||
width, height = image.size
|
||||
if width < 200 or height < 200:
|
||||
return None
|
||||
|
||||
# Convert to JPEG for consistency
|
||||
if image.format != 'JPEG':
|
||||
buffer = io.BytesIO()
|
||||
image.convert('RGB').save(buffer, format='JPEG', quality=95)
|
||||
return buffer.getvalue()
|
||||
|
||||
return image_data
|
||||
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
def upload_artist_poster(self, artist, image_data):
|
||||
"""Upload poster to Plex"""
|
||||
try:
|
||||
# Use Plex client's update method if available
|
||||
if hasattr(self.plex_client, 'update_artist_poster'):
|
||||
return self.plex_client.update_artist_poster(artist, image_data)
|
||||
|
||||
# Fallback: direct Plex API call
|
||||
server = self.plex_client.server
|
||||
upload_url = f"{server._baseurl}/library/metadata/{artist.ratingKey}/posters"
|
||||
headers = {
|
||||
'X-Plex-Token': server._token,
|
||||
'Content-Type': 'image/jpeg'
|
||||
}
|
||||
|
||||
response = requests.post(upload_url, data=image_data, headers=headers)
|
||||
response.raise_for_status()
|
||||
|
||||
# Refresh artist to see changes
|
||||
artist.refresh()
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error uploading poster: {e}")
|
||||
return False
|
||||
|
||||
@dataclass
|
||||
class ServiceStatus:
|
||||
|
|
@ -884,17 +1154,121 @@ class DashboardPage(QWidget):
|
|||
|
||||
def toggle_metadata_update(self):
|
||||
"""Toggle metadata update process"""
|
||||
# This will be implemented with actual functionality later
|
||||
# For now, just show placeholder behavior
|
||||
current_text = self.metadata_widget.start_button.text()
|
||||
if "Begin" in current_text:
|
||||
# Start metadata update (placeholder)
|
||||
self.metadata_widget.update_progress(True, "Sample Artist", 0, 100, 0.0)
|
||||
self.add_activity_item("🎵", "Metadata Update", "Started Plex metadata update process", "Now")
|
||||
# Start metadata update
|
||||
self.start_metadata_update()
|
||||
else:
|
||||
# Stop metadata update (placeholder)
|
||||
self.metadata_widget.update_progress(False, "", 0, 0, 0.0)
|
||||
self.add_activity_item("⏹️", "Metadata Update", "Stopped metadata update process", "Now")
|
||||
# Stop metadata update
|
||||
self.stop_metadata_update()
|
||||
|
||||
def start_metadata_update(self):
|
||||
"""Start the Plex metadata update process"""
|
||||
if not hasattr(self, 'data_provider') or not self.data_provider.service_clients.get('plex'):
|
||||
self.add_activity_item("❌", "Metadata Update", "Plex client not available", "Now")
|
||||
return
|
||||
|
||||
if not self.data_provider.service_clients.get('spotify'):
|
||||
self.add_activity_item("❌", "Metadata Update", "Spotify client not available", "Now")
|
||||
return
|
||||
|
||||
try:
|
||||
# Start the metadata update worker (it will handle artist retrieval in background)
|
||||
self.metadata_worker = MetadataUpdateWorker(
|
||||
None, # Artists will be loaded in the worker thread
|
||||
self.data_provider.service_clients['plex'],
|
||||
self.data_provider.service_clients['spotify']
|
||||
)
|
||||
|
||||
# Connect signals
|
||||
self.metadata_worker.progress_updated.connect(self.on_metadata_progress)
|
||||
self.metadata_worker.artist_updated.connect(self.on_artist_updated)
|
||||
self.metadata_worker.finished.connect(self.on_metadata_finished)
|
||||
self.metadata_worker.error.connect(self.on_metadata_error)
|
||||
self.metadata_worker.artists_loaded.connect(self.on_artists_loaded)
|
||||
|
||||
# Update UI and start
|
||||
self.metadata_widget.update_progress(True, "Loading artists...", 0, 0, 0.0)
|
||||
self.add_activity_item("🎵", "Metadata Update", "Loading artists from Plex library...", "Now")
|
||||
|
||||
self.metadata_worker.start()
|
||||
|
||||
except Exception as e:
|
||||
self.add_activity_item("❌", "Metadata Update", f"Failed to start: {str(e)}", "Now")
|
||||
|
||||
def on_artists_loaded(self, total_artists, artists_to_process):
|
||||
"""Handle when artists are loaded and filtered"""
|
||||
if artists_to_process == 0:
|
||||
self.add_activity_item("✅", "Metadata Update", "All artists already have good metadata", "Now")
|
||||
else:
|
||||
self.add_activity_item("🎵", "Metadata Update", f"Processing {artists_to_process} of {total_artists} artists", "Now")
|
||||
|
||||
def stop_metadata_update(self):
|
||||
"""Stop the metadata update process"""
|
||||
if hasattr(self, 'metadata_worker') and self.metadata_worker.isRunning():
|
||||
self.metadata_worker.stop()
|
||||
self.metadata_worker.wait(3000) # Wait up to 3 seconds
|
||||
if self.metadata_worker.isRunning():
|
||||
self.metadata_worker.terminate()
|
||||
|
||||
self.metadata_widget.update_progress(False, "", 0, 0, 0.0)
|
||||
self.add_activity_item("⏹️", "Metadata Update", "Stopped metadata update process", "Now")
|
||||
|
||||
def artist_needs_processing(self, artist):
|
||||
"""Check if an artist needs metadata processing using smart detection"""
|
||||
try:
|
||||
# Check if artist has a valid photo
|
||||
has_valid_photo = self.artist_has_valid_photo(artist)
|
||||
|
||||
# Check if artist has genres (more than just basic ones)
|
||||
existing_genres = set(genre.tag if hasattr(genre, 'tag') else str(genre)
|
||||
for genre in (artist.genres or []))
|
||||
has_good_genres = len(existing_genres) >= 2 # At least 2 genres indicates Spotify processing
|
||||
|
||||
# Process if missing photo OR insufficient genres
|
||||
return not has_valid_photo or not has_good_genres
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error checking artist {getattr(artist, 'title', 'Unknown')}: {e}")
|
||||
return True # Process if we can't determine status
|
||||
|
||||
def artist_has_valid_photo(self, artist):
|
||||
"""Check if artist has a valid photo"""
|
||||
try:
|
||||
if not hasattr(artist, 'thumb') or not artist.thumb:
|
||||
return False
|
||||
|
||||
# Quick check for suspicious URLs (default Plex placeholders often contain 'default' or are very short)
|
||||
thumb_url = str(artist.thumb)
|
||||
if 'default' in thumb_url.lower() or len(thumb_url) < 50:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def on_metadata_progress(self, current_artist, processed, total, percentage):
|
||||
"""Handle metadata update progress"""
|
||||
self.metadata_widget.update_progress(True, current_artist, processed, total, percentage)
|
||||
|
||||
def on_artist_updated(self, artist_name, success, details):
|
||||
"""Handle individual artist update completion"""
|
||||
if success:
|
||||
self.add_activity_item("✅", "Artist Updated", f"'{artist_name}' - {details}", "Now")
|
||||
else:
|
||||
self.add_activity_item("❌", "Artist Failed", f"'{artist_name}' - {details}", "Now")
|
||||
|
||||
def on_metadata_finished(self, total_processed, successful, failed):
|
||||
"""Handle metadata update completion"""
|
||||
self.metadata_widget.update_progress(False, "", 0, 0, 0.0)
|
||||
summary = f"Processed {total_processed} artists: {successful} updated, {failed} failed"
|
||||
self.add_activity_item("🎵", "Metadata Complete", summary, "Now")
|
||||
|
||||
def on_metadata_error(self, error_message):
|
||||
"""Handle metadata update error"""
|
||||
self.metadata_widget.update_progress(False, "", 0, 0, 0.0)
|
||||
self.add_activity_item("❌", "Metadata Error", error_message, "Now")
|
||||
|
||||
def on_service_status_updated(self, service: str, connected: bool, response_time: float, error: str):
|
||||
"""Handle service status updates from data provider"""
|
||||
|
|
|
|||
Loading…
Reference in a new issue