Refactor Records.Cover to Assets.Image
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
defmodule MusicLibrary.Records.Cover do
|
||||
defmodule MusicLibrary.Assets.Image do
|
||||
alias Vix.Vips.{Image, Operation}
|
||||
|
||||
fallback_path = Application.app_dir(:music_library, ["priv", "cover-not-found.jpg"])
|
||||
fallback_path = Application.app_dir(:music_library, ["priv", "image-not-found.jpg"])
|
||||
fallback_data = File.read!(fallback_path)
|
||||
|
||||
@external_resource fallback_path
|
||||
@@ -7,7 +7,7 @@ defmodule MusicLibrary.Records do
|
||||
|
||||
alias MusicLibrary.Artists
|
||||
alias MusicLibrary.Assets
|
||||
alias MusicLibrary.Records.{ArtistRecord, Cover, Record, SearchParser}
|
||||
alias MusicLibrary.Records.{ArtistRecord, Record, SearchParser}
|
||||
alias MusicLibrary.{BackgroundRepo, Repo, Worker}
|
||||
|
||||
def essential_fields do
|
||||
@@ -228,8 +228,8 @@ defmodule MusicLibrary.Records do
|
||||
|
||||
defp get_cover_art_or_default(musicbrainz_id) do
|
||||
case MusicBrainz.get_cover_art({:musicbrainz_id, musicbrainz_id}) do
|
||||
{:error, :cover_not_available} -> {:ok, Cover.fallback_data()}
|
||||
{:ok, cover_data} -> Cover.resize(cover_data)
|
||||
{:error, :cover_not_available} -> {:ok, Assets.Image.fallback_data()}
|
||||
{:ok, cover_data} -> Assets.Image.resize(cover_data)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -259,7 +259,7 @@ defmodule MusicLibrary.Records do
|
||||
|
||||
def refresh_cover(record) do
|
||||
with {:ok, cover_data} <- MusicBrainz.get_cover_art({:url, record.cover_url}),
|
||||
{:ok, thumb_data} <- Cover.resize(cover_data),
|
||||
{:ok, thumb_data} <- Assets.Image.resize(cover_data),
|
||||
{:ok, asset} <- Assets.store_image(%{content: thumb_data, format: "image/jpeg"}) do
|
||||
record
|
||||
|> Record.set_cover_hash(asset.hash)
|
||||
@@ -286,7 +286,7 @@ defmodule MusicLibrary.Records do
|
||||
end
|
||||
|
||||
def resize_cover(record) do
|
||||
with {:ok, thumb_data} <- Cover.resize(record.cover_data),
|
||||
with {:ok, thumb_data} <- Assets.Image.resize(record.cover_data),
|
||||
{:ok, asset} <- Assets.store_image(%{content: thumb_data, format: "image/jpeg"}) do
|
||||
record
|
||||
|> Record.set_cover_hash(asset.hash)
|
||||
|
||||
@@ -2,8 +2,7 @@ defmodule MusicLibraryWeb.AssetController do
|
||||
use MusicLibraryWeb, :controller
|
||||
|
||||
alias MusicLibrary.Assets
|
||||
alias MusicLibrary.Assets.{Cache, Transform}
|
||||
alias MusicLibrary.Records.Cover
|
||||
alias MusicLibrary.Assets.{Cache, Image, Transform}
|
||||
|
||||
# 1 year in seconds
|
||||
@cache_duration 60 * 60 * 24 * 365
|
||||
@@ -31,10 +30,10 @@ defmodule MusicLibraryWeb.AssetController do
|
||||
image_data =
|
||||
if transform.width do
|
||||
# TODO: find a way to cache computation, or pre-compute thumb and store it
|
||||
{:ok, data} = Cover.resize(asset.content, transform.width, format)
|
||||
{:ok, data} = Image.resize(asset.content, transform.width, format)
|
||||
data
|
||||
else
|
||||
{:ok, data} = Cover.convert(asset.content, asset.format, format)
|
||||
{:ok, data} = Image.convert(asset.content, asset.format, format)
|
||||
data
|
||||
end
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 53 KiB |
+4
-6
@@ -1,15 +1,13 @@
|
||||
defmodule MusicLibrary.Records.CoverTest do
|
||||
defmodule MusicLibrary.Assets.ImageTest do
|
||||
use ExUnit.Case, async: true
|
||||
|
||||
import MusicLibrary.Fixtures.Records
|
||||
|
||||
alias MusicLibrary.Records.Cover
|
||||
alias MusicLibrary.Assets.Image
|
||||
|
||||
describe "resize/1" do
|
||||
test "it resizes to the desired size" do
|
||||
# Use the cached cover data which is much faster than reading from disk
|
||||
cover_data = marbles_cover_data()
|
||||
{:ok, resized_cover} = Cover.resize(cover_data)
|
||||
cover_data = Image.fallback_data()
|
||||
{:ok, resized_cover} = Image.resize(cover_data)
|
||||
assert cover_data !== resized_cover
|
||||
end
|
||||
end
|
||||
@@ -7,7 +7,7 @@ defmodule MusicLibrary.RecordsTest do
|
||||
|
||||
alias MusicLibrary.Assets
|
||||
alias MusicLibrary.Records
|
||||
alias MusicLibrary.Records.{Cover, SearchIndex}
|
||||
alias MusicLibrary.Records.SearchIndex
|
||||
|
||||
defp create_records(_) do
|
||||
records = [
|
||||
@@ -336,7 +336,7 @@ defmodule MusicLibrary.RecordsTest do
|
||||
assert updated_record.cover_hash ==
|
||||
"6E0D25D1FD1019D771D7EB3F777E2C7C1B06A73A92E56A584D674D86DD8AF441"
|
||||
|
||||
{:ok, expected_content} = Cover.resize(raven_cover_data())
|
||||
{:ok, expected_content} = Assets.Image.resize(raven_cover_data())
|
||||
|
||||
assert Assets.get(updated_record.cover_hash).content == expected_content
|
||||
end
|
||||
|
||||
@@ -8,8 +8,8 @@ defmodule MusicLibraryWeb.CollectionLive.IndexTest do
|
||||
|
||||
alias MusicBrainz.ReleaseGroupSearchResult
|
||||
alias MusicLibrary.Assets
|
||||
alias MusicLibrary.Assets.Transform
|
||||
alias MusicLibrary.Records.{Cover, Record}
|
||||
alias MusicLibrary.Assets.{Image, Transform}
|
||||
alias MusicLibrary.Records.Record
|
||||
|
||||
# make it a multiple of 4 for easier calculations
|
||||
@default_records_page_size 8
|
||||
@@ -317,7 +317,7 @@ defmodule MusicLibraryWeb.CollectionLive.IndexTest do
|
||||
assert record.cover_hash ==
|
||||
"E7238C742E5B8711FC5BFF01A4A1F727D9E404A4D1420429A6B37ABFFC0B5960"
|
||||
|
||||
{:ok, resized_cover_data} = Cover.resize(cover_data)
|
||||
{:ok, resized_cover_data} = Image.resize(cover_data)
|
||||
|
||||
assets = Assets.get(record.cover_hash)
|
||||
|
||||
@@ -425,7 +425,7 @@ defmodule MusicLibraryWeb.CollectionLive.IndexTest do
|
||||
"E7238C742E5B8711FC5BFF01A4A1F727D9E404A4D1420429A6B37ABFFC0B5960"
|
||||
|
||||
asset = Assets.get(record.cover_hash)
|
||||
{:ok, resized_cover_data} = Cover.resize(cover_data)
|
||||
{:ok, resized_cover_data} = Image.resize(cover_data)
|
||||
|
||||
assert asset.content == resized_cover_data
|
||||
|
||||
|
||||
Reference in New Issue
Block a user