* [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
81 lines
1.7 KiB
Elixir
81 lines
1.7 KiB
Elixir
defmodule Pinchflat.Settings do
|
|
@moduledoc """
|
|
The Settings context.
|
|
"""
|
|
import Ecto.Query, warn: false
|
|
|
|
alias Pinchflat.Repo
|
|
alias Pinchflat.Settings.Setting
|
|
|
|
@doc """
|
|
Returns the only setting record. It _should_ be impossible
|
|
to create or delete this record, so it's assertive about
|
|
assuming it's the only one.
|
|
|
|
Returns %Setting{}
|
|
"""
|
|
def record do
|
|
Setting
|
|
|> limit(1)
|
|
|> Repo.one()
|
|
end
|
|
|
|
@doc """
|
|
Updates the setting record.
|
|
|
|
Returns {:ok, %Setting{}} | {:error, %Ecto.Changeset{}}
|
|
"""
|
|
def update_setting(%Setting{} = setting, attrs) do
|
|
setting
|
|
|> Setting.changeset(attrs)
|
|
|> Repo.update()
|
|
end
|
|
|
|
@doc """
|
|
Updates a setting, returning the new value.
|
|
Is setup to take a keyword list argument so you
|
|
can call it like `Settings.set(onboarding: true)`
|
|
|
|
Returns {:ok, value} | {:error, :invalid_key} | {:error, %Ecto.Changeset{}}
|
|
"""
|
|
def set([{attr, value}]) do
|
|
record()
|
|
|> update_setting(%{attr => value})
|
|
|> case do
|
|
{:ok, %{^attr => _}} -> {:ok, value}
|
|
{:ok, _} -> {:error, :invalid_key}
|
|
{:error, changeset} -> {:error, changeset}
|
|
end
|
|
end
|
|
|
|
@doc """
|
|
Gets the value of a setting.
|
|
|
|
Returns {:ok, value} | {:error, :invalid_key}
|
|
"""
|
|
def get(name) do
|
|
case Map.fetch(record(), name) do
|
|
{:ok, value} -> {:ok, value}
|
|
:error -> {:error, :invalid_key}
|
|
end
|
|
end
|
|
|
|
@doc """
|
|
Gets the value of a setting, raising if it doesn't exist.
|
|
|
|
Returns value
|
|
"""
|
|
def get!(name) do
|
|
case get(name) do
|
|
{:ok, value} -> value
|
|
{:error, _} -> raise "Setting `#{name}` not found"
|
|
end
|
|
end
|
|
|
|
@doc """
|
|
Returns `%Ecto.Changeset{}`
|
|
"""
|
|
def change_setting(%Setting{} = setting, attrs \\ %{}) do
|
|
Setting.changeset(setting, attrs)
|
|
end
|
|
end
|