diff --git a/lib/music_library/records.ex b/lib/music_library/records.ex index 9e71787b..9957bc03 100644 --- a/lib/music_library/records.ex +++ b/lib/music_library/records.ex @@ -111,6 +111,7 @@ defmodule MusicLibrary.Records do %{ "musicbrainz_id" => musicbrainz_id, + "musicbrainz_data" => release_group, "title" => release_group["title"], "artists" => artists_attrs, "release" => release_group["first-release-date"], diff --git a/lib/music_library/records/importer.ex b/lib/music_library/records/importer.ex index b3186b27..46e8e49c 100644 --- a/lib/music_library/records/importer.ex +++ b/lib/music_library/records/importer.ex @@ -105,6 +105,25 @@ defmodule MusicLibrary.Records.Importer do end) end + def import_missing_musicbrainz_data do + q = from(r in Rec, where: is_nil(r.musicbrainz_data)) + + q + |> Repo.all() + |> Enum.each(fn r -> + import_musicbrainz_data(r) + Process.sleep(1000) + end) + end + + def import_musicbrainz_data(record) do + with {:ok, data} <- musicbrainz().get_release_group(record.musicbrainz_id) do + record + |> Rec.add_musicbrainz_data(data) + |> Repo.update!() + end + end + def generate_cover_hash(record) do record |> Rec.generate_cover_hash() diff --git a/lib/music_library/records/record.ex b/lib/music_library/records/record.ex index f4f15925..ea396696 100644 --- a/lib/music_library/records/record.ex +++ b/lib/music_library/records/record.ex @@ -15,6 +15,7 @@ defmodule MusicLibrary.Records.Record do field :cover_data, :binary field :cover_hash, :string field :musicbrainz_id, Ecto.UUID + field :musicbrainz_data, :map field :genres, {:array, :string} field :release, :string @@ -36,6 +37,7 @@ defmodule MusicLibrary.Records.Record do :format, :title, :musicbrainz_id, + :musicbrainz_data, :release, :genres, :cover_url, @@ -65,6 +67,11 @@ defmodule MusicLibrary.Records.Record do |> generate_cover_hash() end + def add_musicbrainz_data(record, musicbrainz_data) do + record + |> change(musicbrainz_data: musicbrainz_data) + end + def generate_cover_hash(record = %__MODULE__{cover_data: cover_data}) do hash = :crypto.hash(:sha256, cover_data) |> Base.encode16() diff --git a/priv/repo/migrations/20241007072920_add_musicbrainz_data_to_records.exs b/priv/repo/migrations/20241007072920_add_musicbrainz_data_to_records.exs new file mode 100644 index 00000000..aaced142 --- /dev/null +++ b/priv/repo/migrations/20241007072920_add_musicbrainz_data_to_records.exs @@ -0,0 +1,9 @@ +defmodule MusicLibrary.Repo.Migrations.AddMusicbrainzDataToRecords do + use Ecto.Migration + + def change do + alter table(:records) do + add :musicbrainz_data, :map + end + end +end