diff --git a/PlaylistShared.Pwa/Extensions/LongExtensions.cs b/PlaylistShared.Pwa/Extensions/LongExtensions.cs
index acd101f..7775fc5 100644
--- a/PlaylistShared.Pwa/Extensions/LongExtensions.cs
+++ b/PlaylistShared.Pwa/Extensions/LongExtensions.cs
@@ -5,11 +5,33 @@ public static class LongExtensions
///
/// Преобразует миллисекунды в формат Минуты:Секунды
///
- 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,
}
}
\ No newline at end of file
diff --git a/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor b/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor
index 5bb08f2..b2b9dd2 100644
--- a/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor
+++ b/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor
@@ -45,6 +45,11 @@
+
+
@if (_isCreator && _isAuthenticated)
{
@@ -127,6 +132,12 @@
+
+
+
@if (_isCreator && _isAuthenticated)
{
}
-
- @_playlist?.Title
-
+
+
+ @_playlist?.Title
+
+
+ @if (_tracksLoading)
+ {
+
+ }
+ else
+ {
+
+ @($"Треков: {_playlistTrackCount} • Продолжительность: {_playlistDurationMs.FormatDuration(LongExtensions.FormatDurationType.hhmmss)}")
+
+ }
+
}
};
@@ -405,6 +429,14 @@
/// Список добавленных в плейлист треков.
///
private List _tracks = new();
+ ///
+ /// Продолжительность плейлиста.
+ ///
+ long _playlistDurationMs;
+ ///
+ /// Кол-во треков в ПЛ.
+ ///
+ int _playlistTrackCount;
/// Свойства плейлиста.
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();
- }
-
/// Удаление трека из списка плейлиста
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
{