Harden release label display

This commit is contained in:
Claudio Ortolina
2025-05-18 20:57:17 +01:00
parent 8340a8d51f
commit 051c6195b5
7 changed files with 22 additions and 29 deletions
+5 -3
View File
@@ -1,6 +1,6 @@
defmodule MusicBrainz.Release do defmodule MusicBrainz.Release do
@enforce_keys [:id, :title, :artists, :date, :barcode, :media] @enforce_keys [:id, :title, :disambiguation, :artists, :date, :barcode, :country, :media]
defstruct [:id, :title, :artists, :date, :barcode, :media] defstruct [:id, :title, :disambiguation, :artists, :date, :barcode, :country, :media]
defmodule Artist do defmodule Artist do
@enforce_keys [:id, :name, :sort_name] @enforce_keys [:id, :name, :sort_name]
@@ -37,9 +37,11 @@ defmodule MusicBrainz.Release do
%__MODULE__{ %__MODULE__{
id: r["id"], id: r["id"],
title: r["title"], title: r["title"],
disambiguation: r["disambiguation"],
artists: parse_artists(r["artist-credit"] || []), artists: parse_artists(r["artist-credit"] || []),
date: r["date"], date: r["date"],
barcode: r["barcode"], barcode: r["barcode"],
country: r["country"],
media: parse_media(r["media"] || []) media: parse_media(r["media"] || [])
} }
end end
@@ -51,7 +53,7 @@ defmodule MusicBrainz.Release do
format: m["format"], format: m["format"],
number: m["position"], number: m["position"],
track_count: m["track-count"], track_count: m["track-count"],
tracks: parse_tracks(m["tracks"]) tracks: parse_tracks(m["tracks"] || [])
} }
end) end)
end end
+7 -5
View File
@@ -46,16 +46,18 @@ defmodule MusicBrainz.ReleaseSearchResult do
end) end)
end end
defp parse_format(nil), do: :unknown
defp parse_format("CD"), do: :cd defp parse_format("CD"), do: :cd
defp parse_format("DVD-Audio"), do: :dvd defp parse_format("DVD-Audio"), do: :dvd
defp parse_format("DVD-Video"), do: :dvd defp parse_format("DVD-Video"), do: :dvd
defp parse_format("Blu-ray"), do: :blu_ray defp parse_format("Blu-ray"), do: :blu_ray
defp parse_format("Digital Media"), do: :digital_download
defp parse_format(maybe_vinyl) do defp parse_format(format) do
if String.contains?(maybe_vinyl, "Vinyl") do cond do
:vinyl String.contains?(format, "Vinyl") -> :vinyl
else String.contains?(format, "CD") -> :cd
:unknown true -> :unknown
end end
end end
end end
+4 -3
View File
@@ -2,7 +2,7 @@ defmodule MusicLibrary.Records.Record do
use Ecto.Schema use Ecto.Schema
import Ecto.Changeset import Ecto.Changeset
alias MusicBrainz.ReleaseGroup alias MusicBrainz.{Release, ReleaseGroup}
alias MusicLibrary.Records.{Artist, Cover} alias MusicLibrary.Records.{Artist, Cover}
@formats [:cd, :backup, :vinyl, :blu_ray, :dvd, :multi] @formats [:cd, :backup, :vinyl, :blu_ray, :dvd, :multi]
@@ -74,13 +74,14 @@ defmodule MusicLibrary.Records.Record do
def releases(record) do def releases(record) do
record.musicbrainz_data record.musicbrainz_data
|> ReleaseGroup.releases() |> ReleaseGroup.releases()
|> Enum.sort_by(fn r -> {r["date"], r["country"]} end, :desc) |> Enum.map(&Release.from_api_response/1)
|> Enum.sort_by(fn r -> {r.date, r.country} end, :desc)
end end
def selected_release(record) do def selected_release(record) do
record record
|> releases() |> releases()
|> Enum.find(fn release -> release["id"] == record.selected_release_id end) |> Enum.find(fn release -> release.id == record.selected_release_id end)
end end
def changeset(record, attrs) do def changeset(record, attrs) do
@@ -192,7 +192,7 @@ defmodule MusicLibraryWeb.FormComponent do
|> Enum.map(fn release -> |> Enum.map(fn release ->
{ {
release_label(release), release_label(release),
release["id"] release.id
} }
end) end)
end end
@@ -1,6 +1,7 @@
defmodule MusicLibraryWeb.RecordComponents do defmodule MusicLibraryWeb.RecordComponents do
use MusicLibraryWeb, :html use MusicLibraryWeb, :html
alias MusicBrainz.ReleaseSearchResult
alias MusicLibrary.Records alias MusicLibrary.Records
alias Phoenix.LiveView.JS alias Phoenix.LiveView.JS
@@ -303,10 +304,10 @@ defmodule MusicLibraryWeb.RecordComponents do
def release_label(release) do def release_label(release) do
[ [
release["date"], release.date,
release["country"] |> country_label(), release.country |> country_label(),
release["packaging"] |> packaging_label(), ReleaseSearchResult.format(release),
release["disambiguation"] release.disambiguation
] ]
|> Enum.reject(fn fragment -> fragment in [nil, ""] end) |> Enum.reject(fn fragment -> fragment in [nil, ""] end)
|> Enum.join(" ") |> Enum.join(" ")
@@ -324,9 +325,6 @@ defmodule MusicLibraryWeb.RecordComponents do
end end
end end
defp packaging_label("None"), do: gettext("Digital download")
defp packaging_label(other), do: other
def format_duration(milliseconds) do def format_duration(milliseconds) do
milliseconds milliseconds
|> System.convert_time_unit(:millisecond, :second) |> System.convert_time_unit(:millisecond, :second)
-5
View File
@@ -743,11 +743,6 @@ msgstr ""
msgid "Selected Release" msgid "Selected Release"
msgstr "" msgstr ""
#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Digital download"
msgstr ""
#: lib/music_library_web/components/release_component.ex #: lib/music_library_web/components/release_component.ex
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Error loading tracks" msgid "Error loading tracks"
-5
View File
@@ -743,11 +743,6 @@ msgstr ""
msgid "Selected Release" msgid "Selected Release"
msgstr "" msgstr ""
#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Digital download"
msgstr ""
#: lib/music_library_web/components/release_component.ex #: lib/music_library_web/components/release_component.ex
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Error loading tracks" msgid "Error loading tracks"