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
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
defmodule MusicLibrary.Repo.Migrations.AddReleaseToRecords do
|
||||
use Ecto.Migration
|
||||
import Ecto.Query
|
||||
|
||||
def up do
|
||||
alter table(:records) do
|
||||
add :release, :string
|
||||
end
|
||||
|
||||
flush()
|
||||
|
||||
query =
|
||||
from(r in MusicLibrary.Records.Record,
|
||||
update: [set: [release: r.year]]
|
||||
)
|
||||
|
||||
MusicLibrary.Repo.update_all(query, [])
|
||||
end
|
||||
|
||||
def down do
|
||||
alter table(:records) do
|
||||
remove :release
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -33,7 +33,7 @@ defmodule MusicLibraryWeb.RecordLiveTest do
|
||||
|
||||
for record <- present do
|
||||
assert html =~ escape(record.title)
|
||||
assert html =~ to_string(record.year)
|
||||
assert html =~ to_string(record.release)
|
||||
|
||||
for artist <- record.artists do
|
||||
assert html =~ escape(artist["name"])
|
||||
|
||||
@@ -14,7 +14,7 @@ defmodule Obsidian.ParserTest do
|
||||
type: :album,
|
||||
musicbrainz_id: "20790e26-98e4-3ad3-a67f-b674758b942d",
|
||||
title: "Marbles",
|
||||
year: 2004,
|
||||
release: "2004",
|
||||
image_url:
|
||||
"https://coverartarchive.org/release-group/20790e26-98e4-3ad3-a67f-b674758b942d/front",
|
||||
genres: [
|
||||
@@ -41,7 +41,7 @@ defmodule Obsidian.ParserTest do
|
||||
musicbrainz_id: "950092d6-45f6-4269-87da-99a9ff2fcc52",
|
||||
title: "Guardians of the Galaxy: Awesome Mix, Vol. 1",
|
||||
type: :album,
|
||||
year: 2014
|
||||
release: "2014"
|
||||
}}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -44,7 +44,7 @@ defmodule MusicLibrary.RecordsFixtures do
|
||||
title: Enum.random(@titles),
|
||||
type: :album,
|
||||
format: :cd,
|
||||
year: Enum.random(1969..2024)
|
||||
release: Enum.random(1969..2024) |> Integer.to_string()
|
||||
})
|
||||
|> MusicLibrary.Records.create_record()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user