[Enhancement] Add Apprise support (#170)

* [WIP] add settings sidebar entry and placeholder page

* [WIP] added placeholder UI and logic for settings form

* Added column and UI for apprise server

* Add some tests

* Added placeholder command runner for apprise

* [WIP] Adding apprise package

* Added apprise command runner

* Hooked up apprise notification module

* Ensured apprise was running in verbose mode

* Updated wording of apprise notification

* Added apprise to README
This commit is contained in:
Kieran
2024-04-09 09:45:39 -07:00
committed by GitHub
parent a9f40ed843
commit 8a0ae89bc0
38 changed files with 730 additions and 107 deletions
@@ -247,6 +247,7 @@ defmodule PinchflatWeb.CoreComponents do
attr :label_suffix, :string, default: nil
attr :value, :any
attr :help, :string, default: nil
attr :html_help, :boolean, default: false
attr :type, :string,
default: "text",
@@ -298,7 +299,7 @@ defmodule PinchflatWeb.CoreComponents do
<%= @label %>
<span :if={@label_suffix} class="text-xs text-bodydark"><%= @label_suffix %></span>
</label>
<.help :if={@help}><%= @help %></.help>
<.help :if={@help}><%= if @html_help, do: Phoenix.HTML.raw(@help), else: @help %></.help>
<.error :for={msg <- @errors}><%= msg %></.error>
</div>
"""
@@ -325,7 +326,7 @@ defmodule PinchflatWeb.CoreComponents do
</label>
</div>
</section>
<.help :if={@help}><%= @help %></.help>
<.help :if={@help}><%= if @html_help, do: Phoenix.HTML.raw(@help), else: @help %></.help>
<.error :for={msg <- @errors}><%= msg %></.error>
</div>
"""
@@ -356,7 +357,7 @@ defmodule PinchflatWeb.CoreComponents do
>
</div>
</div>
<.help :if={@help}><%= @help %></.help>
<.help :if={@help}><%= if @html_help, do: Phoenix.HTML.raw(@help), else: @help %></.help>
<.error :for={msg <- @errors}><%= msg %></.error>
</div>
</div>
@@ -387,7 +388,7 @@ defmodule PinchflatWeb.CoreComponents do
</select>
<%= render_slot(@inner_block) %>
</div>
<.help :if={@help}><%= @help %></.help>
<.help :if={@help}><%= if @html_help, do: Phoenix.HTML.raw(@help), else: @help %></.help>
<.error :for={msg <- @errors}><%= msg %></.error>
</div>
"""
@@ -411,7 +412,7 @@ defmodule PinchflatWeb.CoreComponents do
]}
{@rest}
><%= Phoenix.HTML.Form.normalize_value("textarea", @value) %></textarea>
<.help :if={@help}><%= @help %></.help>
<.help :if={@help}><%= if @html_help, do: Phoenix.HTML.raw(@help), else: @help %></.help>
<.error :for={msg <- @errors}><%= msg %></.error>
</div>
"""
@@ -438,7 +439,7 @@ defmodule PinchflatWeb.CoreComponents do
]}
{@rest}
/>
<.help :if={@help}><%= @help %></.help>
<.help :if={@help}><%= if @html_help, do: Phoenix.HTML.raw(@help), else: @help %></.help>
<.error :for={msg <- @errors}><%= msg %></.error>
</div>
"""
@@ -24,6 +24,7 @@
<.sidebar_item icon="hero-home" text="Home" href={~p"/"} />
<.sidebar_item icon="hero-tv" text="Sources" href={~p"/sources"} />
<.sidebar_item icon="hero-adjustments-vertical" text="Media Profiles" href={~p"/media_profiles"} />
<.sidebar_item icon="hero-cog-6-tooth" text="Settings" href={~p"/settings"} />
</ul>
</div>
</nav>
@@ -38,12 +39,7 @@
target="_blank"
href="https://github.com/kieraneglin/pinchflat/wiki"
/>
<.sidebar_item
icon="hero-code-bracket"
text="Github"
target="_blank"
href="https://github.com/kieraneglin/pinchflat"
/>
<.sidebar_item icon="hero-cog" text="Github" target="_blank" href="https://github.com/kieraneglin/pinchflat" />
<li>
<span
class={[
@@ -0,0 +1,26 @@
defmodule PinchflatWeb.Settings.SettingController do
use PinchflatWeb, :controller
alias Pinchflat.Settings
def show(conn, _params) do
setting = Settings.record()
changeset = Settings.change_setting(setting)
render(conn, "show.html", changeset: changeset)
end
def update(conn, %{"setting" => setting_params}) do
setting = Settings.record()
case Settings.update_setting(setting, setting_params) do
{:ok, _} ->
conn
|> put_flash(:info, "Settings updated successfully.")
|> redirect(to: ~p"/settings")
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "show.html", changeset: changeset)
end
end
end
@@ -0,0 +1,20 @@
defmodule PinchflatWeb.Settings.SettingHTML do
use PinchflatWeb, :html
embed_templates "setting_html/*"
@doc """
Renders a setting form.
"""
attr :changeset, Ecto.Changeset, required: true
attr :action, :string, required: true
def setting_form(assigns)
def apprise_server_help do
url = "https://github.com/caronc/apprise/wiki/URLBasics"
classes = "underline decoration-bodydark decoration-1 hover:decoration-white"
~s(Server endpoint for Apprise notifications when new media is found. See <a href="#{url}" class="#{classes}" target="_blank">Apprise docs</a> for more information)
end
end
@@ -0,0 +1,21 @@
<.simple_form :let={f} for={@changeset} action={@action}>
<.error :if={@changeset.action}>
Oops, something went wrong! Please check the errors below.
</.error>
<h3 class="mt-8 text-2xl text-black dark:text-white">
Notification Settings
</h3>
<.input
field={f[:apprise_server]}
type="text"
label="Apprise Server"
help={apprise_server_help()}
html_help={true}
inputclass="font-mono text-sm"
placeholder="https://discordapp.com/api/webhooks/{WebhookID}/{WebhookToken}"
/>
<.button class="my-10 sm:mb-7.5 w-full sm:w-auto" rounding="rounded-lg">Save Settings</.button>
</.simple_form>
@@ -0,0 +1,12 @@
<div class="mb-6 flex gap-3 flex-row items-center justify-between">
<div class="flex gap-3 items-center">
<h2 class="text-title-md2 font-bold text-black dark:text-white ml-4">
Settings
</h2>
</div>
</div>
<div class="rounded-sm border border-stroke bg-white px-5 py-5 shadow-default dark:border-strokedark dark:bg-boxdark sm:px-7.5">
<div class="max-w-full overflow-x-auto">
<.setting_form changeset={@changeset} action={~p"/settings"} />
</div>
</div>
+1
View File
@@ -30,6 +30,7 @@ defmodule PinchflatWeb.Router do
resources "/media_profiles", MediaProfiles.MediaProfileController
resources "/search", Searches.SearchController, only: [:show], singleton: true
resources "/settings", Settings.SettingController, only: [:show, :update], singleton: true
resources "/sources", Sources.SourceController do
post "/force_download", Sources.SourceController, :force_download