[Enhancement] Add support for yt-dlp plugins + add lifecycle script event for app boot (#465)
* Added new script type to pre-job startup tasks * Updated Dockerfile to create the needful directories * added tests
This commit is contained in:
@@ -88,6 +88,7 @@ RUN apt-get update -y && \
|
|||||||
ca-certificates \
|
ca-certificates \
|
||||||
python3-mutagen \
|
python3-mutagen \
|
||||||
curl \
|
curl \
|
||||||
|
zip \
|
||||||
openssh-client \
|
openssh-client \
|
||||||
nano \
|
nano \
|
||||||
python3 \
|
python3 \
|
||||||
@@ -116,7 +117,8 @@ ENV LC_ALL en_US.UTF-8
|
|||||||
WORKDIR "/app"
|
WORKDIR "/app"
|
||||||
|
|
||||||
# Set up data volumes
|
# Set up data volumes
|
||||||
RUN mkdir /config /downloads /etc/elixir_tzdata_data && chmod ugo+rw /etc/elixir_tzdata_data
|
RUN mkdir -p /config /downloads /etc/elixir_tzdata_data /etc/yt-dlp/plugins && \
|
||||||
|
chmod ugo+rw /etc/elixir_tzdata_data /etc/yt-dlp /etc/yt-dlp/plugins
|
||||||
|
|
||||||
# set runner ENV
|
# set runner ENV
|
||||||
ENV MIX_ENV="prod"
|
ENV MIX_ENV="prod"
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ defmodule Pinchflat.Boot.PreJobStartupTasks do
|
|||||||
alias Pinchflat.Settings
|
alias Pinchflat.Settings
|
||||||
alias Pinchflat.Utils.FilesystemUtils
|
alias Pinchflat.Utils.FilesystemUtils
|
||||||
|
|
||||||
|
alias Pinchflat.Lifecycle.UserScripts.CommandRunner, as: UserScriptRunner
|
||||||
|
|
||||||
def start_link(opts \\ []) do
|
def start_link(opts \\ []) do
|
||||||
GenServer.start_link(__MODULE__, %{}, opts)
|
GenServer.start_link(__MODULE__, %{}, opts)
|
||||||
end
|
end
|
||||||
@@ -36,6 +38,7 @@ defmodule Pinchflat.Boot.PreJobStartupTasks do
|
|||||||
create_blank_yt_dlp_files()
|
create_blank_yt_dlp_files()
|
||||||
create_blank_user_script_file()
|
create_blank_user_script_file()
|
||||||
apply_default_settings()
|
apply_default_settings()
|
||||||
|
run_app_init_script()
|
||||||
|
|
||||||
{:ok, state}
|
{:ok, state}
|
||||||
end
|
end
|
||||||
@@ -95,6 +98,12 @@ defmodule Pinchflat.Boot.PreJobStartupTasks do
|
|||||||
Settings.set(apprise_version: apprise_version)
|
Settings.set(apprise_version: apprise_version)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp run_app_init_script do
|
||||||
|
runner = Application.get_env(:pinchflat, :user_script_runner, UserScriptRunner)
|
||||||
|
|
||||||
|
runner.run(:app_init, %{})
|
||||||
|
end
|
||||||
|
|
||||||
defp yt_dlp_runner do
|
defp yt_dlp_runner do
|
||||||
Application.get_env(:pinchflat, :yt_dlp_runner)
|
Application.get_env(:pinchflat, :yt_dlp_runner)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ defmodule Pinchflat.Lifecycle.UserScripts.CommandRunner do
|
|||||||
@behaviour UserScriptCommandRunner
|
@behaviour UserScriptCommandRunner
|
||||||
|
|
||||||
@event_types [
|
@event_types [
|
||||||
|
:app_init,
|
||||||
:media_pre_download,
|
:media_pre_download,
|
||||||
:media_downloaded,
|
:media_downloaded,
|
||||||
:media_deleted
|
:media_deleted
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ defmodule Pinchflat.Release do
|
|||||||
[
|
[
|
||||||
"/config",
|
"/config",
|
||||||
"/downloads",
|
"/downloads",
|
||||||
|
"/etc/yt-dlp",
|
||||||
|
"/etc/yt-dlp/plugins",
|
||||||
Application.get_env(:pinchflat, :media_directory),
|
Application.get_env(:pinchflat, :media_directory),
|
||||||
Application.get_env(:pinchflat, :tmpfile_directory),
|
Application.get_env(:pinchflat, :tmpfile_directory),
|
||||||
Application.get_env(:pinchflat, :extras_directory),
|
Application.get_env(:pinchflat, :extras_directory),
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ defmodule Pinchflat.Boot.PreJobStartupTasksTest do
|
|||||||
setup do
|
setup do
|
||||||
stub(YtDlpRunnerMock, :version, fn -> {:ok, "1"} end)
|
stub(YtDlpRunnerMock, :version, fn -> {:ok, "1"} end)
|
||||||
stub(AppriseRunnerMock, :version, fn -> {:ok, "2"} end)
|
stub(AppriseRunnerMock, :version, fn -> {:ok, "2"} end)
|
||||||
|
stub(UserScriptRunnerMock, :run, fn _event_type, _data -> {:ok, "3", 0} end)
|
||||||
|
|
||||||
:ok
|
:ok
|
||||||
end
|
end
|
||||||
@@ -112,4 +113,16 @@ defmodule Pinchflat.Boot.PreJobStartupTasksTest do
|
|||||||
assert Settings.get!(:apprise_version)
|
assert Settings.get!(:apprise_version)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "run_app_init_script" do
|
||||||
|
test "calls the app_init user script runner" do
|
||||||
|
expect(UserScriptRunnerMock, :run, fn :app_init, data ->
|
||||||
|
assert data == %{}
|
||||||
|
|
||||||
|
{:ok, "", 0}
|
||||||
|
end)
|
||||||
|
|
||||||
|
PreJobStartupTasks.init(%{})
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user