Доработана страница отображения ПЛ
This commit is contained in:
@@ -5,11 +5,33 @@ public static class LongExtensions
|
||||
/// <summary>
|
||||
/// Преобразует миллисекунды в формат Минуты:Секунды
|
||||
/// </summary>
|
||||
public static string FormatDuration(this long ms)
|
||||
public static string FormatDuration(this long ms, FormatDurationType format = FormatDurationType.mmss)
|
||||
{
|
||||
var seconds = ms / 1000;
|
||||
var mins = seconds / 60;
|
||||
var secs = seconds % 60;
|
||||
return $"{mins}:{secs:D2}";
|
||||
|
||||
var mm = seconds / 60;
|
||||
var ss = seconds % 60;
|
||||
|
||||
if (format == FormatDurationType.mmss || mm < 60)
|
||||
{
|
||||
return $"{mm}:{ss:D2}";
|
||||
}
|
||||
else if (format == FormatDurationType.hhmmss)
|
||||
{
|
||||
var hh = mm / 60;
|
||||
mm = mm / 60;
|
||||
|
||||
return $"{hh}:{mm:D2}:{ss:D2}";
|
||||
}
|
||||
else
|
||||
{
|
||||
return $"{mm}:{ss:D2}";
|
||||
}
|
||||
}
|
||||
|
||||
public enum FormatDurationType
|
||||
{
|
||||
mmss,
|
||||
hhmmss,
|
||||
}
|
||||
}
|
||||
@@ -45,6 +45,11 @@
|
||||
<MudIconButton Icon="@Icons.Material.Filled.Share"
|
||||
OnClick="SharePlaylist"
|
||||
Size="Size.Medium" />
|
||||
|
||||
<MudIconButton Icon="@CustomIcons.Yandex"
|
||||
Href="@($"https://music.yandex.ru/playlists/{_playlist?.YandexPlaylistUuid}")"
|
||||
Target="_blank"
|
||||
Size="Size.Medium" />
|
||||
|
||||
@if (_isCreator && _isAuthenticated)
|
||||
{
|
||||
@@ -127,6 +132,12 @@
|
||||
<MudMenuItem Icon="@Icons.Material.Filled.Share"
|
||||
OnClick="SharePlaylist"
|
||||
Label="Поделиться" />
|
||||
|
||||
<MudMenuItem Icon="@CustomIcons.Yandex"
|
||||
Href="@($"https://music.yandex.ru/playlists/{_playlist?.YandexPlaylistUuid}")"
|
||||
Label="Открыть в ЯМ"
|
||||
Target="_blank" />
|
||||
|
||||
@if (_isCreator && _isAuthenticated)
|
||||
{
|
||||
<MudMenuItem Icon="@Icons.Material.Filled.Settings"
|
||||
@@ -186,9 +197,22 @@
|
||||
<MudImage Src="@_playlist.CoverUrl.FormatCoverUrl(60, 60)" Height="60" Width="60" Class="rounded shadow-sm" />
|
||||
}
|
||||
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary">
|
||||
@_playlist?.Title
|
||||
</MudText>
|
||||
<MudStack Spacing="0" Class="pb-1">
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary">
|
||||
@_playlist?.Title
|
||||
</MudText>
|
||||
|
||||
@if (_tracksLoading)
|
||||
{
|
||||
<MudSkeleton Width="200px" Height="20px" SkeletonType="SkeletonType.Text" />
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudText Typo="Typo.caption" Color="Color.Secondary">
|
||||
@($"Треков: {_playlistTrackCount} • Продолжительность: {_playlistDurationMs.FormatDuration(LongExtensions.FormatDurationType.hhmmss)}")
|
||||
</MudText>
|
||||
}
|
||||
</MudStack>
|
||||
</MudStack>
|
||||
}
|
||||
};
|
||||
@@ -405,6 +429,14 @@
|
||||
/// Список добавленных в плейлист треков.
|
||||
/// </summary>
|
||||
private List<YandexTrack> _tracks = new();
|
||||
/// <summary>
|
||||
/// Продолжительность плейлиста.
|
||||
/// </summary>
|
||||
long _playlistDurationMs;
|
||||
/// <summary>
|
||||
/// Кол-во треков в ПЛ.
|
||||
/// </summary>
|
||||
int _playlistTrackCount;
|
||||
|
||||
/// <summary>Свойства плейлиста.</summary>
|
||||
private SharedPlaylistDto? _playlist;
|
||||
@@ -554,7 +586,9 @@
|
||||
if (response?.Success == true && response.Data != null)
|
||||
{
|
||||
_tracks = response.Data.Tracks;
|
||||
await GenerateUniqTrackIds();
|
||||
_existingTrackIds = _tracks.Select(t => t.TrackId).ToHashSet();
|
||||
_playlistDurationMs = _tracks.Sum(t => t.DurationMs);
|
||||
_playlistTrackCount = _tracks.Count();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -573,11 +607,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
private async Task GenerateUniqTrackIds()
|
||||
{
|
||||
_existingTrackIds = _tracks.Select(t => t.TrackId).ToHashSet();
|
||||
}
|
||||
|
||||
/// <summary>Удаление трека из списка плейлиста</summary>
|
||||
private async Task OnRemoveTrack(YandexTrack track)
|
||||
{
|
||||
@@ -607,7 +636,9 @@
|
||||
{
|
||||
Snackbar.Add($"Трек \"{track.Title}\" добавлен", Severity.Success, c => c.SnackbarVariant = Variant.Outlined);
|
||||
_tracks.Insert(0, track);
|
||||
await GenerateUniqTrackIds();
|
||||
_existingTrackIds.Add(track.TrackId);
|
||||
_playlistDurationMs += track.DurationMs;
|
||||
_playlistTrackCount += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -636,7 +667,9 @@
|
||||
{
|
||||
Snackbar.Add("Трек удалён", Severity.Success);
|
||||
_tracks.Remove(track);
|
||||
await GenerateUniqTrackIds();
|
||||
_existingTrackIds.Remove(track.TrackId);
|
||||
_playlistDurationMs -= track.DurationMs;
|
||||
_playlistTrackCount -= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user