diff --git a/lib/music_library/records.ex b/lib/music_library/records.ex index a98863fc..8e4b8872 100644 --- a/lib/music_library/records.ex +++ b/lib/music_library/records.ex @@ -6,7 +6,7 @@ defmodule MusicLibrary.Records do import Ecto.Query, warn: false alias MusicLibrary.Artists - alias MusicLibrary.Records.{ArtistRecord, Cover, Record, SearchParser} + alias MusicLibrary.Records.{ArtistRecord, Cover, DominantColors, Record, SearchParser} alias MusicLibrary.{BackgroundRepo, Repo, Worker} def essential_fields do @@ -254,6 +254,21 @@ defmodule MusicLibrary.Records do |> BackgroundRepo.insert() end + def generate_dominant_colors(record) do + with {:ok, colors} <- DominantColors.extract_dominant_colors(record.cover_data) do + update_record(record, %{"dominant_colors" => colors}) + end + end + + def generate_dominant_colors_async(record) do + meta = %{title: record.title, artists: Enum.map(record.artists, & &1.name)} + params = %{"id" => record.id} + + params + |> Worker.GenerateDominantColors.new(meta: meta) + |> BackgroundRepo.insert() + end + def resize_cover(record) do {:ok, thumb_data} = Cover.resize(record.cover_data) diff --git a/lib/music_library/worker/generate_dominant_colors.ex b/lib/music_library/worker/generate_dominant_colors.ex new file mode 100644 index 00000000..2de8d913 --- /dev/null +++ b/lib/music_library/worker/generate_dominant_colors.ex @@ -0,0 +1,12 @@ +defmodule MusicLibrary.Worker.GenerateDominantColors do + use Oban.Worker, queue: :heavy_writes, max_attempts: 3 + + @impl Oban.Worker + def perform(%Oban.Job{args: %{"id" => record_id}}) do + record = MusicLibrary.Records.get_record!(record_id) + + with {:ok, updated_record} <- MusicLibrary.Records.generate_dominant_colors(record) do + MusicLibrary.Records.notify_update(updated_record) + end + end +end