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

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

@@ -1,6 +1,17 @@
@page "/shared/{token}"
<PageTitle>@_playlist?.Title - Playlist Share</PageTitle>
<HeadContent>
<meta property="og:title" content="@(_playlist?.Title ?? "Поделиться плейлистом")" />
<meta property="og:description" content="@($"Слушайте плейлист «{_playlist?.Title}» на Playlist Share")" />
@if (!string.IsNullOrEmpty(_playlist?.CoverUrl))
{
<meta property="og:image" content="@_playlist.CoverUrl" />
}
<meta property="og:url" content="@Navigation.Uri" />
<meta property="og:type" content="music.playlist" />
</HeadContent>
@using PlaylistShared.Pwa.Components.Common
@using PlaylistShared.Pwa.Components.Global
@using PlaylistShared.Pwa.Components.SharedPlaylist
@@ -245,7 +256,8 @@
Style="min-height: 0;">
<RowTemplate>
<MudTd Class="py-1 px-0" Style="width: 100%;">
<TrackItem Track="@context" PlaylistShareToken="@Token" CanPlay="@_canPlay" />
<TrackItem Track="@context" PlaylistShareToken="@Token" CanPlay="@_canPlay"
AddedByName="@(_trackAdditions.TryGetValue(context.TrackId, out var n) ? n : null)" />
</MudTd>
@if (_canRemove)
{
@@ -444,6 +456,10 @@
/// </summary>
private List<YandexTrack> _tracks = new();
/// <summary>
/// Словарь trackId → имя пользователя, добавившего трек.
/// </summary>
private Dictionary<string, string?> _trackAdditions = new();
/// <summary>
/// Продолжительность плейлиста.
/// </summary>
long _playlistDurationMs;
@@ -621,6 +637,15 @@
_existingTrackIds = _tracks.Select(t => t.TrackId).ToHashSet();
_playlistDurationMs = _tracks.Sum(t => t.DurationMs);
_playlistTrackCount = _tracks.Count();
AudioPlayerService.SetQueue(_tracks, shareToken: Token);
try
{
var additionsResp = await Http.GetFromJsonAsync<ApiResponse<Dictionary<string, string?>>>($"/api/sharedplaylist/{Token}/additions");
if (additionsResp?.Success == true && additionsResp.Data != null)
_trackAdditions = additionsResp.Data;
}
catch { }
}
else
{