Consolidate duration formatting
This commit is contained in:
@@ -3,6 +3,7 @@ defmodule MusicLibraryWeb.Components.Release do
|
|||||||
use Gettext, backend: MusicLibraryWeb.Gettext
|
use Gettext, backend: MusicLibraryWeb.Gettext
|
||||||
|
|
||||||
alias MusicLibrary.ScrobbleActivity
|
alias MusicLibrary.ScrobbleActivity
|
||||||
|
alias MusicLibraryWeb.Duration
|
||||||
|
|
||||||
def open(id), do: Fluxon.open_dialog(id)
|
def open(id), do: Fluxon.open_dialog(id)
|
||||||
|
|
||||||
@@ -107,7 +108,7 @@ defmodule MusicLibraryWeb.Components.Release do
|
|||||||
{track.title}
|
{track.title}
|
||||||
</span>
|
</span>
|
||||||
<span class="table-cell text-xs md:text-sm text-right pl-2">
|
<span class="table-cell text-xs md:text-sm text-right pl-2">
|
||||||
{track.length && format_duration(track.length)}
|
{track.length && Duration.format_duration(track.length)}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@@ -197,7 +198,7 @@ defmodule MusicLibraryWeb.Components.Release do
|
|||||||
defp medium_duration(medium) do
|
defp medium_duration(medium) do
|
||||||
medium
|
medium
|
||||||
|> MusicBrainz.Release.medium_duration()
|
|> MusicBrainz.Release.medium_duration()
|
||||||
|> format_duration()
|
|> Duration.format_duration()
|
||||||
end
|
end
|
||||||
|
|
||||||
defp medium_title(medium) do
|
defp medium_title(medium) do
|
||||||
@@ -207,42 +208,4 @@ defmodule MusicLibraryWeb.Components.Release do
|
|||||||
medium.title
|
medium.title
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp 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
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
defmodule MusicLibraryWeb.Duration do
|
||||||
|
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
|
||||||
|
end
|
||||||
@@ -2,6 +2,7 @@ defmodule MusicLibraryWeb.ScrobbleLive.Show do
|
|||||||
use MusicLibraryWeb, :live_view
|
use MusicLibraryWeb, :live_view
|
||||||
|
|
||||||
alias MusicLibrary.ScrobbleActivity
|
alias MusicLibrary.ScrobbleActivity
|
||||||
|
alias MusicLibraryWeb.Duration
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(_params, _session, socket) do
|
def mount(_params, _session, socket) do
|
||||||
@@ -78,14 +79,4 @@ defmodule MusicLibraryWeb.ScrobbleLive.Show do
|
|||||||
)}
|
)}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp format_duration(nil), do: "Unknown"
|
|
||||||
|
|
||||||
defp format_duration(milliseconds) when is_integer(milliseconds) do
|
|
||||||
seconds = div(milliseconds, 1000)
|
|
||||||
minutes = div(seconds, 60)
|
|
||||||
remaining_seconds = rem(seconds, 60)
|
|
||||||
|
|
||||||
"#{minutes}:#{String.pad_leading(Integer.to_string(remaining_seconds), 2, "0")}"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -143,7 +143,7 @@
|
|||||||
:if={track.length}
|
:if={track.length}
|
||||||
class="text-xs text-gray-500 dark:text-gray-400 font-mono"
|
class="text-xs text-gray-500 dark:text-gray-400 font-mono"
|
||||||
>
|
>
|
||||||
{format_duration(track.length)}
|
{Duration.format_duration(track.length)}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user