From e150355874c9b942cc52ff0053b18563391a8ec2 Mon Sep 17 00:00:00 2001 From: Kieran Date: Fri, 3 Jan 2025 09:53:38 -0800 Subject: [PATCH] Added the ability to mark chapters via sponsorblock (#542) --- .../downloading/download_option_builder.ex | 1 + lib/pinchflat/profiles/media_profile.ex | 2 +- .../media_profiles/media_profile_html.ex | 1 + .../download_option_builder_test.exs | 24 +++++++++++++++---- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/lib/pinchflat/downloading/download_option_builder.ex b/lib/pinchflat/downloading/download_option_builder.ex index befea25..5957c2f 100644 --- a/lib/pinchflat/downloading/download_option_builder.ex +++ b/lib/pinchflat/downloading/download_option_builder.ex @@ -152,6 +152,7 @@ defmodule Pinchflat.Downloading.DownloadOptionBuilder do case {behaviour, categories} do {_, []} -> [] {:remove, _} -> [sponsorblock_remove: Enum.join(categories, ",")] + {:mark, _} -> [sponsorblock_mark: Enum.join(categories, ",")] {:disabled, _} -> [] end end diff --git a/lib/pinchflat/profiles/media_profile.ex b/lib/pinchflat/profiles/media_profile.ex index 380128b..90c93d6 100644 --- a/lib/pinchflat/profiles/media_profile.ex +++ b/lib/pinchflat/profiles/media_profile.ex @@ -55,7 +55,7 @@ defmodule Pinchflat.Profiles.MediaProfile do field :embed_metadata, :boolean, default: false field :download_nfo, :boolean, default: false - field :sponsorblock_behaviour, Ecto.Enum, values: [:disabled, :remove], default: :disabled + field :sponsorblock_behaviour, Ecto.Enum, values: [:disabled, :mark, :remove], default: :disabled field :sponsorblock_categories, {:array, :string}, default: [] # NOTE: these do NOT speed up indexing - the indexer still has to go # through the entire collection to determine if a media is a short or diff --git a/lib/pinchflat_web/controllers/media_profiles/media_profile_html.ex b/lib/pinchflat_web/controllers/media_profiles/media_profile_html.ex index 14311de..5bffb6c 100644 --- a/lib/pinchflat_web/controllers/media_profiles/media_profile_html.ex +++ b/lib/pinchflat_web/controllers/media_profiles/media_profile_html.ex @@ -38,6 +38,7 @@ defmodule PinchflatWeb.MediaProfiles.MediaProfileHTML do def friendly_sponsorblock_options do [ {"Disabled (default)", "disabled"}, + {"Mark Segments as Chapters", "mark"}, {"Remove Segments", "remove"} ] end diff --git a/test/pinchflat/downloading/download_option_builder_test.exs b/test/pinchflat/downloading/download_option_builder_test.exs index 403d9a5..f625654 100644 --- a/test/pinchflat/downloading/download_option_builder_test.exs +++ b/test/pinchflat/downloading/download_option_builder_test.exs @@ -287,7 +287,19 @@ defmodule Pinchflat.Downloading.DownloadOptionBuilderTest do assert {:sponsorblock_remove, "sponsor,intro"} in res end - test "does not include :sponsorblock_remove option without categories", %{media_item: media_item} do + test "includes :sponsorblock_mark option when specified", %{media_item: media_item} do + media_item = + update_media_profile_attribute(media_item, %{ + sponsorblock_behaviour: :mark, + sponsorblock_categories: ["sponsor", "intro"] + }) + + assert {:ok, res} = DownloadOptionBuilder.build(media_item) + + assert {:sponsorblock_mark, "sponsor,intro"} in res + end + + test "does not include any sponsorblock option without categories", %{media_item: media_item} do media_item = update_media_profile_attribute(media_item, %{ sponsorblock_behaviour: :remove, @@ -296,9 +308,10 @@ defmodule Pinchflat.Downloading.DownloadOptionBuilderTest do assert {:ok, res} = DownloadOptionBuilder.build(media_item) - refute {:sponsorblock_remove, ""} in res - refute {:sponsorblock_remove, []} in res + refute Keyword.has_key?(res, :sponsorblock_remove) + refute Keyword.has_key?(res, :sponsorblock_mark) refute :sponsorblock_remove in res + refute :sponsorblock_mark in res end test "does not include any sponsorblock options when disabled", %{media_item: media_item} do @@ -307,9 +320,10 @@ defmodule Pinchflat.Downloading.DownloadOptionBuilderTest do assert {:ok, res} = DownloadOptionBuilder.build(media_item) - refute {:sponsorblock_remove, ""} in res - refute {:sponsorblock_remove, []} in res + refute Keyword.has_key?(res, :sponsorblock_remove) + refute Keyword.has_key?(res, :sponsorblock_mark) refute :sponsorblock_remove in res + refute :sponsorblock_mark in res end end