Вынесена логика формирования обложки

This commit is contained in:
FrigaT
2026-04-14 19:03:11 +03:00
parent e0fca7e55e
commit acf02c85a7
5 changed files with 24 additions and 22 deletions

View File

@@ -6,7 +6,7 @@
@onmouseleave="HandleMouseLeave"
style="position: relative; display: inline-block; cursor: pointer;">
<MudImage Src="@FormatCoverUrl(CoverUrl)" Height="@Height" Width="@Width" Class="rounded" Style="display: block;" />
<MudImage Src="@CoverUrl.FormatCoverUrl(Width, Height)" Height="@Height" Width="@Width" Class="rounded" Style="display: block;" />
@if (_isHovered || IsCurrentTrackPlaying)
{
@@ -62,10 +62,4 @@
{
InvokeAsync(StateHasChanged);
}
private string FormatCoverUrl(string? url)
{
if (string.IsNullOrEmpty(url)) return "";
return "https://" + url.Replace("%%", $"{Width}x{Height}");
}
}

View File

@@ -11,7 +11,7 @@
<div style="display: flex; gap: 16px; align-items: center;">
@if (!string.IsNullOrEmpty(Playlist?.CoverUrl))
{
<MudImage Src="@FormatCoverUrl(Playlist.CoverUrl, "80x80")" Height="80" Width="80" Class="rounded" />
<MudImage Src="@Playlist.CoverUrl.FormatCoverUrl(80, 80)" Height="80" Width="80" Class="rounded" />
}
<div>
<div style="display: flex; align-items: center; gap: 8px; flex-wrap: wrap;">
@@ -144,10 +144,4 @@
await OnPermissionsChanged.InvokeAsync();
}
}
private string FormatCoverUrl(string? url, string size)
{
if (string.IsNullOrEmpty(url)) return "";
return "https://" + url.Replace("%%", size);
}
}

View File

@@ -30,7 +30,7 @@
}
else
{
<MudImage Src="@FormatCoverUrl(context.CoverUri, "50x50")" Height="50" Width="50" Class="rounded" />
<MudImage Src="@context.CoverUri.FormatCoverUrl(50, 50)" Height="50" Width="50" Class="rounded" />
}
}
</MudTd>
@@ -141,12 +141,6 @@
await OnPlayTrack.InvokeAsync(trackId);
}
private string FormatCoverUrl(string? url, string size)
{
if (string.IsNullOrEmpty(url)) return "";
return "https://" + url.Replace("%%", size);
}
private string FormatDuration(long ms)
{
var seconds = ms / 1000;

View File

@@ -0,0 +1,19 @@
namespace PlaylistShared.Pwa.Extensions;
public static class StringExtensions
{
/// <summary>
/// Преобразует шаблон URL обложки Яндекс.Музыки в полный URL с указанным размером.
/// </summary>
/// <param name="coverUri">Шаблон URL (например, "avatars.yandex.net/get-music-content/.../%%")</param>
/// <param name="width">Желаемая ширина обложки (по умолчанию 200)</param>
/// <param name="height">Желаемая высота обложки (по умолчанию 200)</param>
/// <returns>Полный URL обложки или пустую строку, если входная строка null или пуста.</returns>
public static string FormatCoverUrl(this string? coverUri, int width = 200, int height = 200)
{
if (string.IsNullOrEmpty(coverUri))
return string.Empty;
return "https://" + coverUri.Replace("%%", $"{width}x{height}");
}
}

View File

@@ -14,3 +14,4 @@
@using Microsoft.AspNetCore.Authorization
@using PlaylistShared.Shared
@using PlaylistShared.Pwa.Components
@using PlaylistShared.Pwa.Extensions