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 - - + @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 (Эти события вызываются сервисом)