From 31a8b01cdbb880c9a18c87ae87bfe3d060033cac Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Sat, 9 Aug 2025 12:34:30 -0700 Subject: [PATCH] automatic plex scan triggers automatic soulsync db update --- main.py | 5 +++++ ui/pages/__pycache__/artists.cpython-312.pyc | Bin 254689 -> 254583 bytes ui/pages/__pycache__/sync.cpython-312.pyc | Bin 248289 -> 248178 bytes ui/pages/artists.py | 8 ++++---- ui/pages/dashboard.py | 4 +++- ui/pages/sync.py | 8 ++++---- 6 files changed, 16 insertions(+), 9 deletions(-) diff --git a/main.py b/main.py index 976dba1e..8cb6c64e 100644 --- a/main.py +++ b/main.py @@ -192,6 +192,11 @@ class MainWindow(QMainWindow): self.dashboard_page.add_activity_item ) + # --- ADD THESE TWO LINES TO FIX THE UI UPDATE --- + self.sync_page.database_updated_externally.connect(self.dashboard_page.database_updated_externally) + self.artists_page.database_updated_externally.connect(self.dashboard_page.database_updated_externally) + # ------------------------------------------------ + self.stacked_widget.addWidget(self.dashboard_page) self.stacked_widget.addWidget(self.sync_page) self.stacked_widget.addWidget(self.downloads_page) diff --git a/ui/pages/__pycache__/artists.cpython-312.pyc b/ui/pages/__pycache__/artists.cpython-312.pyc index afc7f9d3d22103269d98ae6efc638e2ba2bff7f8..b42767211fa79de72e3794e4a08a5d9a3c4a6256 100644 GIT binary patch delta 2611 zcmZvddr*|u6~Mo9&$l1!0z!GntHAOIg3yH(<)J8+)M(XGqD~q}TEzL5$AA#OT}JVR z(KT9Q#FVi&l17c7sRoI(rkD6AQ%n;RlMWUW0#>6ff2;{DM$?guCFwm2X-X#FAHO~4 zp4YwSKK9n11Mj~X7;rftz@o^H9pY6do(|X<0IvryQ-!S+6lIsf6^Bv^x>CxR;=otQ zQGTVWp1)hE03F=sQj^Zy3cvL@*nHhe=``I>YT+eNfYYV$LSC)*a6>dSvUq@foNr|Hyeo#yY_WD*_^&pxIR0cI z`0?mnU^!5YNiC;GL%pV7sNjE~1}%}GH2OCBCMvF=iS{W& zyu@CW4W|#35=HmjqHWb0eJ6g`!+K={mMH5X)y%hVW^W}n6iLTBhgWPf5|CmpL}L9EJ?5 zZ8V%Rp|MI%froBoFHHNwPf?tma%`J&M-AdH_3vcG5vPs_2QRL$5$w%vq1gl7qv5<}6v{3904$F9hoY!Xp_WmTpqud|(8 z-k=JzNJ^J|F!u7_46xrrt0?}6J?9ftL54vxOe0kBD;^fXO*h#gs1)rt+0U`SJ=Mh< zaf6(nAwvYEKgA>}Nga{~r_>ay)p&$VJH^6bW>cYq*LzqtoZ`nlY$i<9feQYKhb;_R zN0ApP;w)0XYol7FA=PA*&@}%@$Rivg_rnrS zlT@wrO?2(NI5o!BsnEmY##sTJ<7MOQN6^gM$Jt}hE*^}tc_ui@a}et%RuRE_5PuzY zf)bwmj)ccWy^5cza;;C8@kKZ$?whg7PsXke!vtvOJHoI`yDS4YCh}V$m?-?F;}IX| z=N&P4FlaBO_4YZI+StrLTY@p%h{b65fbWaNq{!b=P4m}__+}yRiOaFLQ2oCQ-t*Yb zqZ2Vod!GuXP{DZdWFo%Lv_Yyg#50mHLoQdA3E@UEuF&2hPb(kIz%cP~GHy19(ylak zD=sQ_TK~T7sMYurug}CRxXRlyasOmrwDa^*wDT2qObz>hve(kU{~Bcs@cnj-gtx^> zJ1(cD-p@v-46ez+m^tkfa8@qs>%Ch;+cq`BxA*RnxR8Tyg3n~rczhy;^5#J_iI?;6 z`2g^Uti^Z%pjpV}%>eBas^Q_WOEFdJmGZ_Jye}5RxOoW%3)fPd>n}rIdknKdyGO2{ zi%)-s6`*>g(h?sZ4kKc139bzU@-DzJi2;R40KesP}5N13hYR_Z14}frA#C8=tJoOTGX=CK=5jQX4 z4h9Q^ei?^-U?m(IPie-HtR`13<}74mt-HGC?fz?e_XSU@Ns zL=sl0eE1rsHI-5FazYcq`&7|8H1SgJBq4xXXXa>EJU-TjKjW{~PV0N$gJOR9z7 z{iB)aG^vXT`Gigi^X_P|spZaK43E5y(*ifkevY}7!G!d-^gcC?+pf!}CfM{7xSJx1 VuH#9Bclj4L<$YQ$GH+oQ{1??y#!~H#6np> zERu!9Vp-%KDvN1x7CDAShK=#bJ+|53HFmwR6kOxh6wtPuV zt*l$p6Cx|T)s=M>9$CJqVxD{P1e);Xwk;bRGu>4lx3}6Ym2;(V7ur0Rk=AyFF^f*9 zXQqYl4525%GuX9URy0&pR(Rdz-iC^X8gE0*T(5d(rDzSgYcmY*S<2jG+_Z$LAFdMF zkAGn`>@h73t#dj z?b9yVqm^y5?c9(bblT^r{j0=}VoIUZG}_F7(p+o{i7m~#mF}xSGY}GRs zG3wOPQ{pbn)%B;vS!?VXYMY*J^}NKf4UAV98`X0iViK&@TRTLx8Sjhcao}A}If|_; zmT;4Dbc-YKn(pit8~yCn9Jt7V5XO&H{S|Q(YIIt!n1d64`pu}X^JVV0o&&L*c|V;X zPYt_06!7wSayUGbIJ8c;UlrLFIG}EQDhlAYD&xAy0N)g`P_1gOixRt+N49awQ;hlQ z#C4Gmht-TEjM9Gp61xQr-+x1-J{+g|Zir~Q4)B?9i@atY?OV_;o^UO@<9I<_bdPnO zyOxfVr;?l3aI;jZpH^~IpY0ci5jLsS10oj=slx+eM))!6_Ko$wrz38ODHiK49=}^v z+!5akWc4S_N)II+e}6|LKEH!wKAn9M=d=6mo#D3E2!Ol z8E%3hDc~4A)rH%=#8>}K$l_LH!{w+?p z?|&qGL*GKYVWC>D_~UP2uU;O2)ixS?EfP~;kMfJcayX+%)=1S9j*JH7Zb4vx>a}*rpCR=(*-x;dgnij1z^3+9saHBp2I4z^pUg0>5PGX z{rU5_FceHxUX5A8F!jc2d|SYMT{<7jtYGS&*W-5t#k;*E6RPS4+y)P{|6=^YjP|4R z=e2$*$Dk5c9ljj5Ss_jzUX5h|kgV`!JP9`4_A=H4(N|<-D|#r?_EyZM#QIz-9x%yo z+={V~u3NX_1%M2-U^`w5AH@^U*)blS@HAcdI(h@M(`kXnBDb^== z0h873^Oyz`bkYU5~s~Ns$hu@UJr*|D&hZ#p0 zM;Y%iPB8W`-eBxyoMD`0@E!E<9rK)GoMxP4Wb)MQY?ZQg$5Kn|XTO+Xa4GlMdcd%< z8^`eN8L*Yk@NKJagU7HN#PEGN2K8fiDq{lUAgA)}(@b;A&5Ma@?zQz(3WT3Ik6=oH-o^3L?yDFp#0IUBWjJ{-R#(r7KdYKj_6n@L#Vq`vw32 diff --git a/ui/pages/__pycache__/sync.cpython-312.pyc b/ui/pages/__pycache__/sync.cpython-312.pyc index 582ac5a2a5740a18095703a014988795fbadacd4..b3f5f387290a5b9d7d7c92307eb5421aa777c98e 100644 GIT binary patch delta 6550 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 LMe?;nd>{N9pM$L* diff --git a/ui/pages/artists.py b/ui/pages/artists.py index a33d0eb2..8bfe1ffb 100644 --- a/ui/pages/artists.py +++ b/ui/pages/artists.py @@ -2950,6 +2950,7 @@ class DownloadMissingAlbumTracksModal(QDialog): self.update_failed_matches_button() class ArtistsPage(QWidget): + database_updated_externally = pyqtSignal() def __init__(self, downloads_page=None, parent=None): super().__init__(parent) @@ -3069,10 +3070,9 @@ class ArtistsPage(QWidget): else: logger.info("💡 Automatic database update completed - no new content found") - # Refresh database statistics in the dashboard to update live display - if hasattr(self, 'main_window') and hasattr(self.main_window, 'dashboard_page'): - self.main_window.dashboard_page.refresh_database_statistics() - logger.info("📊 Refreshed dashboard database statistics after auto update") + # Emit the signal to notify the dashboard to refresh its statistics + self.database_updated_externally.emit() + logger.info("📊 Emitted signal to refresh dashboard database statistics after auto update") # Clean up the worker if hasattr(self, '_auto_database_worker'): diff --git a/ui/pages/dashboard.py b/ui/pages/dashboard.py index 5e50726b..07a13cf4 100644 --- a/ui/pages/dashboard.py +++ b/ui/pages/dashboard.py @@ -2294,6 +2294,7 @@ class ActivityItem(QWidget): layout.addWidget(time_label) class DashboardPage(QWidget): + database_updated_externally = pyqtSignal() def __init__(self, parent=None): super().__init__(parent) @@ -2319,7 +2320,8 @@ class DashboardPage(QWidget): self.stats_cards = {} self.setup_ui() - + self.database_updated_externally.connect(self.refresh_database_statistics) + # Initialize list to track active stats workers self._active_stats_workers = [] diff --git a/ui/pages/sync.py b/ui/pages/sync.py index 2c2976f1..39749b3d 100644 --- a/ui/pages/sync.py +++ b/ui/pages/sync.py @@ -1963,6 +1963,7 @@ class SyncOptionsPanel(QFrame): class SyncPage(QWidget): # Signals for dashboard activity tracking sync_activity = pyqtSignal(str, str, str, str) # icon, title, subtitle, time + database_updated_externally = pyqtSignal() def __init__(self, spotify_client=None, plex_client=None, soulseek_client=None, downloads_page=None, parent=None): super().__init__(parent) @@ -2080,10 +2081,9 @@ class SyncPage(QWidget): else: logger.info("💡 Automatic database update completed - no new content found") - # Refresh database statistics in the dashboard to update live display - if hasattr(self, 'main_window') and hasattr(self.main_window, 'dashboard_page'): - self.main_window.dashboard_page.refresh_database_statistics() - logger.info("📊 Refreshed dashboard database statistics after auto update") + # Emit the signal to notify the dashboard to refresh its statistics + self.database_updated_externally.emit() + logger.info("📊 Emitted signal to refresh dashboard database statistics after auto update") # Clean up the worker if hasattr(self, '_auto_database_worker'):