diff --git a/lib/pinchflat/settings/setting.ex b/lib/pinchflat/settings/setting.ex
index 61c626c..13b0427 100644
--- a/lib/pinchflat/settings/setting.ex
+++ b/lib/pinchflat/settings/setting.ex
@@ -13,7 +13,9 @@ defmodule Pinchflat.Settings.Setting do
:apprise_version,
:apprise_server,
:video_codec_preference,
- :audio_codec_preference
+ :audio_codec_preference,
+ :video_codec_preference_string,
+ :audio_codec_preference_string
]
@required_fields ~w(
@@ -38,6 +40,31 @@ defmodule Pinchflat.Settings.Setting do
def changeset(setting, attrs) do
setting
|> cast(attrs, @allowed_fields)
+ |> convert_codec_preference_strings()
|> validate_required(@required_fields)
end
+
+ # TODO: test
+ defp convert_codec_preference_strings(changeset) do
+ fields = [
+ video_codec_preference_string: :video_codec_preference,
+ audio_codec_preference_string: :audio_codec_preference
+ ]
+
+ Enum.reduce(fields, changeset, fn {virtual_field, actual_field}, changeset ->
+ case get_change(changeset, virtual_field) do
+ nil ->
+ changeset
+
+ value ->
+ new_value =
+ value
+ |> String.split(">")
+ |> Enum.map(&String.trim/1)
+ |> Enum.reject(&(String.trim(&1) == ""))
+
+ put_change(changeset, actual_field, new_value)
+ end
+ end)
+ end
end
diff --git a/lib/pinchflat_web/controllers/media_items/media_item_html/media_item_form.html.heex b/lib/pinchflat_web/controllers/media_items/media_item_html/media_item_form.html.heex
index 9e61673..a8f5d9a 100644
--- a/lib/pinchflat_web/controllers/media_items/media_item_html/media_item_form.html.heex
+++ b/lib/pinchflat_web/controllers/media_items/media_item_html/media_item_form.html.heex
@@ -9,7 +9,7 @@
Oops, something went wrong! Please check the errors below.
-
+
General Options
diff --git a/lib/pinchflat_web/controllers/settings/setting_controller.ex b/lib/pinchflat_web/controllers/settings/setting_controller.ex
index 5e009c1..6ae80f1 100644
--- a/lib/pinchflat_web/controllers/settings/setting_controller.ex
+++ b/lib/pinchflat_web/controllers/settings/setting_controller.ex
@@ -12,6 +12,7 @@ defmodule PinchflatWeb.Settings.SettingController do
def update(conn, %{"setting" => setting_params}) do
setting = Settings.record()
+ IO.inspect(setting_params)
case Settings.update_setting(setting, setting_params) do
{:ok, _} ->
diff --git a/lib/pinchflat_web/controllers/settings/setting_html/setting_form.html.heex b/lib/pinchflat_web/controllers/settings/setting_html/setting_form.html.heex
index f8e5d7e..63de288 100644
--- a/lib/pinchflat_web/controllers/settings/setting_html/setting_form.html.heex
+++ b/lib/pinchflat_web/controllers/settings/setting_html/setting_form.html.heex
@@ -15,5 +15,34 @@
) %>
+
+
+ Advanced Options
+
+
+ <%!-- TODO: add codec docs --%>
+ <.input
+ id="video_codec_preference_string"
+ name="setting[video_codec_preference_string]"
+ value={Enum.join(f[:video_codec_preference].value, ">")}
+ placeholder="avc>vp9>av01"
+ type="text"
+ label="Video Codec Preference"
+ help="Order of preference for video codecs. Separate with >. See below for available codecs TODO"
+ inputclass="font-mono text-sm mr-4"
+ />
+
+ <.input
+ id="audio_codec_preference_string"
+ name="setting[audio_codec_preference_string]"
+ value={Enum.join(f[:audio_codec_preference].value, ">")}
+ placeholder="mp4a>opus>aac"
+ type="text"
+ label="Audio Codec Preference"
+ help="Order of preference for audio codecs. Separate with >. See below for available codecs TODO"
+ inputclass="font-mono text-sm mr-4"
+ />
+
+
<.button class="mt-10 mb-4 sm:mb-8 w-full sm:w-auto" rounding="rounded-lg">Save Settings