Проведен аудит. Добавлено переключение треков

This commit is contained in:
FrigaT
2026-05-21 20:49:55 +03:00
parent 38af6174fa
commit 9139d8ecfe
23 changed files with 351 additions and 222 deletions

View File

@@ -17,7 +17,13 @@
<MudItem>
<MudStack Spacing="0">
<MudText Typo="Typo.body1" Color="Color.Secondary">@Track.Title</MudText>
<MudText Typo="Typo.body2" >@string.Join(", ", Track.Artists.Select(a => a.Name))</MudText>
<MudStack Row AlignItems="AlignItems.Center" Spacing="1">
<MudText Typo="Typo.body2">@string.Join(", ", Track.Artists.Select(a => a.Name))</MudText>
@if (!string.IsNullOrEmpty(AddedByName))
{
<MudChip T="string" Size="Size.Small" Variant="Variant.Outlined" Color="Color.Secondary" Class="pa-0 px-1" Style="height: 18px; font-size: 10px;">@AddedByName</MudChip>
}
</MudStack>
</MudStack>
</MudItem>
@@ -33,4 +39,5 @@
[Parameter] public YandexTrack Track { get; set; } = null!;
[Parameter] public string PlaylistShareToken { get; set; } = string.Empty;
[Parameter] public bool CanPlay { get; set; } = true;
[Parameter] public string? AddedByName { get; set; }
}

View File

@@ -11,6 +11,12 @@
<MudStack Spacing="1" Row AlignItems="AlignItems.Center" Wrap="Wrap.NoWrap">
<!-- Кнопки управления -->
<MudIconButton Icon="@Icons.Material.Filled.SkipPrevious"
Size="Size.Small"
Color="Color.Default"
Disabled="@(!AudioPlayerService.HasPrevious)"
OnClick="() => AudioPlayerService.PlayPreviousAsync()" />
<MudItem @onmouseenter="() => { _isPlayHovered = true; }"
@onmouseleave="() => { _isPlayHovered = false; }"
Class="relative d-inline-block rounded overflow-hidden cursor-pointer"
@@ -32,7 +38,13 @@
ToggledChanged="OnPlayClick" />
</MudItem>
</MudItem>
<MudIconButton Icon="@Icons.Material.Filled.SkipNext"
Size="Size.Small"
Color="Color.Default"
Disabled="@(!AudioPlayerService.HasNext)"
OnClick="() => AudioPlayerService.PlayNextAsync()" />
<!-- Название и прогресс -->
@if (AudioPlayerService.CurrentTrack != null)
{
@@ -170,15 +182,9 @@
#endregion
#region Обработка сервиса
private async Task OnServiceLoadAndPlay(string trackId, string? accessToken, string? sharedPlaylistId)
private async Task OnServiceLoadAndPlay(string trackId, string? playToken, string? sharedPlaylistId)
{
if (string.IsNullOrWhiteSpace(accessToken))
{
var tokens = await TokenStorage.GetTokensAsync();
accessToken = tokens.token;
}
if (string.IsNullOrWhiteSpace(accessToken) && string.IsNullOrWhiteSpace(sharedPlaylistId))
if (string.IsNullOrWhiteSpace(playToken) && string.IsNullOrWhiteSpace(sharedPlaylistId))
{
Snackbar.Add("Токен авторизации не найден. Пожалуйста, войдите заново.", Severity.Error);
return;
@@ -186,7 +192,7 @@
var streamUrl = new Uri(Http.BaseAddress!, $"/api/audio/track/{trackId}").ToString();
await EnsureAudioModuleAsync();
await _audioElement!.InvokeVoidAsync("loadAndPlay", streamUrl, accessToken, sharedPlaylistId);
await _audioElement!.InvokeVoidAsync("loadAndPlay", streamUrl, playToken, sharedPlaylistId);
}
private async Task OnServicePlay()