Migrate from embedded covers to assets

This commit is contained in:
Claudio Ortolina
2025-09-01 16:10:50 +03:00
parent cbf567a502
commit dc77d337c0
19 changed files with 80 additions and 144 deletions
+1 -13
View File
@@ -2,7 +2,7 @@ defmodule MusicLibrary.Records.Batch do
import Ecto.Query
alias MusicLibrary.Records
alias MusicLibrary.Records.{Cover, Record}
alias MusicLibrary.Records.Record
alias MusicLibrary.Repo
require Logger
@@ -21,18 +21,6 @@ defmodule MusicLibrary.Records.Batch do
end)
end
def refresh_old_artwork do
run_on_all_records(&refresh_old_artwork/1)
end
def refresh_old_artwork(record) do
if Cover.correct_size?(record.cover_data) do
:ok
else
MusicLibrary.Records.refresh_cover(record)
end
end
defp run_on_all_records(fun) do
q = from(r in Record)
stream = Repo.stream(q, max_rows: 50)
-4
View File
@@ -15,10 +15,6 @@ defmodule MusicLibrary.Records.Cover do
Image.write_to_buffer(thumb, ".jpg")
end
def hash(cover_data) do
:crypto.hash(:sha256, cover_data) |> Base.encode16()
end
def correct_size?(cover_data) do
{:ok, image} = Image.new_from_buffer(cover_data)
+3 -52
View File
@@ -5,8 +5,6 @@ defmodule MusicLibrary.Records.Record do
alias MusicBrainz.{Release, ReleaseGroup}
alias MusicLibrary.Artists.Artist
alias MusicLibrary.Colors.ColorFrequencyExtractor
alias MusicLibrary.Records.Cover
@formats [:cd, :backup, :vinyl, :blu_ray, :dvd, :multi]
@types [:album, :ep, :live, :compilation, :single, :other]
@@ -18,7 +16,6 @@ defmodule MusicLibrary.Records.Record do
field :format, Ecto.Enum, values: @formats
field :title, :string
field :cover_url, :string
field :cover_data, :binary
field :cover_hash, :string
field :musicbrainz_id, Ecto.UUID
field :musicbrainz_data, :map, default: %{}
@@ -128,38 +125,24 @@ defmodule MusicLibrary.Records.Record do
:selected_release_id,
:included_release_group_ids,
:cover_url,
:cover_data,
:cover_hash,
:dominant_colors,
:purchased_at
])
|> cast_embed(:artists)
|> validate_required([:type, :title, :musicbrainz_id, :genres])
|> unique_constraint(:musicbrainz_id, name: "records_musicbrainz_id_format_index")
|> generate_cover_hash()
|> maybe_generate_dominant_colors()
|> update_release_ids()
|> update_included_release_group_ids()
end
defp maybe_generate_dominant_colors(changeset) do
case get_change(changeset, :dominant_colors) do
nil ->
generate_dominant_colors(changeset)
_dominant_colors ->
changeset
end
end
def add_genres(record, genres) do
change(record, genres: genres)
end
def add_cover_data(record, cover_data) do
def set_cover_hash(record, cover_hash) do
record
|> change(cover_data: cover_data)
|> generate_cover_hash()
|> generate_dominant_colors()
|> change(cover_hash: cover_hash)
end
def add_musicbrainz_data(record, musicbrainz_data) do
@@ -171,38 +154,6 @@ defmodule MusicLibrary.Records.Record do
|> update_included_release_group_ids()
end
def generate_cover_hash(%__MODULE__{cover_data: cover_data} = record) do
change(record, cover_hash: Cover.hash(cover_data))
end
def generate_cover_hash(changeset) do
case get_change(changeset, :cover_data) do
nil ->
changeset
cover_data ->
put_change(changeset, :cover_hash, Cover.hash(cover_data))
end
end
def generate_dominant_colors(%__MODULE__{cover_data: cover_data} = record) do
change(record, dominant_colors: ColorFrequencyExtractor.extract_dominant_colors!(cover_data))
end
def generate_dominant_colors(changeset) do
case get_change(changeset, :cover_data) do
nil ->
changeset
cover_data ->
put_change(
changeset,
:dominant_colors,
ColorFrequencyExtractor.extract_dominant_colors!(cover_data)
)
end
end
def rotate_dominant_colors(%__MODULE__{dominant_colors: dominant_colors} = record) do
change(record, dominant_colors: rotate(dominant_colors))
end