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
@enforce_keys [:id, :title, :artists, :date, :barcode, :media]
defstruct [:id, :title, :artists, :date, :barcode, :media]
@enforce_keys [:id, :title, :disambiguation, :artists, :date, :barcode, :country, :media]
defstruct [:id, :title, :disambiguation, :artists, :date, :barcode, :country, :media]
defmodule Artist do
@enforce_keys [:id, :name, :sort_name]
@@ -37,9 +37,11 @@ defmodule MusicBrainz.Release do
%__MODULE__{
id: r["id"],
title: r["title"],
disambiguation: r["disambiguation"],
artists: parse_artists(r["artist-credit"] || []),
date: r["date"],
barcode: r["barcode"],
country: r["country"],
media: parse_media(r["media"] || [])
}
end
@@ -51,7 +53,7 @@ defmodule MusicBrainz.Release do
format: m["format"],
number: m["position"],
track_count: m["track-count"],
tracks: parse_tracks(m["tracks"])
tracks: parse_tracks(m["tracks"] || [])
}
end)
end
+7 -5
View File
@@ -46,16 +46,18 @@ defmodule MusicBrainz.ReleaseSearchResult do
end)
end
defp parse_format(nil), do: :unknown
defp parse_format("CD"), do: :cd
defp parse_format("DVD-Audio"), do: :dvd
defp parse_format("DVD-Video"), do: :dvd
defp parse_format("Blu-ray"), do: :blu_ray
defp parse_format("Digital Media"), do: :digital_download
defp parse_format(maybe_vinyl) do
if String.contains?(maybe_vinyl, "Vinyl") do
:vinyl
else
:unknown
defp parse_format(format) do
cond do
String.contains?(format, "Vinyl") -> :vinyl
String.contains?(format, "CD") -> :cd
true -> :unknown
end
end
end
+4 -3
View File
@@ -2,7 +2,7 @@ defmodule MusicLibrary.Records.Record do
use Ecto.Schema
import Ecto.Changeset
alias MusicBrainz.ReleaseGroup
alias MusicBrainz.{Release, ReleaseGroup}
alias MusicLibrary.Records.{Artist, Cover}
@formats [:cd, :backup, :vinyl, :blu_ray, :dvd, :multi]
@@ -74,13 +74,14 @@ defmodule MusicLibrary.Records.Record do
def releases(record) do
record.musicbrainz_data
|> 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
def selected_release(record) do
record
|> releases()
|> Enum.find(fn release -> release["id"] == record.selected_release_id end)
|> Enum.find(fn release -> release.id == record.selected_release_id end)
end
def changeset(record, attrs) do
@@ -192,7 +192,7 @@ defmodule MusicLibraryWeb.FormComponent do
|> Enum.map(fn release ->
{
release_label(release),
release["id"]
release.id
}
end)
end
@@ -1,6 +1,7 @@
defmodule MusicLibraryWeb.RecordComponents do
use MusicLibraryWeb, :html
alias MusicBrainz.ReleaseSearchResult
alias MusicLibrary.Records
alias Phoenix.LiveView.JS
@@ -303,10 +304,10 @@ defmodule MusicLibraryWeb.RecordComponents do
def release_label(release) do
[
release["date"],
release["country"] |> country_label(),
release["packaging"] |> packaging_label(),
release["disambiguation"]
release.date,
release.country |> country_label(),
ReleaseSearchResult.format(release),
release.disambiguation
]
|> Enum.reject(fn fragment -> fragment in [nil, ""] end)
|> Enum.join(" ")
@@ -324,9 +325,6 @@ defmodule MusicLibraryWeb.RecordComponents do
end
end
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)
-5
View File
@@ -743,11 +743,6 @@ msgstr ""
msgid "Selected Release"
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
#, elixir-autogen, elixir-format
msgid "Error loading tracks"
-5
View File
@@ -743,11 +743,6 @@ msgstr ""
msgid "Selected Release"
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
#, elixir-autogen, elixir-format, fuzzy
msgid "Error loading tracks"