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

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;
_popoverOpen = true;
await CopyLink();
}
}

View File

@@ -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);
}
}

View File

@@ -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;

View File

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

View File

@@ -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
{

View File

@@ -26,6 +26,8 @@
{
<TrackCoverWithPlay CoverUrl="@context.CoverUri"
TrackId="@context.TrackId"
TrackTitle="@context.Title"
PlaylistShareToken="@ShareToken"
Width="50" Height="50"/>
}
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 не передан, пытаемся получить его из хранилища
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()

View File

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