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 {