When importing a record, stream all its releases

This commit is contained in:
Claudio Ortolina
2025-02-05 15:31:08 +00:00
parent f29dd1f0ab
commit 6ad28f1271
6 changed files with 40 additions and 15 deletions
+22 -7
View File
@@ -226,14 +226,29 @@ defmodule MusicLibrary.Records do
end
end
# TODO: paginate and merge as needed
defp merge_releases(musicbrainz_id, musicbrainz_data) do
with {:ok, data} <-
music_brainz_config().api.get_releases(
musicbrainz_id,
music_brainz_config()
) do
{:ok, Map.put(musicbrainz_data, "releases", data["releases"])}
with {:ok, releases} <- stream_releases(musicbrainz_id) do
{:ok, Map.put(musicbrainz_data, "releases", releases)}
end
end
defp stream_releases(musicbrainz_id) do
do_stream_releases(musicbrainz_id, [], 0)
end
defp do_stream_releases(musicbrainz_id, releases, offset) do
limit = 100
opts = [limit: limit, offset: offset]
case music_brainz_config().api.get_releases(musicbrainz_id, opts, music_brainz_config()) do
{:ok, data} ->
%{"releases" => new_releases} = data
if Enum.count(new_releases) < limit do
{:ok, releases ++ new_releases}
else
do_stream_releases(musicbrainz_id, releases ++ new_releases, offset + 100)
end
end
end