From abf19061738661ba141aad131f75c979c496168c Mon Sep 17 00:00:00 2001 From: FrigaT Date: Tue, 14 Apr 2026 22:53:30 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B2=20=D0=BF=D0=BB=D0=B5=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Common/ShareButton.razor | 1 + .../Components/Common/TrackCoverWithPlay.razor | 11 ++++++++--- .../Components/Global/AudioPlayer.razor | 2 +- .../Components/SharedPlaylist/AddTrackBySearch.razor | 2 ++ .../Components/SharedPlaylist/PlaylistHeader.razor | 9 ++++++++- .../Components/SharedPlaylist/TracksTable.razor | 2 ++ PlaylistShared.Pwa/Services/AudioPlayerService.cs | 8 ++++---- PlaylistShared.Pwa/Services/IAudioPlayerService.cs | 2 +- 8 files changed, 27 insertions(+), 10 deletions(-) diff --git a/PlaylistShared.Pwa/Components/Common/ShareButton.razor b/PlaylistShared.Pwa/Components/Common/ShareButton.razor index 55edca3..26275c3 100644 --- a/PlaylistShared.Pwa/Components/Common/ShareButton.razor +++ b/PlaylistShared.Pwa/Components/Common/ShareButton.razor @@ -66,6 +66,7 @@ } _shareUrl = ShareUrl; _popoverOpen = true; + await CopyLink(); } } diff --git a/PlaylistShared.Pwa/Components/Common/TrackCoverWithPlay.razor b/PlaylistShared.Pwa/Components/Common/TrackCoverWithPlay.razor index a3c1b47..b287a71 100644 --- a/PlaylistShared.Pwa/Components/Common/TrackCoverWithPlay.razor +++ b/PlaylistShared.Pwa/Components/Common/TrackCoverWithPlay.razor @@ -27,10 +27,11 @@ @code { [Parameter] public string CoverUrl { get; set; } = string.Empty; + [Parameter] public string TrackTitle { get; set; } = string.Empty; [Parameter] public string TrackId { get; set; } = string.Empty; [Parameter] public int Height { get; set; } = 50; [Parameter] public int Width { get; set; } = 50; - [Parameter] public string SharedPlaylistId { get; set; } = string.Empty; + [Parameter] public string PlaylistShareToken { get; set; } = string.Empty; private bool IsCurrentTrackPlaying => AudioPlayerService.IsPlaying && AudioPlayerService.CurrentTrackId == TrackId; @@ -46,7 +47,7 @@ private async Task OnPlayClick() { - var sharedPlaylistId = string.IsNullOrWhiteSpace(SharedPlaylistId) ? null : SharedPlaylistId; + var playlistShareToken = string.IsNullOrWhiteSpace(PlaylistShareToken) ? null : PlaylistShareToken; if (IsCurrentTrackPlaying) { @@ -54,7 +55,11 @@ } else { - await AudioPlayerService.LoadAndPlayAsync(TrackId, sharedPlaylistId: SharedPlaylistId); + await AudioPlayerService.LoadAndPlayAsync( + trackId: TrackId, + playlistShareToken: playlistShareToken, + title: TrackTitle, + coverUrl: CoverUrl); } } diff --git a/PlaylistShared.Pwa/Components/Global/AudioPlayer.razor b/PlaylistShared.Pwa/Components/Global/AudioPlayer.razor index 7276499..8f9dcb2 100644 --- a/PlaylistShared.Pwa/Components/Global/AudioPlayer.razor +++ b/PlaylistShared.Pwa/Components/Global/AudioPlayer.razor @@ -164,7 +164,7 @@ private async Task OnLoadAndPlay(string trackId, string? accessToken, string? sharedPlaylistId) { - if (!await CheckAuthAsync()) return; + //if (!await CheckAuthAsync()) return; var tokens = await TokenStorage.GetTokensAsync(); _currentAccessToken = accessToken ?? tokens.token; diff --git a/PlaylistShared.Pwa/Components/SharedPlaylist/AddTrackBySearch.razor b/PlaylistShared.Pwa/Components/SharedPlaylist/AddTrackBySearch.razor index b758d3f..a47980f 100644 --- a/PlaylistShared.Pwa/Components/SharedPlaylist/AddTrackBySearch.razor +++ b/PlaylistShared.Pwa/Components/SharedPlaylist/AddTrackBySearch.razor @@ -35,6 +35,8 @@
diff --git a/PlaylistShared.Pwa/Components/SharedPlaylist/PlaylistHeader.razor b/PlaylistShared.Pwa/Components/SharedPlaylist/PlaylistHeader.razor index 7f68042..8a79e2b 100644 --- a/PlaylistShared.Pwa/Components/SharedPlaylist/PlaylistHeader.razor +++ b/PlaylistShared.Pwa/Components/SharedPlaylist/PlaylistHeader.razor @@ -80,7 +80,14 @@ private async Task ToggleFavorite() { - if (!_isAuthenticated || Playlist == null) return; + if (Playlist == null) return; + + if (!_isAuthenticated) + { + Snackbar.Add("Добавление в избранное только авторизованным пользователям", Severity.Warning); + return; + } + _favoriteLoading = true; try { diff --git a/PlaylistShared.Pwa/Components/SharedPlaylist/TracksTable.razor b/PlaylistShared.Pwa/Components/SharedPlaylist/TracksTable.razor index fe81561..d068f5f 100644 --- a/PlaylistShared.Pwa/Components/SharedPlaylist/TracksTable.razor +++ b/PlaylistShared.Pwa/Components/SharedPlaylist/TracksTable.razor @@ -26,6 +26,8 @@ { } else diff --git a/PlaylistShared.Pwa/Services/AudioPlayerService.cs b/PlaylistShared.Pwa/Services/AudioPlayerService.cs index dc56560..554a5a8 100644 --- a/PlaylistShared.Pwa/Services/AudioPlayerService.cs +++ b/PlaylistShared.Pwa/Services/AudioPlayerService.cs @@ -47,7 +47,7 @@ public class AudioPlayerService : IAudioPlayerService } // Внешние команды (вызываются из компонентов) - public async Task LoadAndPlayAsync(string trackId, string? accessToken = null, string? sharedPlaylistId = null, string? title = null, string? coverUrl = null) + public async Task LoadAndPlayAsync(string trackId, string? accessToken = null, string? playlistShareToken = null, string? title = null, string? coverUrl = null) { // Если accessToken не передан, пытаемся получить его из хранилища if (string.IsNullOrWhiteSpace(accessToken)) @@ -57,7 +57,7 @@ public class AudioPlayerService : IAudioPlayerService } // Проверяем, есть ли чем авторизоваться - if (string.IsNullOrWhiteSpace(accessToken) && string.IsNullOrWhiteSpace(sharedPlaylistId)) + if (string.IsNullOrWhiteSpace(accessToken) && string.IsNullOrWhiteSpace(playlistShareToken)) { _snackbar.Add("Не удалось воспроизвести трек: отсутствует токен авторизации или идентификатор расшаренного плейлиста.", Severity.Error); return; @@ -68,7 +68,7 @@ public class AudioPlayerService : IAudioPlayerService { try { - var trackInfo = await GetTrackInfo(trackId, accessToken, sharedPlaylistId); + var trackInfo = await GetTrackInfo(trackId, accessToken, playlistShareToken); title = trackInfo?.Title; coverUrl = trackInfo?.CoverUri; } @@ -84,7 +84,7 @@ public class AudioPlayerService : IAudioPlayerService _currentTrackCoverUrl = coverUrl; _isPlaying = true; OnStateChanged?.Invoke(); - OnLoadAndPlayRequested?.Invoke(trackId, accessToken, sharedPlaylistId); + OnLoadAndPlayRequested?.Invoke(trackId, accessToken, playlistShareToken); } public async Task PlayAsync() diff --git a/PlaylistShared.Pwa/Services/IAudioPlayerService.cs b/PlaylistShared.Pwa/Services/IAudioPlayerService.cs index b61e3ce..8ade31a 100644 --- a/PlaylistShared.Pwa/Services/IAudioPlayerService.cs +++ b/PlaylistShared.Pwa/Services/IAudioPlayerService.cs @@ -39,7 +39,7 @@ public interface IAudioPlayerService /// ID расшаренного плейлиста (для неавторизованного доступа). /// Название трека. (Если не передано, вызывает api для получения) /// URL обложки трека. (Если не передано, вызывает api для получения) - Task LoadAndPlayAsync(string trackId, string? accessToken = null, string? sharedPlaylistId = null, string? title = null, string? coverUrl = null); + Task LoadAndPlayAsync(string trackId, string? accessToken = null, string? playlistShareToken = null, string? title = null, string? coverUrl = null); /// Воспроизвести (если трек загружен и на паузе). Task PlayAsync();