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_id" => musicbrainz_id,
|
||||||
|
"musicbrainz_data" => release_group,
|
||||||
"title" => release_group["title"],
|
"title" => release_group["title"],
|
||||||
"artists" => artists_attrs,
|
"artists" => artists_attrs,
|
||||||
"release" => release_group["first-release-date"],
|
"release" => release_group["first-release-date"],
|
||||||
|
|||||||
@@ -105,6 +105,25 @@ defmodule MusicLibrary.Records.Importer do
|
|||||||
end)
|
end)
|
||||||
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
|
def generate_cover_hash(record) do
|
||||||
record
|
record
|
||||||
|> Rec.generate_cover_hash()
|
|> Rec.generate_cover_hash()
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ defmodule MusicLibrary.Records.Record do
|
|||||||
field :cover_data, :binary
|
field :cover_data, :binary
|
||||||
field :cover_hash, :string
|
field :cover_hash, :string
|
||||||
field :musicbrainz_id, Ecto.UUID
|
field :musicbrainz_id, Ecto.UUID
|
||||||
|
field :musicbrainz_data, :map
|
||||||
field :genres, {:array, :string}
|
field :genres, {:array, :string}
|
||||||
field :release, :string
|
field :release, :string
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ defmodule MusicLibrary.Records.Record do
|
|||||||
:format,
|
:format,
|
||||||
:title,
|
:title,
|
||||||
:musicbrainz_id,
|
:musicbrainz_id,
|
||||||
|
:musicbrainz_data,
|
||||||
:release,
|
:release,
|
||||||
:genres,
|
:genres,
|
||||||
:cover_url,
|
:cover_url,
|
||||||
@@ -65,6 +67,11 @@ defmodule MusicLibrary.Records.Record do
|
|||||||
|> generate_cover_hash()
|
|> generate_cover_hash()
|
||||||
end
|
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
|
def generate_cover_hash(record = %__MODULE__{cover_data: cover_data}) do
|
||||||
hash = :crypto.hash(:sha256, cover_data) |> Base.encode16()
|
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