diff --git a/DeepDrftPublic.Client/Controls/NowPlayingCard.razor b/DeepDrftPublic.Client/Controls/NowPlayingCard.razor
index a3731cd..0f29610 100644
--- a/DeepDrftPublic.Client/Controls/NowPlayingCard.razor
+++ b/DeepDrftPublic.Client/Controls/NowPlayingCard.razor
@@ -1,4 +1,5 @@
@using DeepDrftPublic.Client.Services
+@implements IDisposable
Now Playing
@(Player?.CurrentTrack?.TrackName ?? "Nothing playing")
@@ -12,4 +13,29 @@
@code {
[CascadingParameter] public IStreamingPlayerService? Player { get; set; }
-}
\ No newline at end of file
+
+ private IStreamingPlayerService? _subscribedPlayer;
+
+ protected override void OnParametersSet()
+ {
+ if (Player != null && !ReferenceEquals(Player, _subscribedPlayer))
+ {
+ if (_subscribedPlayer != null)
+ _subscribedPlayer.StateChanged -= OnPlayerStateChanged;
+
+ Player.StateChanged += OnPlayerStateChanged;
+ _subscribedPlayer = Player;
+ }
+ }
+
+ private void OnPlayerStateChanged() => InvokeAsync(StateHasChanged);
+
+ public void Dispose()
+ {
+ if (_subscribedPlayer != null)
+ {
+ _subscribedPlayer.StateChanged -= OnPlayerStateChanged;
+ _subscribedPlayer = null;
+ }
+ }
+}