[WIP] Adding apprise package
This commit is contained in:
parent
e5c1a41853
commit
102074e8d3
5 changed files with 76 additions and 11 deletions
|
|
@ -12,7 +12,9 @@ config :pinchflat,
|
||||||
generators: [timestamp_type: :utc_datetime],
|
generators: [timestamp_type: :utc_datetime],
|
||||||
# Specifying backend data here makes mocking and local testing SUPER easy
|
# Specifying backend data here makes mocking and local testing SUPER easy
|
||||||
yt_dlp_executable: System.find_executable("yt-dlp"),
|
yt_dlp_executable: System.find_executable("yt-dlp"),
|
||||||
|
apprise_executable: System.find_executable("apprise"),
|
||||||
yt_dlp_runner: Pinchflat.YtDlp.CommandRunner,
|
yt_dlp_runner: Pinchflat.YtDlp.CommandRunner,
|
||||||
|
apprise_runner: Pinchflat.Notifications.CommandRunner,
|
||||||
media_directory: "/downloads",
|
media_directory: "/downloads",
|
||||||
# The user may or may not store metadata for their needs, but the app will always store its copy
|
# The user may or may not store metadata for their needs, but the app will always store its copy
|
||||||
metadata_directory: "/config/metadata",
|
metadata_directory: "/config/metadata",
|
||||||
|
|
|
||||||
|
|
@ -5,15 +5,10 @@ ARG DEV_IMAGE="hexpm/elixir:${ELIXIR_VERSION}-erlang-${OTP_VERSION}-debian-${DEB
|
||||||
|
|
||||||
FROM ${DEV_IMAGE}
|
FROM ${DEV_IMAGE}
|
||||||
|
|
||||||
# Set the locale deets
|
|
||||||
ENV LANG en_US.UTF-8
|
|
||||||
ENV LANGUAGE en_US:en
|
|
||||||
ENV LC_ALL en_US.UTF-8
|
|
||||||
|
|
||||||
# Install debian packages
|
# Install debian packages
|
||||||
RUN apt-get update -qq
|
RUN apt-get update -qq
|
||||||
RUN apt-get install -y inotify-tools ffmpeg curl git openssh-client \
|
RUN apt-get install -y inotify-tools ffmpeg curl git openssh-client \
|
||||||
python3 python3-pip python3-setuptools python3-wheel python3-dev
|
python3 python3-pip python3-setuptools python3-wheel python3-dev locales
|
||||||
|
|
||||||
# Install nodejs
|
# Install nodejs
|
||||||
RUN curl -sL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh
|
RUN curl -sL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh
|
||||||
|
|
@ -25,9 +20,20 @@ RUN npm install -g yarn
|
||||||
RUN mix local.hex --force
|
RUN mix local.hex --force
|
||||||
RUN mix local.rebar --force
|
RUN mix local.rebar --force
|
||||||
|
|
||||||
# Download YT-DLP
|
# Download and update YT-DLP
|
||||||
# NOTE: If you're seeing weird issues, consider using the FFMPEG released by yt-dlp
|
# NOTE: If you're seeing weird issues, consider using the FFMPEG released by yt-dlp
|
||||||
RUN python3 -m pip install -U --pre yt-dlp --break-system-packages
|
RUN curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
|
||||||
|
RUN chmod a+rx /usr/local/bin/yt-dlp
|
||||||
|
RUN yt-dlp -U
|
||||||
|
|
||||||
|
# Download Apprise
|
||||||
|
RUN python3 -m pip install -U apprise --break-system-packages
|
||||||
|
|
||||||
|
# Set the locale
|
||||||
|
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen
|
||||||
|
ENV LANG en_US.UTF-8
|
||||||
|
ENV LANGUAGE en_US:en
|
||||||
|
ENV LC_ALL en_US.UTF-8
|
||||||
|
|
||||||
# Create app directory and copy the Elixir projects into it.
|
# Create app directory and copy the Elixir projects into it.
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,32 @@ defmodule Pinchflat.Notifications.CommandRunner do
|
||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
|
alias Pinchflat.Utils.FunctionUtils
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
# TODO
|
# TODO
|
||||||
"""
|
"""
|
||||||
def run do
|
def run() do
|
||||||
|
end
|
||||||
|
|
||||||
|
# TODO: test
|
||||||
|
# TODO: add behaviour
|
||||||
|
def version do
|
||||||
|
case System.cmd(backend_executable(), ["--version"]) do
|
||||||
|
{output, 0} ->
|
||||||
|
output
|
||||||
|
|> String.split(~r{\r?\n})
|
||||||
|
|> List.first()
|
||||||
|
|> String.replace("Apprise", "")
|
||||||
|
|> String.trim()
|
||||||
|
|> FunctionUtils.wrap_ok()
|
||||||
|
|
||||||
|
{output, _} ->
|
||||||
|
{:error, output}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp backend_executable do
|
||||||
|
Application.get_env(:pinchflat, :apprise_executable)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
32
lib/pinchflat/utils/cli_utils.ex
Normal file
32
lib/pinchflat/utils/cli_utils.ex
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
defmodule Pinchflat.Utils.CliUtils do
|
||||||
|
# TODO: test
|
||||||
|
def parse_options(command_opts) do
|
||||||
|
Enum.reduce(command_opts, [], &parse_option/2)
|
||||||
|
end
|
||||||
|
|
||||||
|
# We want to satisfy the following behaviours:
|
||||||
|
#
|
||||||
|
# 1. If the key is an atom, convert it to a string and convert it to kebab case (for convenience)
|
||||||
|
# 2. If the key is a string, assume we want it as-is and don't convert it
|
||||||
|
# 3. If the key is accompanied by a value, append the value to the list
|
||||||
|
# 4. If the key is not accompanied by a value, assume it's a flag and PREpend it to the list
|
||||||
|
defp parse_option({k, v}, acc) when is_atom(k) do
|
||||||
|
stringified_key = StringUtils.to_kebab_case(Atom.to_string(k))
|
||||||
|
|
||||||
|
parse_option({"--#{stringified_key}", v}, acc)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp parse_option({k, v}, acc) when is_binary(k) do
|
||||||
|
acc ++ [k, to_string(v)]
|
||||||
|
end
|
||||||
|
|
||||||
|
defp parse_option(arg, acc) when is_atom(arg) do
|
||||||
|
stringified_arg = StringUtils.to_kebab_case(Atom.to_string(arg))
|
||||||
|
|
||||||
|
parse_option("--#{stringified_arg}", acc)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp parse_option(arg, acc) when is_binary(arg) do
|
||||||
|
acc ++ [arg]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -79,7 +79,7 @@ ARG PORT=8945
|
||||||
|
|
||||||
RUN apt-get update -y
|
RUN apt-get update -y
|
||||||
RUN apt-get install -y libstdc++6 openssl libncurses5 locales ca-certificates \
|
RUN apt-get install -y libstdc++6 openssl libncurses5 locales ca-certificates \
|
||||||
ffmpeg curl git openssh-client nano
|
ffmpeg curl git openssh-client nano python3 python3-pip
|
||||||
RUN apt-get clean && rm -f /var/lib/apt/lists/*_*
|
RUN apt-get clean && rm -f /var/lib/apt/lists/*_*
|
||||||
|
|
||||||
# Download and update YT-DLP
|
# Download and update YT-DLP
|
||||||
|
|
@ -87,9 +87,11 @@ RUN curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o
|
||||||
RUN chmod a+rx /usr/local/bin/yt-dlp
|
RUN chmod a+rx /usr/local/bin/yt-dlp
|
||||||
RUN yt-dlp -U
|
RUN yt-dlp -U
|
||||||
|
|
||||||
|
# Download Apprise
|
||||||
|
RUN python3 -m pip install -U apprise --break-system-packages
|
||||||
|
|
||||||
# Set the locale
|
# Set the locale
|
||||||
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen
|
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen
|
||||||
|
|
||||||
ENV LANG en_US.UTF-8
|
ENV LANG en_US.UTF-8
|
||||||
ENV LANGUAGE en_US:en
|
ENV LANGUAGE en_US:en
|
||||||
ENV LC_ALL en_US.UTF-8
|
ENV LC_ALL en_US.UTF-8
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue