diff --git a/lib/pinchflat/media/media_item.ex b/lib/pinchflat/media/media_item.ex index da29691..c2ddce4 100644 --- a/lib/pinchflat/media/media_item.ex +++ b/lib/pinchflat/media/media_item.ex @@ -13,6 +13,7 @@ defmodule Pinchflat.Media.MediaItem do @allowed_fields ~w( title media_id + description original_url livestream media_downloaded_at @@ -27,6 +28,7 @@ defmodule Pinchflat.Media.MediaItem do schema "media_items" do field :title, :string field :media_id, :string + field :description, :string field :original_url, :string field :livestream, :boolean, default: false field :media_downloaded_at, :utc_datetime diff --git a/lib/pinchflat/media_client/backends/yt_dlp/metadata_parser.ex b/lib/pinchflat/media_client/backends/yt_dlp/metadata_parser.ex index e588cdb..757829b 100644 --- a/lib/pinchflat/media_client/backends/yt_dlp/metadata_parser.ex +++ b/lib/pinchflat/media_client/backends/yt_dlp/metadata_parser.ex @@ -32,6 +32,7 @@ defmodule Pinchflat.MediaClient.Backends.YtDlp.MetadataParser do defp parse_media_metadata(metadata) do %{ title: metadata["title"], + description: metadata["description"], media_filepath: metadata["filepath"] } end diff --git a/lib/pinchflat/media_client/backends/yt_dlp/video_collection.ex b/lib/pinchflat/media_client/backends/yt_dlp/video_collection.ex index 66e56e1..6233c8d 100644 --- a/lib/pinchflat/media_client/backends/yt_dlp/video_collection.ex +++ b/lib/pinchflat/media_client/backends/yt_dlp/video_collection.ex @@ -14,8 +14,9 @@ defmodule Pinchflat.MediaClient.Backends.YtDlp.VideoCollection do def get_media_attributes(url, command_opts \\ []) do runner = Application.get_env(:pinchflat, :yt_dlp_runner) opts = command_opts ++ [:simulate, :skip_download] + output_template = "%(.{id,title,was_live,original_url,description})j" - case runner.run(url, opts, "%(.{id,title,was_live,original_url})j") do + case runner.run(url, opts, output_template) do {:ok, output} -> output |> String.split("\n", trim: true) diff --git a/lib/pinchflat/tasks/source_tasks.ex b/lib/pinchflat/tasks/source_tasks.ex index 98d2c0d..714b6b3 100644 --- a/lib/pinchflat/tasks/source_tasks.ex +++ b/lib/pinchflat/tasks/source_tasks.ex @@ -52,7 +52,8 @@ defmodule Pinchflat.Tasks.SourceTasks do title: media_attrs["title"], media_id: media_attrs["id"], original_url: media_attrs["original_url"], - livestream: media_attrs["was_live"] + livestream: media_attrs["was_live"], + description: media_attrs["description"] } case Media.create_media_item(attrs) do diff --git a/priv/repo/migrations/20240210045410_add_description_to_media_items.exs b/priv/repo/migrations/20240210045410_add_description_to_media_items.exs new file mode 100644 index 0000000..f03a34b --- /dev/null +++ b/priv/repo/migrations/20240210045410_add_description_to_media_items.exs @@ -0,0 +1,9 @@ +defmodule Pinchflat.Repo.Migrations.AddDescriptionToMediaItems do + use Ecto.Migration + + def change do + alter table(:media_items) do + add :description, :text + end + end +end diff --git a/test/pinchflat/media_client/backends/yt_dlp/metadata_parser_test.exs b/test/pinchflat/media_client/backends/yt_dlp/metadata_parser_test.exs index e0e032f..c29675d 100644 --- a/test/pinchflat/media_client/backends/yt_dlp/metadata_parser_test.exs +++ b/test/pinchflat/media_client/backends/yt_dlp/metadata_parser_test.exs @@ -36,6 +36,12 @@ defmodule Pinchflat.MediaClient.Backends.YtDlp.MediaParserTest do assert result.title == "Trying to Wheelie Without the Rear Brake" end + test "it extracts the description", %{metadata: metadata} do + result = Parser.parse_for_media_item(metadata) + + assert is_binary(result.description) + end + test "it returns the metadata as a map", %{metadata: metadata} do result = Parser.parse_for_media_item(metadata) diff --git a/test/pinchflat/media_client/backends/yt_dlp/video_collection_test.exs b/test/pinchflat/media_client/backends/yt_dlp/video_collection_test.exs index 5230f5e..0fd13dc 100644 --- a/test/pinchflat/media_client/backends/yt_dlp/video_collection_test.exs +++ b/test/pinchflat/media_client/backends/yt_dlp/video_collection_test.exs @@ -20,7 +20,7 @@ defmodule Pinchflat.MediaClient.Backends.YtDlp.VideoCollectionTest do test "it passes the expected default args" do expect(YtDlpRunnerMock, :run, fn _url, opts, ot -> assert opts == [:simulate, :skip_download] - assert ot == "%(.{id,title,was_live,original_url})j" + assert ot == "%(.{id,title,was_live,original_url,description})j" {:ok, ""} end) diff --git a/test/pinchflat/media_client/source_details_test.exs b/test/pinchflat/media_client/source_details_test.exs index 2e1bd61..8ddb517 100644 --- a/test/pinchflat/media_client/source_details_test.exs +++ b/test/pinchflat/media_client/source_details_test.exs @@ -47,7 +47,7 @@ defmodule Pinchflat.MediaClient.SourceDetailsTest do test "it passes the expected arguments to the backend" do expect(YtDlpRunnerMock, :run, fn @channel_url, opts, ot -> assert opts == [:simulate, :skip_download] - assert ot == "%(.{id,title,was_live,original_url})j" + assert ot == "%(.{id,title,was_live,original_url,description})j" {:ok, ""} end) diff --git a/test/pinchflat/media_client/video_downloader_test.exs b/test/pinchflat/media_client/video_downloader_test.exs index cfc362a..0d6acb3 100644 --- a/test/pinchflat/media_client/video_downloader_test.exs +++ b/test/pinchflat/media_client/video_downloader_test.exs @@ -68,6 +68,11 @@ defmodule Pinchflat.MediaClient.VideoDownloaderTest do assert updated_media_item.title == "Trying to Wheelie Without the Rear Brake" end + test "it extracts the description", %{media_item: media_item} do + assert {:ok, updated_media_item} = VideoDownloader.download_for_media_item(media_item) + assert is_binary(updated_media_item.description) + end + test "it extracts the media_filepath", %{media_item: media_item} do assert media_item.media_filepath == nil assert {:ok, updated_media_item} = VideoDownloader.download_for_media_item(media_item) diff --git a/test/pinchflat/tasks/source_tasks_test.exs b/test/pinchflat/tasks/source_tasks_test.exs index 6917401..662193d 100644 --- a/test/pinchflat/tasks/source_tasks_test.exs +++ b/test/pinchflat/tasks/source_tasks_test.exs @@ -63,6 +63,7 @@ defmodule Pinchflat.Tasks.SourceTasksTest do assert Enum.count(media_items) == 3 assert ["video1", "video2", "video3"] == Enum.map(media_items, & &1.media_id) assert ["Video 1", "Video 2", "Video 3"] == Enum.map(media_items, & &1.title) + assert ["desc1", "desc2", "desc3"] == Enum.map(media_items, & &1.description) assert Enum.all?(media_items, fn mi -> mi.original_url end) assert Enum.all?(media_items, fn %MediaItem{} -> true end) end diff --git a/test/support/fixtures/media_source_fixtures.ex b/test/support/fixtures/media_source_fixtures.ex index 958854e..7784c54 100644 --- a/test/support/fixtures/media_source_fixtures.ex +++ b/test/support/fixtures/media_source_fixtures.ex @@ -36,19 +36,22 @@ defmodule Pinchflat.MediaSourceFixtures do id: "video1", title: "Video 1", original_url: "https://example.com/video1", - was_live: false + was_live: false, + description: "desc1" }, %{ id: "video2", title: "Video 2", original_url: "https://example.com/video2", - was_live: true + was_live: true, + description: "desc2" }, %{ id: "video3", title: "Video 3", original_url: "https://example.com/video3", - was_live: false + was_live: false, + description: "desc3" } ]