Store MusicBrainz release group data on records
This commit is contained in:
@@ -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"],
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user