Добавлена передача параметров в плеер

This commit is contained in:
FrigaT
2026-04-14 22:53:30 +03:00
parent 6ae49faf15
commit abf1906173
8 changed files with 27 additions and 10 deletions

View File

@@ -66,6 +66,7 @@
} }
_shareUrl = ShareUrl; _shareUrl = ShareUrl;
_popoverOpen = true; _popoverOpen = true;
await CopyLink();
} }
} }

View File

@@ -27,10 +27,11 @@
@code { @code {
[Parameter] public string CoverUrl { get; set; } = string.Empty; [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 string TrackId { get; set; } = string.Empty;
[Parameter] public int Height { get; set; } = 50; [Parameter] public int Height { get; set; } = 50;
[Parameter] public int Width { 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; private bool IsCurrentTrackPlaying => AudioPlayerService.IsPlaying && AudioPlayerService.CurrentTrackId == TrackId;
@@ -46,7 +47,7 @@
private async Task OnPlayClick() private async Task OnPlayClick()
{ {
var sharedPlaylistId = string.IsNullOrWhiteSpace(SharedPlaylistId) ? null : SharedPlaylistId; var playlistShareToken = string.IsNullOrWhiteSpace(PlaylistShareToken) ? null : PlaylistShareToken;
if (IsCurrentTrackPlaying) if (IsCurrentTrackPlaying)
{ {
@@ -54,7 +55,11 @@
} }
else else
{ {
await AudioPlayerService.LoadAndPlayAsync(TrackId, sharedPlaylistId: SharedPlaylistId); await AudioPlayerService.LoadAndPlayAsync(
trackId: TrackId,
playlistShareToken: playlistShareToken,
title: TrackTitle,
coverUrl: CoverUrl);
} }
} }

View File

@@ -164,7 +164,7 @@
private async Task OnLoadAndPlay(string trackId, string? accessToken, string? sharedPlaylistId) private async Task OnLoadAndPlay(string trackId, string? accessToken, string? sharedPlaylistId)
{ {
if (!await CheckAuthAsync()) return; //if (!await CheckAuthAsync()) return;
var tokens = await TokenStorage.GetTokensAsync(); var tokens = await TokenStorage.GetTokensAsync();
_currentAccessToken = accessToken ?? tokens.token; _currentAccessToken = accessToken ?? tokens.token;

View File

@@ -35,6 +35,8 @@
<div style="width: 40px; height: 40px; flex-shrink: 0;"> <div style="width: 40px; height: 40px; flex-shrink: 0;">
<TrackCoverWithPlay CoverUrl="@track.CoverUri" <TrackCoverWithPlay CoverUrl="@track.CoverUri"
TrackId="@track.TrackId" TrackId="@track.TrackId"
TrackTitle="@track.Title"
PlaylistShareToken="@ShareToken"
Width="40" Height="40"/> Width="40" Height="40"/>
</div> </div>
<div style="flex: 1; min-width: 0;"> <div style="flex: 1; min-width: 0;">

View File

@@ -80,7 +80,14 @@
private async Task ToggleFavorite() private async Task ToggleFavorite()
{ {
if (!_isAuthenticated || Playlist == null) return; if (Playlist == null) return;
if (!_isAuthenticated)
{
Snackbar.Add("Добавление в избранное только авторизованным пользователям", Severity.Warning);
return;
}
_favoriteLoading = true; _favoriteLoading = true;
try try
{ {

View File

@@ -26,6 +26,8 @@
{ {
<TrackCoverWithPlay CoverUrl="@context.CoverUri" <TrackCoverWithPlay CoverUrl="@context.CoverUri"
TrackId="@context.TrackId" TrackId="@context.TrackId"
TrackTitle="@context.Title"
PlaylistShareToken="@ShareToken"
Width="50" Height="50"/> Width="50" Height="50"/>
} }
else else

View File

@@ -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 не передан, пытаемся получить его из хранилища // Если accessToken не передан, пытаемся получить его из хранилища
if (string.IsNullOrWhiteSpace(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); _snackbar.Add("Не удалось воспроизвести трек: отсутствует токен авторизации или идентификатор расшаренного плейлиста.", Severity.Error);
return; return;
@@ -68,7 +68,7 @@ public class AudioPlayerService : IAudioPlayerService
{ {
try try
{ {
var trackInfo = await GetTrackInfo(trackId, accessToken, sharedPlaylistId); var trackInfo = await GetTrackInfo(trackId, accessToken, playlistShareToken);
title = trackInfo?.Title; title = trackInfo?.Title;
coverUrl = trackInfo?.CoverUri; coverUrl = trackInfo?.CoverUri;
} }
@@ -84,7 +84,7 @@ public class AudioPlayerService : IAudioPlayerService
_currentTrackCoverUrl = coverUrl; _currentTrackCoverUrl = coverUrl;
_isPlaying = true; _isPlaying = true;
OnStateChanged?.Invoke(); OnStateChanged?.Invoke();
OnLoadAndPlayRequested?.Invoke(trackId, accessToken, sharedPlaylistId); OnLoadAndPlayRequested?.Invoke(trackId, accessToken, playlistShareToken);
} }
public async Task PlayAsync() public async Task PlayAsync()

View File

@@ -39,7 +39,7 @@ public interface IAudioPlayerService
/// <param name="sharedPlaylistId">ID расшаренного плейлиста (для неавторизованного доступа).</param> /// <param name="sharedPlaylistId">ID расшаренного плейлиста (для неавторизованного доступа).</param>
/// <param name="title">Название трека. (Если не передано, вызывает api для получения)</param> /// <param name="title">Название трека. (Если не передано, вызывает api для получения)</param>
/// <param name="coverUrl">URL обложки трека. (Если не передано, вызывает api для получения)</param> /// <param name="coverUrl">URL обложки трека. (Если не передано, вызывает api для получения)</param>
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);
/// <summary>Воспроизвести (если трек загружен и на паузе).</summary> /// <summary>Воспроизвести (если трек загружен и на паузе).</summary>
Task PlayAsync(); Task PlayAsync();