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