From fdc79c16b43cb63082b2bdfc828e4c61fc464001 Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Wed, 6 Aug 2025 12:32:31 -0700 Subject: [PATCH] allow singles to display at all times. --- ui/pages/__pycache__/artists.cpython-312.pyc | Bin 216424 -> 216133 bytes ui/pages/artists.py | 25 ++++++++----------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/ui/pages/__pycache__/artists.cpython-312.pyc b/ui/pages/__pycache__/artists.cpython-312.pyc index 08a0510c1a19ff16926fdc0908ade98e5468da0b..86638669c16fe52dae44407fc33cbcd9b4b55190 100644 GIT binary patch delta 2757 zcmYjSdstOf7U#G2eE|1@fZPNGy$S+X5pgOJ(os?YHPC!zdZ% zXY}~OHztCq9AJy-r)C(+1Q$gRq(-et$5AsuO|zVRY5Km-A8Vhz_uA|6Td&*OoEo+` zIX5{uIogS@yi!`+<8sW|=!aNkl;3NRDh%#Ykbk9v!%Djp$0}VV$%*dN-&3FOWaGDe z@3Bh!_P5L=r=woBhX}UH|FQ$C;ma2?Wx2}ZK;BLLE)jhT`zoqy>amS2=))@)b*hSVwY1Z_2I?~Op>E@1f zOKZBtnzqcktibB_ZkxVPnlZv>bc!`A+iD2EY{>aA@;klj`sw@G?#O+*E$>@{CZ2Ks za^Ts49T9J~M!adAILqobyG=hw`uB)J2kV$ft6Nl?K3Yl(Di}1$VG6T5r;ivTmIme! z>Bk!M5zdi=+4;fhNI$71-&+a}*SN$9D9zkP#@onoY2?Tp3{=WSo&zpRiK7&BDu$3d zYCPUJ<`L?p$7818Yh_&MpBcVVio?eOTBYVS7lND8FkW&*weog!0W;Rvgw@)}bwRpR zOB3@KciAV2@MI@0Nj29g52jlI59Mr(MgzUlID0dM@PxSrK`nD9;*3-`SHXEDbKWmH z990%4O=3urs#05#tbCAW52Q$|(|<;)RJyp;`l{7dFyoLcOvyBbMQ! zayqNf9w(GA%ezpW6xY(x{x3;Q%c^lw`k)|A(9VJhnnJR(%bUFM+CU}jU5y?mm5D3o z6aJ!XU3EZ(CS~H9Lg12eV(k}d@t|a5H?ArRBnO7aO4{cBpy#9%%O*mNRK9gRy&xrY z+YSit+O{83!$&FE(+#*N3-(251k28f>j+m$4$WgoP}&bq1u_)lk$(}gtE=;X5+z^p zBCJ%_)f$1nOGoRj!=h~9l>}KCf1=b0JC(Cv_A=a8>Y6SPo+!(kKT^{Rrs&$f1KgDd zSIPyz(&mmvNJ_%hWaw;en$ueq1JpP!-!|a}w(^U^ zafQ&pcaOwu60dqkAqma=tq_=iL43t%_}YY(hhiLR_{~trLc3fPh6T9BJHjwcjT(9A z1YCy$XA?0;F!TA5f*B!vQxwAO#ojstBY;`_`Al?cQOY~#L#0DG|0WqzoN$Bt<>Cjy zC%YFRP$(H+gg1eg__|`;U_yFsi7+Xgx0N6Un8}B(K&vC>^4>LQQ{f|iVLjF{q2=v= zU>G3tl1FPFM(^^Q*gY5aM{nURcn`pX^0HLJQZH zBTaDg?1LcSD$lKeis2StR)rHltvvcu?8ZHQ=~HZDV0=k6LI91tQ^917tqi(6WS1Y| zvAG6U@RYaLKx5PWHAfR1dBt&bGSu zw_d;lc&85ZnMy?Hq?*dHRZh~-_t+v&)zS`Z=HF}SGYFvfI#3Q!CA;ZpGb(w7j*=OU zai@N?0NBqnUFbF7G(X@<1rQlGs6XWq{>e8QXeNnd`gQ<~B>YEq^`bTb`1fA47U&#`xXDJ@(}=ESVK|p4Va;aX(KmMzqZOdhqB)FLQy%r@#lmK?F2;`Gjcw5fbMH44$$JLn56;xCuc8}M+p z`bISdv;QJKBP zpf~q5)wN=7NWptNW&h&>no)A%ak{4IyQ!96ucr@%2Tk=9EZ#q>rv{wkXHHOz24lJN zS^89sN&M7#+M&TUIqoa^NZV)VH+J%w77UQlOdJ)wzL{=m@D1N{h3ZIjwfR@cVlPUe z`ML-coVn>HJy&A^_rFam)TovZ-lLasRPMefg7F@=-ls@gFB|ZLZi(f^6Y9hf-uV+v z5W`jWRI%lKZ9)LEOT{dxlMQOth8})L&CaUvHm}mLzd;;_If%YOjZpygQox!1TiqyuP5pBNx$Crn Q7`i^-k)3TdPY@ygAGAKzVE_OC delta 2991 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 BBz^z@ diff --git a/ui/pages/artists.py b/ui/pages/artists.py index b03dbea6..aabbe0e5 100644 --- a/ui/pages/artists.py +++ b/ui/pages/artists.py @@ -175,18 +175,12 @@ class AlbumFetchWorker(QThread): def run(self): try: - print(f"🎵 Fetching albums for artist: {self.artist.name} (ID: {self.artist.id})") + print(f"🎵 Fetching all releases (albums & singles) for artist: {self.artist.name} (ID: {self.artist.id})") - # Use the proper Spotify API method to get albums by artist - albums = self.spotify_client.get_artist_albums(self.artist.id, album_type='album', limit=50) + # Always fetch both albums and singles from the Spotify API + albums = self.spotify_client.get_artist_albums(self.artist.id, album_type='album,single', limit=50) - print(f"📀 Found {len(albums)} albums for {self.artist.name}") - - if not albums: - print("⚠️ No albums found, trying with singles included...") - # If no albums found, try including singles - albums = self.spotify_client.get_artist_albums(self.artist.id, album_type='album,single', limit=50) - print(f"📀 Found {len(albums)} items including singles") + print(f"📀 Found {len(albums)} total releases for {self.artist.name}") # Remove duplicates based on name (case insensitive) seen_names = set() @@ -200,7 +194,7 @@ class AlbumFetchWorker(QThread): # Sort by release date (newest first) unique_albums.sort(key=lambda x: x.release_date if x.release_date else '', reverse=True) - print(f"✅ Returning {len(unique_albums)} unique albums") + print(f"✅ Returning {len(unique_albums)} unique releases") self.albums_found.emit(unique_albums, self.artist) except Exception as e: @@ -3099,7 +3093,8 @@ class ArtistsPage(QWidget): return self.current_albums = albums - self.albums_status.setText(f"Found {len(albums)} albums • Checking Plex library...") + self.albums_status.setText(f"Found {len(albums)} releases • Checking Plex library...") + # Initialize match counter for real-time updates self.matched_count = 0 @@ -3196,7 +3191,8 @@ class ArtistsPage(QWidget): if missing_count > 0: status_parts.append(f"{missing_count} missing") - self.albums_status.setText(f"Found {total_count} albums • " + " • ".join(status_parts)) + self.albums_status.setText(f"Found {total_count} releases • " + " • ".join(status_parts)) + # Show toast with library check results if hasattr(self, 'toast_manager') and self.toast_manager: @@ -3232,7 +3228,8 @@ class ArtistsPage(QWidget): if self.current_albums: total_count = len(self.current_albums) remaining_count = total_count - self.matched_count - self.albums_status.setText(f"Found {total_count} albums • {self.matched_count} owned • {remaining_count} checking...") + self.albums_status.setText(f"Found {total_count} releases • {self.matched_count} owned • {remaining_count} checking...") + # Find and update the specific album card for i in range(self.albums_grid_layout.count()):