From b16b10e724fa016f3efe2378fe67ead4480a9973 Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Tue, 29 Jul 2025 20:55:11 -0700 Subject: [PATCH] minor fixes --- ui/pages/__pycache__/artists.cpython-312.pyc | Bin 198764 -> 199796 bytes .../__pycache__/downloads.cpython-312.pyc | Bin 509097 -> 510191 bytes ui/pages/__pycache__/sync.cpython-312.pyc | Bin 229177 -> 229161 bytes ui/pages/artists.py | 23 ++++++++++++-- ui/pages/downloads.py | 30 ++++++++++++++++-- ui/pages/sync.py | 2 +- 6 files changed, 49 insertions(+), 6 deletions(-) diff --git a/ui/pages/__pycache__/artists.cpython-312.pyc b/ui/pages/__pycache__/artists.cpython-312.pyc index 92cbbc6b2de6d864a54fc4ab8e0e2187e6f54b18..f209d83ef0644f228c9d7ffa5f6549b0099c6957 100644 GIT binary patch delta 14336 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 delta 13390 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 Reph|y|J72RNDI=9{$Ic^5tIM` diff --git a/ui/pages/__pycache__/downloads.cpython-312.pyc b/ui/pages/__pycache__/downloads.cpython-312.pyc index 274a03dcb8f0cc35eb5979527aa25996dfdf480d..8aff9a6a6671e867845e319427f6abca1d1f4ad8 100644 GIT binary patch delta 4283 zcmZWsdtB7VwcqpGoiiY?fGmjeS^*!cfPhAEmFNlTFo5V+A5>iE%N))$hqBh!SRARNJnvdR@B}wh4`^R@?&Ybf- zXI|(0_V*iNZZ*c3j|BwuF~}d)Zdf{h`_Ikm&9L6Atv4Ijn@z1|_VL?VWdL1F#RLJ{ z+24HWn>{Ryn)fgZ1?^#dAdn*Vut-z2<}y)>MGK`q&CEkL%cx`U(^4w zg(SK9ll^I9$P@i*`@eFkNLwS@Rj|si+PJ{53jWPB@-fqqu1K$GzsTCiYE7ET_MfJ< zQKF=UJ!z~9mA-r4*tFI=n0{eSPY>{t!%Jni=x0b_WhUu zFLPBzzC+i`b&t8|N7nobd*xD3uv0Fm)RAv5EvQs{aKg)Slas@8&ucbFQNwx0U;Zo+VGS+eAtee zaz+X)VU*UGMiUz+ZcFS6Nj?`8>JERZeP(;QJ8WTBP@c5NdFvE`QF%mlm zW?E!(YV;(KP1l%l5u^tjB?a&R`)H#fw1cAPoaZ1ngtDe;(@lz2jn zsvqW?n`ZRHm~&H&o>Z2bCSL!5)dE}*5r^0j4oAiLPgoj2j|gpNi0~;zo?!Ebw{v;u ze^hWx!DkX`e4ksGnCHw(S~R@I_s3qmew5xg!8X`BmD*96jP$=KIIe~r3X)~6(NCz} zZh6GIn{rOFi7-JloMZ<<+s7%z#lpqXPUgd5AFb$S9Z)9H&$1&LoELD8b<0@EbDqtC z^OSgjJqu@P-368it>WDaY?3kMjHI?{HNkn#VR;LS9HmvO9eIo7AYT7rCO{5;kb9*R ze~HDx8OoB)V5OtSsSy97c$of`5?oPm^{3unsqqqvkS4n?v39?&mHd=i|~7P_m%PU209dL3`Z_$YvO22BaegQ;=N?N>kqR;%LIHAAeNp<$DNw* zz_twh)CW4LJqxQKUrd~i8_n>MI57|30Z0?o3ve{RIBL#C8>EpZ7hUjzn70rYp*Gov z-aL+>bj*&ya6_E8W0?N)6HW*=?u&u!lROnZ0afUY0hjMaQC}q`QIQ*xu*WvGcAXAuL z#Hku)s{OB{mS`3t3SPocfY-(9mod~2?DSuorGcQP%{Ueps|_7R^*OvBJ=}~@;1Q98 z=!^MkBDr@WeH-@Ig5pH(HvFqex|sYn`U4bF_I7+xF7WJjxr34PY!ki&nRKxUv*lds z4vdF#nx~p{a_zveFh+vwJQzRVRTW(TlVDcRsD_`JBy6H@Jy-zK#N0n)h>up_^Xic>s=JKy;bqZ% z89BnQ=*zEhXHbJO*{^nIfr8)AmTOo6+lBvi>;QO;Jl~)$z0JIV@qVvMU5~#iyE;Ac zV3;P=U%P>mc{&+oA^^dp2cL@iiqN$LilmX z(R+m#|8RvrQn3uCTSIs_U615u_)rXt;oqCI;K3p$o^J-YBiaV>FfF=6YTC5k9q&>+ z@?si(q&Z60hVYSaTSO1#F)&KV`B}0&+*X^Q2EE@#yHpt{Rf1|-9@m>;t-3ShvpUS&orbrpd+fA@c+)v|25lZOLMBV_u6xr!K z)(AJrnaK-br#O=-H*i>w3gD3P{hb2u@!V7^kQG+0K>jj%-}6OEn!?A(99ukvry5}k z{dO9!f+G}^#XpMtR$AE5yM9l=kKb+i%N*5C{SMvA;&J$e)R5=uO;IDJ^I$kACQav+ zOorDsiywq@qG~pGgWm%ck2i|@l%2zCWXU_0!&~}3=0U%&biP--;lbVzdn5c(xfrfo z42RFfNDTE11j({6EdE1&KIaWrN-U!jfi zrHmd^=;rOx%@Fb3cD@v}V4En|!Pjy50I%-l6)_*G(B`YvtxyoFF3(#k(%EX*L@S&5 z&+(iT)Fjc0)$)&MNDB{#bdk`)$C}_06}R%qu$FeV@{6I_%FdhB$E%(p)e&q|%Y0SAC$^a;M3R(ugIP9ET!wdh3}3vZv?V^FPoZk~J5;?BAD mzj=o}QRXTBM~Vs1TV*lq61Kid3mat4}4W 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 If9<>f0RU7KfdBvi diff --git a/ui/pages/__pycache__/sync.cpython-312.pyc b/ui/pages/__pycache__/sync.cpython-312.pyc index c7a90d14ffb92ed24b3ef48989f4325d41545509..d587bcb5da5f9c6b3332265fed3f094c4af01dde 100644 GIT binary patch delta 68 zcmdn_k9XxiUf$EZyj%=G&@{a><9H+QR$j*Qrc4_cCo`V2oc`fGqx|#R$~}h delta 81 zcmZ4ak9X%kUf$EZyj%=GAZXW_alMguD=*`DQ>FuqlNrxhPJi&8QGR+uAtUd0XER1K jM(*U&qT>7_D}{pm%;^H=j56&L%o%~0Y5N3o=9%sQY2X_P diff --git a/ui/pages/artists.py b/ui/pages/artists.py index d1f17337..e766a782 100644 --- a/ui/pages/artists.py +++ b/ui/pages/artists.py @@ -487,14 +487,31 @@ class PlexLibraryWorker(QThread): if self._stop_requested: return - # Search Plex for this combination + # Search Plex for this combination (cleaned artist) print(f" ๐Ÿ” Searching Plex: album='{album_name}', artist='{artist_clean}'") plex_albums = self.plex_client.search_albums(album_name, artist_clean, limit=5) print(f" ๐Ÿ“€ Found {len(plex_albums)} Plex albums") all_plex_matches.extend(plex_albums) - # Also try album-only search if artist+album didn't work - if not plex_albums and artist_clean: + # Backup search with original uncleaned artist name (for cases like "Tyler, The Creator") + if not plex_albums and artist and artist != artist_clean: + print(f" ๐Ÿ”„ Backup search with original artist: album='{album_name}', artist='{artist}'") + original_artist_results = self.plex_client.search_albums(album_name, artist, limit=5) + print(f" ๐Ÿ“€ Found {len(original_artist_results)} albums (original artist)") + all_plex_matches.extend(original_artist_results) + + # Additional fallback: remove commas (Tyler, The Creator -> Tyler The Creator) + if not original_artist_results and ',' in artist: + artist_no_comma = artist.replace(',', '').strip() + # Clean up multiple spaces that might result from comma removal + artist_no_comma = ' '.join(artist_no_comma.split()) + print(f" ๐Ÿ”„ Comma-removal fallback: album='{album_name}', artist='{artist_no_comma}'") + no_comma_results = self.plex_client.search_albums(album_name, artist_no_comma, limit=5) + print(f" ๐Ÿ“€ Found {len(no_comma_results)} albums (no comma)") + all_plex_matches.extend(no_comma_results) + + # Also try album-only search if no results from artist searches + if not all_plex_matches: # Only if we haven't found anything yet for this album print(f" ๐Ÿ” Trying album-only search: album='{album_name}'") album_only_results = self.plex_client.search_albums(album_name, "", limit=5) print(f" ๐Ÿ“€ Found {len(album_only_results)} albums (album-only)") diff --git a/ui/pages/downloads.py b/ui/pages/downloads.py index 838deb4e..8f08ae0d 100644 --- a/ui/pages/downloads.py +++ b/ui/pages/downloads.py @@ -7602,8 +7602,34 @@ class DownloadsPage(QWidget): counter += 1 new_file_path = f"{base} ({counter}){ext}" - print(f"๐Ÿ“‚ Copying file to: {new_file_path}") - shutil.copy2(original_file_path, new_file_path) + print(f"๐Ÿ“‚ Moving file to: {new_file_path}") + + # Verify source file exists before attempting move + if not os.path.exists(original_file_path): + print(f"โŒ Source file not found: {original_file_path}") + return None + + # Move the file (this will delete the original automatically) + shutil.move(original_file_path, new_file_path) + + # Verify the move was successful + if not os.path.exists(new_file_path): + print(f"โŒ File move failed - destination file not found: {new_file_path}") + return None + + if os.path.exists(original_file_path): + print(f"โš ๏ธ Warning: Original file still exists after move: {original_file_path}") + try: + os.remove(original_file_path) + print(f"๐Ÿ—‘๏ธ Cleaned up remaining original file") + except Exception as cleanup_error: + print(f"โš ๏ธ Could not remove original file: {cleanup_error}") + + print(f"๐Ÿงน File successfully moved and original cleaned up") + + # Clean up any empty directories left in the downloads folder + downloads_path = config_manager.get('soulseek.download_path', './Downloads') + self._cleanup_empty_directories(downloads_path, original_file_path) # Download cover art for both albums and singles if album_info and album_info['is_album']: diff --git a/ui/pages/sync.py b/ui/pages/sync.py index 18124b5d..1e5eef0d 100644 --- a/ui/pages/sync.py +++ b/ui/pages/sync.py @@ -1654,7 +1654,7 @@ class PlaylistItem(QFrame): } QPushButton:hover { background: #1ed760; - cursor: pointer; + } """) self.operation_status_button.clicked.connect(self.on_status_clicked)