Extract config for MusicBrainz

This commit is contained in:
Claudio Ortolina
2024-12-04 10:33:41 +00:00
parent 14518870a0
commit 7575e5978a
5 changed files with 32 additions and 13 deletions
+4
View File
@@ -34,6 +34,10 @@ config :music_library, LastFm,
api_key: "change me",
user_agent: user_agent
config :music_library, MusicBrainz,
api: MusicBrainz.APIImpl,
user_agent: user_agent
# Configure esbuild (the version is required)
config :esbuild,
version: "0.17.11",
+16
View File
@@ -0,0 +1,16 @@
defmodule MusicBrainz.Config do
@type t :: %{
api: module(),
user_agent: String.t()
}
defstruct api: MusicBrainz.APIImpl,
user_agent: "change me"
@spec resolve(atom) :: t
def resolve(otp_app) do
app_config = Application.get_env(otp_app, MusicBrainz)
struct(__MODULE__, app_config)
end
end
+7 -9
View File
@@ -127,11 +127,11 @@ defmodule MusicLibrary.Records do
def search_release_group(query, opts \\ []) do
limit = Keyword.get(opts, :limit, 20)
offset = Keyword.get(opts, :offset, 0)
musicbrainz().search_release_group(query, limit: limit, offset: offset)
music_brainz_config().api.search_release_group(query, limit: limit, offset: offset)
end
def import_from_musicbrainz_release(musicbrainz_id, opts \\ []) do
case musicbrainz().get_release(musicbrainz_id) do
case music_brainz_config().api.get_release(musicbrainz_id) do
{:ok, release} ->
release_group_id = release["release-group"]["id"]
import_from_musicbrainz_release_group(release_group_id, opts)
@@ -144,7 +144,7 @@ defmodule MusicLibrary.Records do
def import_from_musicbrainz_release_group(musicbrainz_id, opts \\ []) do
with format = Keyword.get(opts, :format, "cd"),
purchased_at = Keyword.get(opts, :purchased_at),
{:ok, release_group} <- musicbrainz().get_release_group(musicbrainz_id),
{:ok, release_group} <- music_brainz_config().api.get_release_group(musicbrainz_id),
{:ok, cover_data} <- get_cover_art_or_default(musicbrainz_id),
record_attrs =
build_record_attrs(release_group, %{
@@ -159,14 +159,14 @@ defmodule MusicLibrary.Records do
end
defp get_cover_art_or_default(musicbrainz_id) do
case musicbrainz().get_cover_art({:musicbrainz_id, musicbrainz_id}) do
case music_brainz_config().api.get_cover_art({:musicbrainz_id, musicbrainz_id}) do
{:error, :cover_not_available} -> {:ok, Record.fallback_cover_data()}
{:ok, cover_data} -> Cover.resize(cover_data)
end
end
def refresh_cover(record) do
with {:ok, cover_data} <- musicbrainz().get_cover_art({:url, record.cover_url}) do
with {:ok, cover_data} <- music_brainz_config().api.get_cover_art({:url, record.cover_url}) do
{:ok, thumb_data} = Cover.resize(cover_data)
record
@@ -184,7 +184,7 @@ defmodule MusicLibrary.Records do
end
def refresh_musicbrainz_data(record) do
with {:ok, data} <- musicbrainz().get_release_group(record.musicbrainz_id) do
with {:ok, data} <- music_brainz_config().api.get_release_group(record.musicbrainz_id) do
record
|> Record.add_musicbrainz_data(data)
|> Repo.update()
@@ -217,9 +217,7 @@ defmodule MusicLibrary.Records do
Record.changeset(record, attrs)
end
defp musicbrainz do
Application.get_env(:music_library, :musicbrainz, MusicBrainz.APIImpl)
end
defp music_brainz_config, do: MusicBrainz.Config.resolve(:music_library)
defp last_fm_config, do: LastFm.Config.resolve(:music_library)
end
+2 -4
View File
@@ -13,7 +13,7 @@ defmodule MusicLibrary.Records.Batch do
end
def import_musicbrainz_data(record) do
with {:ok, data} <- musicbrainz().get_release_group(record.musicbrainz_id) do
with {:ok, data} <- music_brainz_config().api.get_release_group(record.musicbrainz_id) do
record
|> Record.add_musicbrainz_data(data)
|> Repo.update!()
@@ -88,7 +88,5 @@ defmodule MusicLibrary.Records.Batch do
)
end
defp musicbrainz do
Application.get_env(:music_library, :musicbrainz, MusicBrainz.APIImpl)
end
defp music_brainz_config, do: MusicBrainz.Config.resolve(:music_library)
end
+3
View File
@@ -1,5 +1,8 @@
Mox.defmock(MusicBrainz.APIBehaviourMock, for: MusicBrainz.APIBehaviour)
Application.put_env(:music_library, :musicbrainz, MusicBrainz.APIBehaviourMock)
music_brainz_config = Application.get_env(:music_library, MusicBrainz)
new_music_brainz_config = Keyword.put(music_brainz_config, :api, MusicBrainz.APIBehaviourMock)
Application.put_env(:music_library, MusicBrainz, new_music_brainz_config)
Mox.defmock(LastFm.APIBehaviourMock, for: LastFm.APIBehaviour)
last_fm_config = Application.get_env(:music_library, LastFm)