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