From 2d9a2914454c78b368401ada251ab455f0cf6efc Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Mon, 5 May 2025 11:13:29 +0100 Subject: [PATCH] Format duration --- .../components/record_components.ex | 38 +++++++++++++++++++ .../live/collection_live/show.ex | 3 +- .../live/collection_live/show.html.heex | 6 ++- 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/lib/music_library_web/components/record_components.ex b/lib/music_library_web/components/record_components.ex index 88fecf45..c0629e92 100644 --- a/lib/music_library_web/components/record_components.ex +++ b/lib/music_library_web/components/record_components.ex @@ -319,6 +319,44 @@ defmodule MusicLibraryWeb.RecordComponents do defp packaging_label("None"), do: gettext("Digital download") defp packaging_label(other), do: other + def format_duration(milliseconds) do + milliseconds + |> System.convert_time_unit(:millisecond, :second) + |> format_seconds() + end + + defp format_seconds(seconds) when seconds <= 59 do + "0:#{zero_pad(seconds)}" + end + + defp format_seconds(seconds) do + minutes = div(seconds, 60) + remaining_seconds = rem(seconds, 60) + + format_minutes(minutes, remaining_seconds) + end + + defp format_minutes(minutes, seconds) when minutes <= 59 do + "#{minutes}:#{zero_pad(seconds)}" + end + + defp format_minutes(minutes, seconds) do + hours = div(minutes, 60) + remaining_minutes = rem(minutes, 60) + + format_hours(hours, remaining_minutes, seconds) + end + + defp format_hours(hours, minutes, seconds) do + "#{hours}:#{zero_pad(minutes)}:#{zero_pad(seconds)}" + end + + defp zero_pad(integer) do + integer + |> to_string() + |> String.pad_leading(2, "0") + end + def toggle_actions_menu(record_id) do JS.toggle(to: "#actions-#{record_id}") |> JS.toggle_class("pointer-events-none", to: "#records > li") diff --git a/lib/music_library_web/live/collection_live/show.ex b/lib/music_library_web/live/collection_live/show.ex index 5e349072..59a1db54 100644 --- a/lib/music_library_web/live/collection_live/show.ex +++ b/lib/music_library_web/live/collection_live/show.ex @@ -7,7 +7,8 @@ defmodule MusicLibraryWeb.CollectionLive.Show do close_actions_menu: 1, format_label: 1, type_label: 1, - selected_release_label: 1 + selected_release_label: 1, + format_duration: 1 ] alias MusicLibrary.Records diff --git a/lib/music_library_web/live/collection_live/show.html.heex b/lib/music_library_web/live/collection_live/show.html.heex index 71c4fefe..0e897525 100644 --- a/lib/music_library_web/live/collection_live/show.html.heex +++ b/lib/music_library_web/live/collection_live/show.html.heex @@ -312,8 +312,10 @@ >
{track.position} - {track.title} - {track.length} + {track.title} + + {format_duration(track.length)} +