Use release instead of year
This commit is contained in:
@@ -4,7 +4,7 @@ defmodule MusicLibrary.Records do
|
||||
|
||||
alias MusicLibrary.Records.{MusicBrainz, Record}
|
||||
|
||||
@fields [:id, :type, :format, :title, :year, :genres, :musicbrainz_id, :image_data_hash]
|
||||
@fields [:id, :type, :format, :title, :release, :genres, :musicbrainz_id, :image_data_hash]
|
||||
|
||||
def list_records(opts \\ []) do
|
||||
limit = Keyword.get(opts, :limit, 20)
|
||||
@@ -104,7 +104,7 @@ defmodule MusicLibrary.Records do
|
||||
"musicbrainz_id" => musicbrainz_id,
|
||||
"title" => release_group["title"],
|
||||
"artists" => artists_attrs,
|
||||
"year" => parse_year(release_group["first-release-date"]),
|
||||
"release" => release_group["first-release-date"],
|
||||
"type" => parse_subtype(release_group["primary-type"]),
|
||||
"format" => format,
|
||||
"genres" => Enum.map(release_group["genres"], fn g -> g["name"] end),
|
||||
@@ -113,17 +113,6 @@ defmodule MusicLibrary.Records do
|
||||
}
|
||||
end
|
||||
|
||||
defp parse_year(iso_date) when is_binary(iso_date) do
|
||||
case Date.from_iso8601(iso_date) do
|
||||
{:ok, date} ->
|
||||
date.year
|
||||
|
||||
_error ->
|
||||
{year, _rest} = Integer.parse(iso_date)
|
||||
{:ok, year}
|
||||
end
|
||||
end
|
||||
|
||||
defp parse_subtype("Album"), do: :album
|
||||
defp parse_subtype("EP"), do: :ep
|
||||
defp parse_subtype("Live"), do: :live
|
||||
|
||||
@@ -173,7 +173,7 @@ defmodule MusicLibrary.Records.MusicBrainz do
|
||||
rg["artist-credit"]
|
||||
|> Enum.map(fn ac -> ac["artist"]["name"] end)
|
||||
|> Enum.join(", "),
|
||||
year: parse_year(rg["first-release-date"])
|
||||
release: rg["first-release-date"]
|
||||
}
|
||||
end)}
|
||||
end
|
||||
@@ -231,15 +231,6 @@ defmodule MusicLibrary.Records.MusicBrainz do
|
||||
end
|
||||
end
|
||||
|
||||
defp parse_year(nil), do: ""
|
||||
|
||||
defp parse_year(iso_date) do
|
||||
case Date.from_iso8601(iso_date) do
|
||||
{:ok, date} -> date.year
|
||||
_error -> nil
|
||||
end
|
||||
end
|
||||
|
||||
defp parse_subtype("Album"), do: :album
|
||||
defp parse_subtype("EP"), do: :ep
|
||||
defp parse_subtype("Live"), do: :live
|
||||
|
||||
@@ -16,6 +16,7 @@ defmodule MusicLibrary.Records.Record do
|
||||
field :year, :integer
|
||||
field :musicbrainz_id, Ecto.UUID
|
||||
field :genres, {:array, :string}
|
||||
field :release, :string
|
||||
|
||||
embeds_many :artists, Artist do
|
||||
field :name, :string
|
||||
@@ -35,14 +36,14 @@ defmodule MusicLibrary.Records.Record do
|
||||
:format,
|
||||
:title,
|
||||
:musicbrainz_id,
|
||||
:year,
|
||||
:release,
|
||||
:genres,
|
||||
:image_url,
|
||||
:image_data
|
||||
])
|
||||
|> cast_embed(:artists, with: &artist_changeset/2)
|
||||
|> generate_image_data_hash()
|
||||
|> validate_required([:type, :title, :musicbrainz_id, :year, :genres])
|
||||
|> validate_required([:type, :title, :musicbrainz_id, :release, :genres])
|
||||
end
|
||||
|
||||
@doc false
|
||||
|
||||
@@ -33,7 +33,7 @@ defmodule MusicLibraryWeb.RecordLive.FormComponent do
|
||||
prompt="Choose a value"
|
||||
options={Ecto.Enum.values(MusicLibrary.Records.Record, :type)}
|
||||
/>
|
||||
<.input field={@form[:year]} type="number" label="Year" />
|
||||
<.input field={@form[:release]} type="text" label="Release" />
|
||||
<div>
|
||||
<.label for={@uploads.image_data.ref}>
|
||||
Cover art
|
||||
|
||||
@@ -41,7 +41,7 @@ defmodule MusicLibraryWeb.RecordLive.ImportComponent do
|
||||
<%= @release_group.title %>
|
||||
|
||||
<span class="mt-1 text-xs leading-5 text-gray-500">
|
||||
<%= @release_group.year %>
|
||||
<%= @release_group.release %>
|
||||
</span>
|
||||
</p>
|
||||
<p class="mt-1 truncate text-xs leading-5 text-gray-500"><%= @release_group.artists %></p>
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
<:col :let={{_id, record}} label="Record">
|
||||
<p class="text-sm max-sm:text-xs"><%= Enum.map(record.artists, fn a -> a.name end) %></p>
|
||||
<p class="text-base font-semibold text-wrap max-sm:text-xs"><%= record.title %></p>
|
||||
<p class="text-sm max-sm:text-xs"><%= record.year %></p>
|
||||
<p class="text-sm max-sm:text-xs"><%= record.release %></p>
|
||||
</:col>
|
||||
<:action :let={{_id, record}}>
|
||||
<div class="sr-only">
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<code><%= @record.musicbrainz_id %></code>
|
||||
</a>
|
||||
</:item>
|
||||
<:item title="Year"><%= @record.year %></:item>
|
||||
<:item title="Release"><%= @record.release %></:item>
|
||||
<:item title="Genres">
|
||||
<span
|
||||
:for={genre <- @record.genres}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
defmodule Obsidian.Entry do
|
||||
defstruct [:type, :musicbrainz_id, :title, :year, :image_url, :genres]
|
||||
defstruct [:type, :musicbrainz_id, :title, :release, :image_url, :genres]
|
||||
end
|
||||
|
||||
@@ -8,7 +8,7 @@ defmodule Obsidian.Parser do
|
||||
type: parse_subtype(meta["subType"]),
|
||||
musicbrainz_id: meta["id"],
|
||||
title: meta["title"],
|
||||
year: meta["year"] |> maybe_parse_year(),
|
||||
release: meta["year"] |> parse_release(),
|
||||
image_url: meta["image"],
|
||||
genres: meta["genres"]
|
||||
}}
|
||||
@@ -41,11 +41,7 @@ defmodule Obsidian.Parser do
|
||||
defp parse_subtype("Single"), do: :single
|
||||
defp parse_subtype(_), do: :other
|
||||
|
||||
defp maybe_parse_year(nil), do: nil
|
||||
defp maybe_parse_year(year) when is_integer(year), do: year
|
||||
|
||||
defp maybe_parse_year(year) when is_binary(year) do
|
||||
{integer, _remainder} = Integer.parse(year, 10)
|
||||
integer
|
||||
end
|
||||
defp parse_release(nil), do: nil
|
||||
defp parse_release(year) when is_integer(year), do: Integer.to_string(year)
|
||||
defp parse_release(year) when is_binary(year), do: year
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user