diff --git a/PlaylistShared.Pwa/Components/Global/AudioPlayer.razor b/PlaylistShared.Pwa/Components/Global/AudioPlayer.razor
index fcc78cc..bc178c8 100644
--- a/PlaylistShared.Pwa/Components/Global/AudioPlayer.razor
+++ b/PlaylistShared.Pwa/Components/Global/AudioPlayer.razor
@@ -7,20 +7,19 @@
@inject ISnackbar Snackbar
@inject HttpClient Http
-
-
+
{ _isPlayHovered = true; }"
@onmouseleave="() => { _isPlayHovered = false; }"
- Class="relative d-inline-block rounded-sm overflow-hidden cursor-pointer"
+ Class="relative d-inline-block rounded overflow-hidden cursor-pointer"
Style="width: 50px; height: 50px;">
@if (!string.IsNullOrEmpty(AudioPlayerService.CurrentTrack?.CoverUri))
{
-
+
}
-
@if (AudioPlayerService.CurrentTrack != null)
{
-
+
-
-
+
+
@AudioPlayerService.CurrentTrack.Title
-
-
+
+
@string.Join(", ", AudioPlayerService.CurrentTrack.Artists.Select(a => a.Name))
@@ -96,7 +95,6 @@
-
diff --git a/PlaylistShared.Pwa/Components/Global/TrackProgress.razor b/PlaylistShared.Pwa/Components/Global/TrackProgress.razor
index bf67915..fc0356b 100644
--- a/PlaylistShared.Pwa/Components/Global/TrackProgress.razor
+++ b/PlaylistShared.Pwa/Components/Global/TrackProgress.razor
@@ -82,7 +82,6 @@
width: 100%;
height: var(--track-height);
background-color: var(--mud-palette-action-disabled-background, rgba(0,0,0,0.1));
- border-radius: 4px;
overflow: hidden;
}
diff --git a/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor b/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor
index a6f5520..426e7df 100644
--- a/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor
+++ b/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor
@@ -15,8 +15,10 @@
@inject NavigationManager Navigation
@inject AuthenticationStateProvider AuthProvider
@inject IDialogService DialogService
+@inject IAudioPlayerService AudioPlayerService
+@implements IDisposable
-
+
@*Первый элемент растянется на всю высоту*@
@@ -128,9 +130,9 @@
@*Второй элемент - плеер. Привязан к нижней части контейнера*@
-
+
-
+
@@ -411,6 +413,13 @@
_currentUserId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;
await LoadPlaylist();
await LoadTracks();
+ AudioPlayerService.OnStartedTrack += OnPlayerStateChanged;
+ AudioPlayerService.OnEndedTrack += OnPlayerStateChanged;
+ }
+
+ private void OnPlayerStateChanged()
+ {
+ InvokeAsync(StateHasChanged);
}
/// Установка разрешений.
@@ -793,4 +802,10 @@
var result = await dialog.Result;
}
#endregion
+
+ public void Dispose()
+ {
+ AudioPlayerService.OnStartedTrack -= OnPlayerStateChanged;
+ AudioPlayerService.OnEndedTrack -= OnPlayerStateChanged;
+ }
}
\ No newline at end of file
diff --git a/PlaylistShared.Pwa/Services/AudioPlayerService.cs b/PlaylistShared.Pwa/Services/AudioPlayerService.cs
index 25acb50..66cbe5a 100644
--- a/PlaylistShared.Pwa/Services/AudioPlayerService.cs
+++ b/PlaylistShared.Pwa/Services/AudioPlayerService.cs
@@ -41,6 +41,8 @@ public class AudioPlayerService : IAudioPlayerService
public string TotalTimeString => _totalTimeString;
public event Action? OnStateChanged;
+ public event Action? OnStartedTrack;
+ public event Action? OnEndedTrack;
public AudioPlayerService(TokenStorage tokenStorage, ISnackbar snackbar, HttpClient httpClient, PlayerStorage playerStorage)
{
@@ -105,6 +107,7 @@ public class AudioPlayerService : IAudioPlayerService
_isPlaying = true;
OnStateChanged?.Invoke();
OnLoadAndPlayRequested?.Invoke(trackId, accessToken, playlistShareToken);
+ OnStartedTrack?.Invoke();
}
public async Task PlayAsync()
@@ -112,6 +115,7 @@ public class AudioPlayerService : IAudioPlayerService
_isPlaying = true;
OnStateChanged?.Invoke();
OnPlayRequested?.Invoke();
+ OnStartedTrack?.Invoke();
}
public async Task PauseAsync()
@@ -175,6 +179,7 @@ public class AudioPlayerService : IAudioPlayerService
_totalTime = 0;
_currentTimeString = "0:00";
OnStateChanged?.Invoke();
+ OnEndedTrack?.Invoke();
}
///
diff --git a/PlaylistShared.Pwa/Services/IAudioPlayerService.cs b/PlaylistShared.Pwa/Services/IAudioPlayerService.cs
index 5713366..3728bc0 100644
--- a/PlaylistShared.Pwa/Services/IAudioPlayerService.cs
+++ b/PlaylistShared.Pwa/Services/IAudioPlayerService.cs
@@ -66,6 +66,10 @@ public interface IAudioPlayerService
/// Подписывайтесь на него, чтобы перерисовывать UI (например, иконку "пауза/плей").
///
event Action? OnStateChanged;
+
+ event Action? OnStartedTrack;
+
+ event Action? OnEndedTrack;
#endregion
#region События для связи с реальным компонентом AudioPlayer (Эти события вызываются сервисом)