Вынесена логика формирования обложки
This commit is contained in:
@@ -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}");
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
19
PlaylistShared.Pwa/Extensions/StringExtensions.cs
Normal file
19
PlaylistShared.Pwa/Extensions/StringExtensions.cs
Normal 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}");
|
||||
}
|
||||
}
|
||||
@@ -13,4 +13,5 @@
|
||||
@using MudBlazor
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@using PlaylistShared.Shared
|
||||
@using PlaylistShared.Pwa.Components
|
||||
@using PlaylistShared.Pwa.Components
|
||||
@using PlaylistShared.Pwa.Extensions
|
||||
Reference in New Issue
Block a user