Harden release label display
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user