From cc889d654288eaaf5845b5cb6e47eb30c8446504 Mon Sep 17 00:00:00 2001 From: Kieran Eglin Date: Tue, 11 Mar 2025 15:38:48 -0700 Subject: [PATCH] Added limit_rate option to command runner --- lib/pinchflat/yt_dlp/command_runner.ex | 10 +++++++++- test/pinchflat/yt_dlp/command_runner_test.exs | 18 +++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/pinchflat/yt_dlp/command_runner.ex b/lib/pinchflat/yt_dlp/command_runner.ex index c90511b..80c4c98 100644 --- a/lib/pinchflat/yt_dlp/command_runner.ex +++ b/lib/pinchflat/yt_dlp/command_runner.ex @@ -35,7 +35,7 @@ defmodule Pinchflat.YtDlp.CommandRunner do output_filepath = generate_output_filepath(addl_opts) print_to_file_opts = [{:print_to_file, output_template}, output_filepath] - user_configured_opts = cookie_file_options(addl_opts) ++ sleep_interval_opts(addl_opts) + user_configured_opts = cookie_file_options(addl_opts) ++ rate_limit_opts(addl_opts) # These must stay in exactly this order, hence why I'm giving it its own variable. all_opts = command_opts ++ print_to_file_opts ++ user_configured_opts ++ global_options() formatted_command_opts = [url] ++ CliUtils.parse_options(all_opts) @@ -116,6 +116,14 @@ defmodule Pinchflat.YtDlp.CommandRunner do end end + defp rate_limit_opts(addl_opts) do + throughput_limit = Settings.get!(:download_throughput_limit) + sleep_interval_opts = sleep_interval_opts(addl_opts) + throughput_option = if throughput_limit, do: [limit_rate: throughput_limit], else: [] + + throughput_option ++ sleep_interval_opts + end + defp sleep_interval_opts(addl_opts) do sleep_interval = Settings.get!(:extractor_sleep_interval_seconds) diff --git a/test/pinchflat/yt_dlp/command_runner_test.exs b/test/pinchflat/yt_dlp/command_runner_test.exs index 4c55972..ddbc77f 100644 --- a/test/pinchflat/yt_dlp/command_runner_test.exs +++ b/test/pinchflat/yt_dlp/command_runner_test.exs @@ -96,7 +96,7 @@ defmodule Pinchflat.YtDlp.CommandRunnerTest do end end - describe "run/4 when testing sleep interval options" do + describe "run/4 when testing rate limit options" do test "includes sleep interval options by default" do Settings.set(extractor_sleep_interval_seconds: 5) @@ -124,6 +124,22 @@ defmodule Pinchflat.YtDlp.CommandRunnerTest do refute String.contains?(output, "--sleep-requests") refute String.contains?(output, "--sleep-subtitles") end + + test "includes limit_rate option when specified" do + Settings.set(download_throughput_limit: "100K") + + assert {:ok, output} = Runner.run(@media_url, :foo, [], "") + + assert String.contains?(output, "--limit-rate 100K") + end + + test "doesn't include limit_rate option when download_throughput_limit is nil" do + Settings.set(download_throughput_limit: nil) + + assert {:ok, output} = Runner.run(@media_url, :foo, [], "") + + refute String.contains?(output, "--limit-rate") + end end describe "run/4 when testing global options" do