Use MusicBrainz.get_all_releases in Records
This commit is contained in:
@@ -242,7 +242,8 @@ defmodule MusicLibrary.Records do
|
|||||||
selected_release_id = Keyword.get(opts, :selected_release_id, nil)
|
selected_release_id = Keyword.get(opts, :selected_release_id, nil)
|
||||||
|
|
||||||
with {:ok, release_group} <- MusicBrainz.get_release_group(musicbrainz_id),
|
with {:ok, release_group} <- MusicBrainz.get_release_group(musicbrainz_id),
|
||||||
{:ok, release_group_with_releases} <- merge_releases(musicbrainz_id, release_group),
|
{:ok, releases} <- MusicBrainz.get_all_releases(musicbrainz_id),
|
||||||
|
release_group_with_releases = Map.put(release_group, "releases", releases),
|
||||||
{:ok, cover_data} <- get_cover_art_or_default(musicbrainz_id),
|
{:ok, cover_data} <- get_cover_art_or_default(musicbrainz_id),
|
||||||
{:ok, asset} <- Assets.store_image(%{content: cover_data, format: "image/jpeg"}) do
|
{:ok, asset} <- Assets.store_image(%{content: cover_data, format: "image/jpeg"}) do
|
||||||
release_group_with_releases
|
release_group_with_releases
|
||||||
@@ -360,7 +361,9 @@ defmodule MusicLibrary.Records do
|
|||||||
@spec refresh_musicbrainz_data(Record.t()) :: {:ok, Record.t()} | {:error, term()}
|
@spec refresh_musicbrainz_data(Record.t()) :: {:ok, Record.t()} | {:error, term()}
|
||||||
def refresh_musicbrainz_data(record) do
|
def refresh_musicbrainz_data(record) do
|
||||||
with {:ok, data} <- MusicBrainz.get_release_group(record.musicbrainz_id),
|
with {:ok, data} <- MusicBrainz.get_release_group(record.musicbrainz_id),
|
||||||
{:ok, data_with_releases} <- merge_releases(record.musicbrainz_id, data) do
|
{:ok, releases} <- MusicBrainz.get_all_releases(record.musicbrainz_id) do
|
||||||
|
data_with_releases = Map.put(data, "releases", releases)
|
||||||
|
|
||||||
record
|
record
|
||||||
|> Record.add_musicbrainz_data(data_with_releases)
|
|> Record.add_musicbrainz_data(data_with_releases)
|
||||||
|> Repo.update()
|
|> Repo.update()
|
||||||
@@ -373,31 +376,6 @@ defmodule MusicLibrary.Records do
|
|||||||
enqueue_worker(Worker.RecordRefreshMusicBrainzData, %{"id" => record.id}, record_meta(record))
|
enqueue_worker(Worker.RecordRefreshMusicBrainzData, %{"id" => record.id}, record_meta(record))
|
||||||
end
|
end
|
||||||
|
|
||||||
defp merge_releases(musicbrainz_id, musicbrainz_data) do
|
|
||||||
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]
|
|
||||||
|
|
||||||
with {:ok, data} <- MusicBrainz.get_releases(musicbrainz_id, opts) do
|
|
||||||
%{"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
|
|
||||||
|
|
||||||
defp build_record_attrs(release_group, attrs) do
|
defp build_record_attrs(release_group, attrs) do
|
||||||
release_group
|
release_group
|
||||||
|> Record.attrs_from_release_group()
|
|> Record.attrs_from_release_group()
|
||||||
|
|||||||
Reference in New Issue
Block a user