diff --git a/lib/music_library/records/musicbrainz_data.ex b/lib/music_library/records/musicbrainz_data.ex new file mode 100644 index 00000000..f46a0c83 --- /dev/null +++ b/lib/music_library/records/musicbrainz_data.ex @@ -0,0 +1,29 @@ +defmodule MusicLibrary.Records.MusicbrainzData do + def included_release_groups(musicbrainz_data, included_release_group_ids) do + musicbrainz_data + |> Map.get("relations", []) + |> Enum.filter(fn relation -> + relation["release_group"]["id"] in included_release_group_ids + end) + |> Enum.map(fn relation -> + MusicBrainz.ReleaseGroup.from_api_response(relation["release_group"]) + end) + end + + def release_ids(musicbrainz_data) do + musicbrainz_data + |> Map.get("releases", []) + |> Enum.map(fn release -> release["id"] end) + end + + def included_release_group_ids(musicbrainz_data) do + musicbrainz_data + |> Map.get("relations", []) + |> Enum.filter(fn relation -> + relation["target-type"] == "release_group" and + relation["type"] == "included in" and + relation["direction"] == "backward" + end) + |> Enum.map(fn relation -> relation["release_group"]["id"] end) + end +end diff --git a/lib/music_library/records/record.ex b/lib/music_library/records/record.ex index 64b4dc49..e85da2c8 100644 --- a/lib/music_library/records/record.ex +++ b/lib/music_library/records/record.ex @@ -2,7 +2,7 @@ defmodule MusicLibrary.Records.Record do use Ecto.Schema import Ecto.Changeset - alias MusicLibrary.Records.{Artist, Cover} + alias MusicLibrary.Records.{Artist, Cover, MusicbrainzData} @formats [:cd, :backup, :vinyl, :blu_ray, :dvd, :multi] @types [:album, :ep, :live, :compilation, :single, :other] @@ -32,18 +32,14 @@ defmodule MusicLibrary.Records.Record do def formats, do: @formats def types, do: @types - def child_release_groups(record) do - record.musicbrainz_data - |> Map.get("relations", []) - |> Enum.filter(fn relation -> - relation["release_group"]["id"] in record.included_release_group_ids - end) - |> Enum.map(fn relation -> - MusicBrainz.ReleaseGroup.from_api_response(relation["release_group"]) - end) + def included_release_groups(record) do + MusicbrainzData.included_release_groups( + record.musicbrainz_data, + record.included_release_group_ids + ) end - def child_release_groups_count(record) do + def included_release_groups_count(record) do Enum.count(record.included_release_group_ids) end @@ -125,8 +121,7 @@ defmodule MusicLibrary.Records.Record do changeset musicbrainz_data -> - release_ids = Enum.map(musicbrainz_data["releases"], fn r -> r["id"] end) - put_change(changeset, :release_ids, release_ids) + put_change(changeset, :release_ids, MusicbrainzData.release_ids(musicbrainz_data)) end end @@ -139,22 +134,11 @@ defmodule MusicLibrary.Records.Record do put_change( changeset, :included_release_group_ids, - extract_included_release_group_ids(musicbrainz_data) + MusicbrainzData.included_release_group_ids(musicbrainz_data) ) end end - defp extract_included_release_group_ids(musicbrainz_data) do - musicbrainz_data - |> Map.get("relations", []) - |> Enum.filter(fn relation -> - relation["target-type"] == "release_group" and - relation["type"] == "included in" and - relation["direction"] == "backward" - end) - |> Enum.map(fn relation -> relation["release_group"]["id"] end) - end - def attrs_from_release_group(release_group) do musicbrainz_id = release_group["id"] diff --git a/lib/music_library_web/components/record_components.ex b/lib/music_library_web/components/record_components.ex index b1acd9a2..6b3d414e 100644 --- a/lib/music_library_web/components/record_components.ex +++ b/lib/music_library_web/components/record_components.ex @@ -50,12 +50,12 @@ defmodule MusicLibraryWeb.RecordComponents do
{format_label(record.format)} · {type_label(record.type)}
- 0}>
+ 0}>
·
{gettext("Number of included records")}
- <.round_badge text={Records.Record.child_release_groups_count(record)} />
+ <.round_badge text={Records.Record.included_release_groups_count(record)} />
·
@@ -77,12 +77,12 @@ defmodule MusicLibraryWeb.RecordComponents do
{format_label(record.format)} · {type_label(record.type)}
- 0}>
+ 0}>
·
{gettext("Number of included records")}
- <.round_badge text={Records.Record.child_release_groups_count(record)} />
+ <.round_badge text={Records.Record.included_release_groups_count(record)} />
diff --git a/lib/music_library_web/live/collection_live/show.html.heex b/lib/music_library_web/live/collection_live/show.html.heex
index ca4b684c..5cee9fee 100644
--- a/lib/music_library_web/live/collection_live/show.html.heex
+++ b/lib/music_library_web/live/collection_live/show.html.heex
@@ -213,7 +213,7 @@
-
-