Add batch operation to resize covers with incorrect sizes

This commit is contained in:
Claudio Ortolina
2024-11-28 17:15:12 +00:00
parent 7ffd0c375b
commit cb0e06d603
2 changed files with 40 additions and 15 deletions
+22 -4
View File
@@ -1,7 +1,7 @@
defmodule MusicLibrary.Records.Batch do defmodule MusicLibrary.Records.Batch do
require Logger require Logger
alias MusicLibrary.Records.Record alias MusicLibrary.Records.{Cover, Record}
alias MusicLibrary.Repo alias MusicLibrary.Repo
import Ecto.Query import Ecto.Query
@@ -20,6 +20,18 @@ defmodule MusicLibrary.Records.Batch do
end end
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
def update_release_ids do def update_release_ids do
run_on_all_records(&update_release_ids/1) run_on_all_records(&update_release_ids/1)
end end
@@ -44,11 +56,15 @@ defmodule MusicLibrary.Records.Batch do
q = from(r in Record) q = from(r in Record)
stream = Repo.stream(q) stream = Repo.stream(q)
Repo.transaction(fn -> Repo.transaction(
fn ->
Enum.reduce(stream, [], fn record, acc -> Enum.reduce(stream, [], fn record, acc ->
case fun.(record) do case fun.(record) do
{:error, reason} -> {:error, reason} ->
Logger.error("Failed to run function on record #{record.id} with #{inspect(reason)}") Logger.error(
"Failed to run function on record #{record.id} with #{inspect(reason)}"
)
[record.id | acc] [record.id | acc]
:ok -> :ok ->
@@ -58,7 +74,9 @@ defmodule MusicLibrary.Records.Batch do
acc acc
end end
end) end)
end) end,
timeout: :infinity
)
end end
defp musicbrainz do defp musicbrainz do
+8 -1
View File
@@ -1,6 +1,13 @@
defmodule MusicLibrary.Records.Cover do defmodule MusicLibrary.Records.Cover do
@size 600
def resize(cover_data) do def resize(cover_data) do
{:ok, thumb} = Vix.Vips.Operation.thumbnail_buffer(cover_data, 600) {:ok, thumb} = Vix.Vips.Operation.thumbnail_buffer(cover_data, @size)
Vix.Vips.Image.write_to_buffer(thumb, ".jpg") Vix.Vips.Image.write_to_buffer(thumb, ".jpg")
end end
def correct_size?(cover_data) do
{:ok, image} = Vix.Vips.Image.new_from_buffer(cover_data)
Vix.Vips.Image.width(image) == @size
end
end end