From 5a7ea6c9f18b98d4c29487e28a80c00497bfc50a Mon Sep 17 00:00:00 2001 From: Kieran Eglin Date: Thu, 28 Mar 2024 11:52:15 -0700 Subject: [PATCH] Added SB to download options builder --- .../downloading/download_option_builder.ex | 12 ++++++ .../download_option_builder_test.exs | 39 +++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/lib/pinchflat/downloading/download_option_builder.ex b/lib/pinchflat/downloading/download_option_builder.ex index b9233d1..8c1af52 100644 --- a/lib/pinchflat/downloading/download_option_builder.ex +++ b/lib/pinchflat/downloading/download_option_builder.ex @@ -22,6 +22,7 @@ defmodule Pinchflat.Downloading.DownloadOptionBuilder do thumbnail_options(media_item_with_preloads) ++ metadata_options(media_profile) ++ quality_options(media_profile) ++ + sponsorblock_options(media_profile) ++ output_options(media_item_with_preloads) {:ok, built_options} @@ -116,6 +117,17 @@ defmodule Pinchflat.Downloading.DownloadOptionBuilder do end end + defp sponsorblock_options(media_profile) do + categories = media_profile.sponsorblock_categories + behaviour = media_profile.sponsorblock_behaviour + + case {behaviour, categories} do + {_, []} -> [] + {:remove, _} -> [sponsorblock_remove: Enum.join(categories, ",")] + {:disabled, _} -> [] + end + end + defp output_options(media_item_with_preloads) do [ output: build_output_path_for(media_item_with_preloads.source) diff --git a/test/pinchflat/downloading/download_option_builder_test.exs b/test/pinchflat/downloading/download_option_builder_test.exs index e08eb80..d7bc631 100644 --- a/test/pinchflat/downloading/download_option_builder_test.exs +++ b/test/pinchflat/downloading/download_option_builder_test.exs @@ -222,6 +222,45 @@ defmodule Pinchflat.Downloading.DownloadOptionBuilderTest do end end + describe "build/1 when testing sponsorblock options" do + test "includes :sponsorblock_remove option when specified", %{media_item: media_item} do + media_item = + update_media_profile_attribute(media_item, %{ + sponsorblock_behaviour: :remove, + sponsorblock_categories: ["sponsor", "intro"] + }) + + assert {:ok, res} = DownloadOptionBuilder.build(media_item) + + assert {:sponsorblock_remove, "sponsor,intro"} in res + end + + test "does not include :sponsorblock_remove option without categories", %{media_item: media_item} do + media_item = + update_media_profile_attribute(media_item, %{ + sponsorblock_behaviour: :remove, + sponsorblock_categories: [] + }) + + assert {:ok, res} = DownloadOptionBuilder.build(media_item) + + refute {:sponsorblock_remove, ""} in res + refute {:sponsorblock_remove, []} in res + refute :sponsorblock_remove in res + end + + test "does not include any sponsorblock options when disabled", %{media_item: media_item} do + media_item = + update_media_profile_attribute(media_item, %{sponsorblock_behaviour: :disabled}) + + assert {:ok, res} = DownloadOptionBuilder.build(media_item) + + refute {:sponsorblock_remove, ""} in res + refute {:sponsorblock_remove, []} in res + refute :sponsorblock_remove in res + end + end + describe "build_output_path_for/1" do test "builds an output path for a source", %{media_item: media_item} do path = DownloadOptionBuilder.build_output_path_for(media_item.source)