From 78d33db16956122f2ee140756352b9d5d982c94e Mon Sep 17 00:00:00 2001 From: Kieran Eglin Date: Sun, 24 Mar 2024 18:43:16 -0700 Subject: [PATCH] Added cookie file option to DL option builder --- lib/pinchflat/boot/pre_job_startup_tasks.ex | 2 +- .../downloading/download_option_builder.ex | 14 ++++++++ .../download_option_builder_test.exs | 36 ++++++++++++++++++- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/lib/pinchflat/boot/pre_job_startup_tasks.ex b/lib/pinchflat/boot/pre_job_startup_tasks.ex index ed8a884..2afacc1 100644 --- a/lib/pinchflat/boot/pre_job_startup_tasks.ex +++ b/lib/pinchflat/boot/pre_job_startup_tasks.ex @@ -53,7 +53,7 @@ defmodule Pinchflat.Boot.PreJobStartupTasks do defp create_blank_cookie_file do base_dir = Application.get_env(:pinchflat, :extras_directory) - filepath = Path.join([base_dir, "cookies.txt"]) + filepath = Path.join(base_dir, "cookies.txt") FilesystemHelpers.write_p!(filepath, "") end diff --git a/lib/pinchflat/downloading/download_option_builder.ex b/lib/pinchflat/downloading/download_option_builder.ex index b9233d1..b1f253b 100644 --- a/lib/pinchflat/downloading/download_option_builder.ex +++ b/lib/pinchflat/downloading/download_option_builder.ex @@ -18,6 +18,7 @@ defmodule Pinchflat.Downloading.DownloadOptionBuilder do built_options = default_options() ++ + cookie_options() ++ subtitle_options(media_profile) ++ thumbnail_options(media_item_with_preloads) ++ metadata_options(media_profile) ++ @@ -43,6 +44,19 @@ defmodule Pinchflat.Downloading.DownloadOptionBuilder do [:no_progress, :windows_filenames] end + defp cookie_options do + base_dir = Application.get_env(:pinchflat, :extras_directory) + cookie_file = Path.join(base_dir, "cookies.txt") + + case File.read(cookie_file) do + {:ok, cookie_data} -> + if String.trim(cookie_data) != "", do: [cookies: cookie_file], else: [] + + {:error, _} -> + [] + end + end + defp subtitle_options(media_profile) do mapped_struct = Map.from_struct(media_profile) diff --git a/test/pinchflat/downloading/download_option_builder_test.exs b/test/pinchflat/downloading/download_option_builder_test.exs index 02103d6..7b27725 100644 --- a/test/pinchflat/downloading/download_option_builder_test.exs +++ b/test/pinchflat/downloading/download_option_builder_test.exs @@ -1,10 +1,11 @@ defmodule Pinchflat.Downloading.DownloadOptionBuilderTest do use Pinchflat.DataCase import Pinchflat.MediaFixtures - import Pinchflat.ProfilesFixtures import Pinchflat.SourcesFixtures + import Pinchflat.ProfilesFixtures alias Pinchflat.Profiles + alias Pinchflat.Filesystem.FilesystemHelpers alias Pinchflat.Downloading.DownloadOptionBuilder setup do @@ -41,6 +42,39 @@ defmodule Pinchflat.Downloading.DownloadOptionBuilderTest do end end + describe "build/1 when testing cookie options" do + setup do + base_dir = Application.get_env(:pinchflat, :extras_directory) + fpath = Path.join(base_dir, "cookies.txt") + + {:ok, fpath: fpath} + end + + test "includes cookie options when cookies.txt exists", %{media_item: media_item, fpath: fpath} do + FilesystemHelpers.write_p!(fpath, "cookie data") + + assert {:ok, res} = DownloadOptionBuilder.build(media_item) + + assert {:cookies, fpath} in res + end + + test "doesn't include cookie options when cookies.txt blank", %{media_item: media_item, fpath: fpath} do + FilesystemHelpers.write_p!(fpath, " \n \n ") + + assert {:ok, res} = DownloadOptionBuilder.build(media_item) + + refute {:cookies, fpath} in res + end + + test "doesn't include cookie options when cookies.txt doesn't exist", %{media_item: media_item, fpath: fpath} do + File.rm(fpath) + + assert {:ok, res} = DownloadOptionBuilder.build(media_item) + + refute {:cookies, fpath} in res + end + end + describe "build/1 when testing subtitle options" do test "includes :write_subs option when specified", %{media_item: media_item} do media_item = update_media_profile_attribute(media_item, %{download_subs: true})