From a3eaaef9d2d972d9a49f758f8720c6fa5840b60b Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Tue, 1 Oct 2024 17:22:31 +0100 Subject: [PATCH] Move release group assembling logic into MB module --- lib/music_library/records/music_brainz.ex | 32 ++++++++++++++++- .../live/record_live/import_component.ex | 36 +------------------ 2 files changed, 32 insertions(+), 36 deletions(-) diff --git a/lib/music_library/records/music_brainz.ex b/lib/music_library/records/music_brainz.ex index 6906288e..976c54c5 100644 --- a/lib/music_library/records/music_brainz.ex +++ b/lib/music_library/records/music_brainz.ex @@ -162,7 +162,21 @@ defmodule MusicLibrary.Records.MusicBrainz do url = "https://musicbrainz.org/ws/2/release-group?#{URI.encode_query(qs)}" - json_get(url) + with {:ok, result} <- json_get(url) do + {:ok, + Enum.map(result["release-groups"], fn rg -> + %{ + id: rg["id"], + type: parse_subtype(rg["primary-type"]), + title: rg["title"], + artists: + rg["artist-credit"] + |> Enum.map(fn ac -> ac["artist"]["name"] end) + |> Enum.join(", "), + year: parse_year(rg["first-release-date"]) + } + end)} + end end def get_cover_art(musicbrainz_id) do @@ -216,4 +230,20 @@ defmodule MusicLibrary.Records.MusicBrainz do {:error, msg} 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 + defp parse_subtype("Compilation"), do: :compilation + defp parse_subtype("Single"), do: :single + defp parse_subtype(_), do: :other end diff --git a/lib/music_library_web/live/record_live/import_component.ex b/lib/music_library_web/live/record_live/import_component.ex index 7c9d03b6..c9d0007f 100644 --- a/lib/music_library_web/live/record_live/import_component.ex +++ b/lib/music_library_web/live/record_live/import_component.ex @@ -98,40 +98,6 @@ defmodule MusicLibraryWeb.RecordLive.ImportComponent do defp search(""), do: {:ok, []} defp search(query) do - case Records.search_release_group(query, limit: 10) do - {:ok, result} -> - {:ok, - Enum.map(result["release-groups"], fn rg -> - %{ - id: rg["id"], - type: parse_subtype(rg["primary-type"]), - title: rg["title"], - artists: - rg["artist-credit"] - |> Enum.map(fn ac -> ac["artist"]["name"] end) - |> Enum.join(", "), - year: parse_year(rg["first-release-date"]) - } - end)} - - error -> - error - end + Records.search_release_group(query, limit: 10) 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 - defp parse_subtype("Compilation"), do: :compilation - defp parse_subtype("Single"), do: :single - defp parse_subtype(_), do: :other end