Added cookie file option to DL option builder

This commit is contained in:
Kieran Eglin 2024-03-24 18:43:16 -07:00
parent 0d9998939c
commit 78d33db169
No known key found for this signature in database
GPG key ID: 193984967FCF432D
3 changed files with 50 additions and 2 deletions

View file

@ -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

View file

@ -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)

View file

@ -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})